Skip to content

🌱 top-up: forward-merge v5 into v6 (2026-10-15) - #12254

Merged
hivecommons-hive[bot] merged 109 commits into
v6from
topup/v5-into-v6-2026-10-15
Oct 16, 2026
Merged

hivecommons-hive[bot] merged 109 commits into
v6from
topup/v5-into-v6-2026-10-15

Conversation

@clubanderson

Copy link
Copy Markdown
Member

Summary

Forward-merge (git merge origin/v5 --no-ff -s recursive -X patience) of v5 into v6 — 106 v5 commits (merge base baf238280), landed as a true merge commit plus one follow-up commit (108 commits ahead of origin/v6). History preserved so the next top-up merges cleanly.

Notable v5 changes brought over

Docs

Token efficiency

Dashboard

#9945 fixes

Settings parity

Other

Conflicts resolved (24 files)

File Resolution
NOTICE, README.md union; v6 layout kept, v5 wording/relay taken
.github/workflows/v2-ci.yml union of gates; higher coverage floors
src/cmd/hive/main.go, src/pkg/config/* union of flags/leaves
src/pkg/github/client.go, commit_ci.go, automerge_sweep.go v5 fixes on top of v6 structure
src/pkg/scheduler/kickmessage.go, kick_layout.go v6 assembleKick + v5 elideStuffed/addTaskMCPPointer; governorWorkSourceRule merged text ported into all 10 quality templates
src/pkg/dashboard/bands.go, overview_status.go, 9102 test keep v6 band defaults
src/pkg/dashboard/api_nous.go, nous_research_question.go v5 repo-only Nous API ported onto v6 names (experiment_lab)
src/pkg/dashboard/api_governor_features.go v5 retro validation + prepare/apply body embedding; removed duplicate ExtFlue fields; response includes retro* fields
src/pkg/dashboard/settings_parity_allowlist.txt 3-way set merge (union minus entries either side removed)
src/pkg/dashboard/static/index.html hunk-by-hunk: took v5 renderGovFeatures (sections refactor) and re-ported v6 additions (Persona learning, Nous/Experiment Lab subsection, Advisor Lane, ACMM gating on checkpoint toggle); renderNousConfig → repo-only; search index union (v6 Experiment Lab naming); v6's colliding gh103 handler renumbered to gh105; duplicate modeColors removed
src/docs/{hive.yaml.example,dashboard-sections.md,experiment-lab.md,scale-envelope.md,api-reference.md} union; v5 Strategy Lab content ported to v6 Experiment Lab names; check-api-reference-citations.sh --fix run
src/pkg/dashboard/pr_throughput_ui_test.go, webstatic/style_ratchet_test.go v6 layout / counts

Follow-up commit aligns v6-only tests with v5 contracts (repo-only lab scope, features-section search keys, hf* label-filter harness stubs, 🐝 covered by PR added to reserved exact labels, runs-section default-collapsed, nous.dispatcher setting key).

Verification

cd src && go build ./... && go vet ./... && go test ./... -count=1
bash src/scripts/check-api-reference-citations.sh --fix
go test -cover ./pkg/dashboard ./pkg/dashboard/webstatic ./pkg/scheduler ./pkg/github ./pkg/github/automerge ./pkg/config ./cmd/hive ./pkg/policies ./pkg/retro ./pkg/agent

Coverage vs PKG_THRESHOLD: dashboard 86.6 (≥84), webstatic 92.9 (≥88), github 90.4 (≥88), automerge 90.5 (≥88), scheduler 93.8, config 90.9, policies 91.5, retro 91.0 (≥90), agent 89.1 (≥88), cmd/hive 75.2 (≥42). TestStyleRatchet, TestSettingsDialogReferencesEveryHiveYAMLLeaf, TestSleepRatchet pass.

Local-only failures (identical on pristine origin/v5/origin/v6, macOS tmux/TZ env): TestPollTmuxOutputForAgent_WiresThrashBreaker, TestApplySessionEnv_Injection…, TestAgentClosedFindingIsNotReportedResolved, TestGitRetagger_*.

Note: probot DCO / prow dco fail on forward-merge PRs carrying other authors' commits — known, non-blocking.

hivecommons-hive Bot and others added 30 commits October 15, 2026 10:21
Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
* 🌱 images: bump claude 2.1.296 -> 2.1.300

Automated pin bump (#8419). Digests recomputed from the downloaded
release artifacts by src/scripts/cli-pin-bump.sh:

  VERSION=2.1.300

Signed-off-by: hive-release[bot] <hive-release@hive.kubestellar.io>
Signed-off-by: clubanderson <407614+clubanderson@users.noreply.github.com>

* changelog: fragment for #11987

Generated by changelog-fragment-guard from the PR title (#5675).
Edit the wording freely, or replace this file with the no-changelog
label if the change is not user-visible.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Signed-off-by: clubanderson <407614+clubanderson@users.noreply.github.com>

---------

Signed-off-by: hive-release[bot] <hive-release@hive.kubestellar.io>
Signed-off-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Co-authored-by: hive-release[bot] <hive-release@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Automated release commit. Compiles changelog.d/ fragments and moves
the CHANGELOG.md Unreleased section into a dated v5.175.0 entry.
See src/docs/releases.md.

Signed-off-by: hive-release-bot <actions@github.com>
…l clock at load (#11997)

loadLastGood ran from newCLIModelCache with time.Now before a caller could
install its clock and dropped entries older than cliModelLastGoodTTL. The
TTL is already enforced in lastGoodFor with c.clock() on every read, so the
load-time filter was redundant and made the dashboard last-good tests
time-dependent: they pinned 2026-10-14 and failed deterministically on v5
once the wall clock passed the 24h window.

Fixes #11994
Fixes #11995
Fixes #11996

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Widen the Knowledge Sources dialog to min(1480px, 94vw) x min(92vh, 1100px)
with the body as the single scroller, move its inline layout recipes into
.kb-sources-* stylesheet classes (section cards, explainer, form rhythm,
nowrap action buttons), and fold the two-column grid to one column on the
<=768px and landscape phone tiers. Lowers the style ratchet baselines.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
… hub vs spoke (#12001)

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
… keys (#11993)

* feat(dashboard): expose issues/jev/duplicate_sweep/policies/turn settings keys

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>

* fix(dashboard): move new settings subsection styling to token classes

The style ratchet (TestStyleRatchet) counts inline style= attributes and raw
px/rem font-size/padding values; the new settings subsections added 13 of
them. Replace with .settings-subsection* classes built on tokens.css values.

Signed-off-by: scanner <scanner@hive.kubestellar.io>

* fix(dashboard): apply last-good TTL at read time, not at cache construction

loadLastGood filtered persisted catalogs by cliModelLastGoodTTL using the
real clock during newCLIModelCache(), before callers could pin c.now. The
cache tests pin a fixed 2026-10-14 date, so once wall time passed that
fixture plus 24h, TestCLIModelCache_LastGoodPersistsAcrossRestart and
TestQueryCLIModelsForBoot_ServesPersistedLastGood began failing on every
run. lastGoodFor already enforces the TTL with the cache clock, so drop
the redundant eager filter.

Signed-off-by: scanner <scanner@hive.kubestellar.io>

---------

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
…n the PR journey (#12009)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
… issues from stale in-progress (#12012)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…PRs when CI is green (#12011)

PRs that hive's own contributor lane produced (linked issue carries this
hive's App-authored hive:claim kind=contributor marker for the PR author)
were skipped by every auto-merge tier (untrusted-author-role /
not-app-authored) and waited forever for a human /lgtm + /approve.

Add a default-on contributor-lane tier that merges such PRs once required
CI is green on the current head for a soak window (default 120m), the
reviewer verdict approves when a reviewer agent is configured, Sentinel
has no blocking finding, the reporter-trust gate has not held the PR, and
no exclude label is present. Skips log distinct contributor-lane:* reasons.

Config: auto_merge.contributor_lane.{enabled,soak_minutes,
require_reviewer_verdict,repos,exclude_labels} with Settings → Features
controls, dashboard GET/PUT /api/config/auto-merge support, docs, tests.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…2016)

A browser with no persisted dashboard state now starts Throughput, Tokens,
Cost, Advisory, Knowledge, Contributors, Inception, ACMM Eval, Diagnostics,
Audit Log, Agent Logs, Strategy Lab and FAQ collapsed; Overview, Governor,
Projects, Review, Approvals, Agents and Agent activity stay expanded. A
one-time marker (hive.dashboard.collapseDefaults) records legacy browsers so
existing operators keep the all-expanded default. Explicit expands persist
as '0' and win over the default; snapshots, import/export and reset
round-trip them. Adds Expand all / Collapse all to the Layout menu.

Fixes #12014

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…#12021)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
…once (#12018)

The .prt-metric wrapper carried the full tip as a native title= while the
ⓘ inside it rendered the same text in the styled .config-tooltip, so the
browser tooltip and the portal tooltip opened together. Drop the wrapper
title (the ⓘ keeps the text and its aria-label) and add a webstatic guard
that scans index.html markup and template literals for any .config-tooltip
trigger that also inherits a non-empty native title=.

Fixes #12017

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: Andrew Anderson <andy@clubanderson.com>
)

* 📖 docs: spell out ACMM (AI Codebase Maturity Model) on first use

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* 📖 docs: define ACMM at the top of the policy matrix page

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…hows the PR icon (#11890)

* ✨ Link non-default-branch fix PRs to their issues via addCloseIssueReferences

GitHub only derives closingIssuesReferences (the Development sidebar and
the issue-list PR icon) from closing keywords on default-branch PRs, so
v6 fixes were invisible in the issue list while v5 is the default.

Call GitHub's addCloseIssueReferences mutation for every same-repo
Fixes #N reference when CreatePR opens a PR against a non-default base,
and for strong open claims in SyncIssuePRClaimLabels so PRs opened
outside the relay are linked too. Pairs are memoised per process.

Fixes #11888

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* changelog: fragment for #11890

Generated by changelog-fragment-guard from the PR title (#5675).
Edit the wording freely, or replace this file with the no-changelog
label if the change is not user-visible.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Signed-off-by: clubanderson <407614+clubanderson@users.noreply.github.com>

* 📖 Shift scale-envelope client.go citation for the closingLinks field

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* ✨ Rename hive/covered-by-pr to 🐝 covered by PR with in-place label migration

Readers accept both spellings during the transition; the label ensure
path renames the legacy label via PATCH new_name on first use so
existing issues keep it without per-issue writes, and falls back to
creating the new label if the rename is refused. Consolidate changelog
fragments under the root changelog.d/ the guard reads.

Refs #11888

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* 📖 Shift scale-envelope citation for the coveredByPRLabel field

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com>
The Features tab had grown into one flat list of ~30 toggle/field blocks
with inconsistent heading treatment, so operators could not find the
Autonomy policy or contributor-lane controls that recently landed there.

Group every control into eight headed .config-section.features-section
groups (Auto-merge, Review gate, Autonomy & ACMM, Work intake & issue
lifecycle, Agents & tooling, Quality loops & release health, Integrations
& observability, Experimental), each with a sticky h3, a one-line
description and a stable id/data-settings-section anchor; add a chip
table of contents that scrolls #config-body (the dialog's scroll
container) to a section; rename the Settings search index sections to
match the headings; move the inline wrapper styles into classes and lower
the style ratchet baselines accordingly.

No control, yaml key, data-action, data-key or element id changed.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
* Revert "🐛 fix hosted spoke vanity ingress TLS (#12024)"

This reverts commit cb4f453.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* 🐛 revert legacy hosted-spoke TLS issuance

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
… tab from the DOM (#12035)

* 🐛 Settings search: scroll to and highlight the exact setting

Clicking a result or "Open tab" switched tabs and left the user at the
top of a long tab; hits in the hand-maintained index could also point at
a tab that has no such control (dashboard.strategy_lab under Features).

- Result rows and Open tab resolve the target tab from where the key is
  rendered, scroll the row into view inside #config-body, flash it
  (.cfg-row-flash, reduced-motion aware) and focus its control.
- Enter in the search box opens the first result.
- Every setting row carries data-setting-key; rows that lacked a yaml
  hint got explicit anchors (logging, watchdog, otel, ioscan, retro,
  rotation, thresholds, SLA targets, acmm_level).
- Fixed/removed drifted index entries; node-backed webstatic tests audit
  every entry against the rendered tabs.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* 🐛 Settings search: instant scroll and re-centre after the tab settles

Smooth-scrolling a ~10k px dialog body landed short when sections above
the row grew from their own fetches mid-scroll (Features tab). Scroll
instantly and re-centre once if the row left the viewport.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* changelog: fragment for #12035

Generated by changelog-fragment-guard from the PR title (#5675).
Edit the wording freely, or replace this file with the no-changelog
label if the change is not user-visible.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Signed-off-by: clubanderson <407614+clubanderson@users.noreply.github.com>

* 🌱 changelog: fragment as a '- ' entry bullet

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
… checks never run (#12050)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
…ys (parity batch 3) (#12046)

* feat(dashboard): expose settings parity batch 3 (data, deployment, evidence, forge, mint, …)

Refs #11854

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>

* fix(dashboard): drop pkg/mint and pkg/sessionprune imports; lower padding ratchet

pkg/dashboard only needed three constants from pkg/mint and pkg/sessionprune,
which tripped TestDashboardImportRatchet and the internal import-count
ratchet (47 > 45). Mirror them as second/day-valued constants in pkg/config
(already a dashboard dependency) and pin parity with tests in the owning
packages. Also lower the hub static pages raw-padding baseline to 164 for
TestStyleRatchet.

Signed-off-by: scanner <scanner@hive.kubestellar.io>

* fix(dashboard): use mt-4 utility instead of inline style for min_head_age field

Keeps the operator index.html style= ratchet at its baseline of 1507.

Signed-off-by: scanner <scanner@hive.kubestellar.io>

---------

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
…to_start (#12053)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…th the litellm gateway (#12057)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: MikeSpreitzer <14296719+MikeSpreitzer@users.noreply.github.com>
Every gate in triggerAutoUpgrades that turned away a daily/weekly hive while
its window was open logged at Debug only, so a stable-channel hive that missed
its 13:00 ET window kept showing the previous manual upgrade with no reason.
Persist the hold reason on the hive record, relay it in the heartbeat upgrade
policy, and render it in the spoke auto-update status and version menu.

Refs #11196

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: MikeSpreitzer <14296719+MikeSpreitzer@users.noreply.github.com>
…kes send node health (#12059)

The hub sends its recorded cluster_id in the heartbeat response to spokes that report none; the spoke adopts it only when hub.cluster_id is empty, persists it to hive.yaml, and attaches cluster_health from the next beat. Spokes report node_rbac (ok|forbidden) in cluster_health, and the hub replaces the generic push-reported note with an RBAC-missing message linking the runbook.

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
hivecommons-hive Bot and others added 14 commits October 15, 2026 21:29
… workload (#12215)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
* feat(dashboard): expose agent_sandbox scalar settings in Settings dialog

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>

* fix(dashboard): use settings-subsection classes for Advanced sandbox details to keep the style ratchet flat

Signed-off-by: scanner <scanner@hive.kubestellar.io>

---------

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
…iew.pending_ttl, review.max_redispatch) (#12217)

* 🐛 review: expire pending reviews with no verdict and re-dispatch (review.pending_ttl, review.max_redispatch)

A reviewer kick turn that dies (model timeout, proxy read timeout, pod
restart) posts no verdict, and the head's pending entries in
review-dispatch-state.json had no expiry, so pendingMissingPerspectives
saw every perspective as covered forever. #12045 and
#12025 sat for hours at review queue position 1 with CI green and the
contributor lane stuck at no-verdict.

PlanDispatch now expires pending entries older than review.pending_ttl
(default 45m) whose head still has no verdict and re-dispatches them,
logging 'review pending expired'. Expiries are counted per head in
state.redispatches; at review.max_redispatch (default 3) the planner
stops re-kicking and records a review-dispatch-exhausted requires_human
hold. Fresh entries and a verdict for the head are untouched; the same
expiry releases a dead revisit.

/api/review/queue items gain pending_since and redispatch_count and a
'review dispatched Xm ago, no verdict yet' reason.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* 🐛 review: allowlist review.pending_ttl / review.max_redispatch in settings parity (pending #11854)

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
* ✨ intent: add intent.shadow to record would_have_blocked

Signed-off-by: scanner <scanner@hive.kubestellar.io>

* fix(dashboard): drop inline style on intent.shadow toggle to keep the style ratchet flat

Signed-off-by: scanner <scanner@hive.kubestellar.io>

---------

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Expose runs.checkpoints, runs.wait_*, runs.triage scalars, runs.spektacular.recheck scalars and the runs.external Flue/OMP/vibe-kanban settings in Settings -> Features -> Experimental, and drop the 25 keys from the settings parity allow-list.

Refs #11854

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… skipped by design (#12218)

* 🐛 fix(automerge): do not block trusted-bot heads on required contexts skipped by design

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>

* test(automerge): assert not-app-authored for a human author in the skipped-by-design case

A human author is rejected by trySweepSelfAuthoredPR before the required-context walk, so the "author not a trusted bot" subtest never saw a required-check- reason. Exercise the lane guard with the App's own login instead, and assert the human author's not-app-authored verdict explicitly.

Signed-off-by: scanner <scanner@hive.kubestellar.io>

---------

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
… on PATH (#12222)

On v5 HEAD, the test (dashboard shuffle 1/2) shard fails when a runner pod has no node on PATH. TestRenderAgentsIncludesConfiguredDisabledCards calls exec.Command("node", ...) unguarded and t.Fatalf()s on a missing node. Every sibling node-driven dashboard test already degrades gracefully with t.Skip/t.Log when node is absent (acmm_waiver_ui_test.go, sidebar_version_panel_test.go, modal_escape_release_test.go, agent_cadence_legacy_test.go).

Guard the test with exec.LookPath("node") before executing node. When node is missing, log and skip only the node fixture block. The structural renderAgents snippet assertions still run and validate without node present.

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…missing perspectives (#12224)

An aggregate whose delivered perspectives all approve but which is short
of the perspectives the head is owed aggregated to requires_human with
"review perspectives did not unanimously approve". PlanDispatch then
parked the head on a human hold and never consulted the missing-
perspective path, so a reviewer kick that died after its peers reported
left the PR unable to self-merge (#12045 head 7e027fc).

Introduce the aggregate-only VerdictIncomplete with a reason naming the
missing perspectives. The planner treats it as under-asked: delivered
perspectives come off the pending list, only the undelivered ones expire
and re-dispatch, under the existing pending_ttl / max_redispatch budget.
Pipeline stage and review queue render it as still reviewing.

Fixes #12223

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…elay so hivectl hives use reloads it (#12226)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Danathar <6772335+Danathar@users.noreply.github.com>
…12170)

* 🐛 dashboard: Settings sticky section bar flush under search row, taller dialog, section rail

The Features tab's sticky section heading stuck ~20px below the search row
with rows scrolling through the gap: .config-body (the scroll container) had
padding-top, and Chromium measures a sticky child's top from the content
edge, so the heading's negative margin-top could not pull it up. The top
inset is now a ::before spacer that scrolls with the content, the heading has
no vertical margin and an opaque background.

The dialog fills the viewport minus the modal gutter (capped at 1200px) and
is wider to make room for a section rail left of the body. The rail is built
from the rendered .config-section > h3 headings by a MutationObserver, so it
tracks every tab, async panel fill-in and the search-results swap; clicking
scrolls #config-body, the section in view carries aria-current, and a
container query collapses it under 900px.

Fixes #12169

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* 🌱 dashboard: pin settings modal tests to the taller 1320px dialog

TestAppearanceThemeHoverCannotResizeSettingsModal and
TestTabbedModalShellsStayFixedSize11268 asserted the literal old box
(`width: 1200px`, `height: min(84vh, 760px)`). Their intent is that the
settings modal is a fixed, viewport-bounded, hover-independent flex
box - not that it is exactly 1200x760. This branch intentionally grows
the dialog to 1320px wide and
`min(calc(100vh - 2*gutter), var(--config-modal-max-h))` (1200px cap) to
fit the new left config rail, so the pinned literals are updated to the
new values. The hover-independence checks (contain: layout, pinned
font/spacing/radius tokens, display:flex/overflow:hidden, body
flex/min-height/overflow) are unchanged.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…ries (#12228)

* ✨ proxy: persist attempted vs blocked write counters with a weekly series

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>

* docs(openapi): document GET /api/evidence/write-counters

TestOpenAPISpecCoversEveryRegisteredRoute flagged the new route as
registered but undocumented.

Signed-off-by: scanner <scanner@hive.kubestellar.io>

---------

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
The Tagged Release 'decide' job on v5 rejects
changelog.d/fixed-v5-admin-mcp-doc-links.md because a fragment must start
with a '- ' entry bullet.

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…ed label, api-reference citations

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
@kubestellar-prow kubestellar-prow Bot added the dco-signoff: yes Indicates the PR's author has signed the DCO. label Oct 16, 2026
@kubestellar-prow

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign nicholasjackson for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@github-actions

Copy link
Copy Markdown
Contributor

Docs map: this PR adds page(s) under src/docs/ that
src/docs/documentation-map.md does not link:

  • ios-widget.md

A page missing from the map is one readers do not find. Please add a
line in the section a reader would actually look in, matching the
format of its neighbours.

If the page is indexed from a subdirectory README, or is deliberately
unlisted for now, ignore this. It is a reminder, not a gate; it never
blocks a merge.

@kubestellar-prow kubestellar-prow Bot added the size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. label Oct 16, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Open PR overlap check

Base branch: v6

Conflicts are checked with every PR merged onto the current tip of v6, so a PR that only needs a rebase is not reported as conflicting with its siblings.

PR Title Relation Files
#12060 🌱 dashboard: unique, section-specific sidebar nav icons (v6) same files src/pkg/dashboard/agent_activity_section_10935_test.go
src/pkg/dashboard/dashboard_section_cards_test.go
src/pkg/dashboard/pr_throughput_ui_test.go
src/pkg/dashboard/sidebar_nav_icons_test.go
src/pkg/dashboard/static/index.html

… x/sys entry, scale-envelope citation

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
@hivecommons-hive

Copy link
Copy Markdown
Contributor
8ef3edc

ℹ️ Sentinel notice — informational; author is trusted (owner), merge is not blocked

Hive flagged this PR (author @clubanderson, head 8ef3edcce8d7) because it matches behaviors that can override security controls, escalate privileges or damage the codebase. This is a heuristic, not an accusation — a maintainer should confirm the change is intended before it merges.

  • sensitive_path — changes 19 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • .github/workflows/v2-ci.yml
    • .github/workflows/v2-tests.yml
    • Justfile
    • bin/gh-wrapper.sh
    • src/Dockerfile
    • src/Dockerfile.contributor
    • src/deploy/data/wiki/getting-started.md
    • src/deploy/test_contribute_k8s_workload.sh
    • src/go.mod
    • src/pkg/policies/defaults/quality-advisory.md
    • src/pkg/policies/defaults/quality-full.md
    • src/pkg/policies/defaults/quality-holdgated.md
    • src/pkg/policies/defaults/quality-measured.md
    • src/pkg/policies/defaults/quality.md
    • src/policies/quality-advisory.md
    • src/policies/quality-full.md
    • src/policies/quality-holdgated.md
    • src/policies/quality-measured.md
    • src/policies/quality.md

Hive did not add the sentinel-alert label because this author is trusted. The finding remains recorded for audit and the dashboard Security tab; set sentinel.trusted_authors_block: true to require the blocking label for trusted authors too.

@hivecommons-hive
hivecommons-hive Bot merged commit d37d5e0 into v6 Oct 16, 2026
74 of 76 checks passed
@kubestellar-prow
kubestellar-prow Bot deleted the topup/v5-into-v6-2026-10-15 branch October 16, 2026 02:52
@hivecommons-hive

Copy link
Copy Markdown
Contributor
Evidence bundle `#122548ef3edc` sha256:1d9671d948d1a396e60e22efe5e394f653deb693d4f75f95e227b8f1d71b8ec1 — download from the dashboard or `hivectl review evidence #12254`.

@hivecommons-hive

Copy link
Copy Markdown
Contributor

merged by Hive trusted-author auto-merge: author @clubanderson holds role owner and GitHub permission admin on repo; CI green at 8ef3edc.

@github-actions

Copy link
Copy Markdown
Contributor

Thank you for your contribution! Your PR has been merged.

We'd love to hear how your experience was: share feedback

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dco-signoff: yes Indicates the PR's author has signed the DCO. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants