Skip to content

🌱 top-up: forward-merge v5 into v6 (2026-10-16) - #12556

Merged
hivecommons-hive[bot] merged 85 commits into
v6from
topup-v5-into-v6-20261016
Oct 16, 2026
Merged

hivecommons-hive[bot] merged 85 commits into
v6from
topup-v5-into-v6-20261016

Conversation

@clubanderson

Copy link
Copy Markdown
Member

Summary

Forward-merge (git merge origin/v5 --no-ff -s recursive -X patience) of v5 into v6 — 82 v5 commits (merge base 00aaf865da), landed as a true merge commit plus two follow-up commits. History preserved so the next top-up merges cleanly. Same procedure as #12254.

v5 PRs merged

#12168 #12195 #12290 #12308 #12313 #12314 #12315 #12322 #12323 #12327 #12328 #12331 #12336 #12337 #12343 #12345 #12346 #12347 #12348 #12350 #12351 #12353 #12354 #12355 #12359 #12360 #12382 #12384 #12385 #12386 #12388 #12389 #12390 #12393 #12395 #12400 #12409 #12411 #12414 #12416 #12422 #12424 #12426 #12430 #12433 #12434 #12440 #12441 #12444 #12455 #12465 #12467 #12468 #12469 #12472 #12474 #12475 #12476 #12477 #12480 #12484 #12485 #12486 #12487 #12493 #12497 #12498 #12500 #12504 #12506 #12507 #12510 #12511 #12514 #12518 #12521 #12523 #12524

Highlights verified present after merge

Conflicts resolved (28 files)

File Resolution
.github/workflows/discord-syntax.yml deleted (removed on v6 by #12444)
bin/contributor-relay.js RELAY_CAPABILITIES union (quota_preflight_v1, standby_v1, run-stage, fix_pr_interrupt_v1) + v5 fix-pr constants
src/cmd/hive/main.go both ReviewVerdictHold (v6) and StageLabelPolicy/ContributorNudge (v5) wired
src/pkg/config/config.go v6 split-file layout kept; v5 changes ported into agent_config.go, review_config.go (Shadow), governor_config.go (stage labels, contributor nudge, fleet-report IncludeRepos), hub_config.go (contribute parallel-fixes/focus-window, already-done consts), dashboard_config.go (ValidateSnapshotURL), defaults.go (named Default* consts)
src/pkg/github/client.go Issue carries both ReporterConfirmationGate and ClaimKind
src/pkg/github/automerge/automerge_sweep.go v6 ordering (releaseHoldActive after commitGreen, greenFn queued path) + v5 headPushedAt helper
src/pkg/hub/quadrant_axes.go v5 (#12469 rewrite)
src/pkg/hub/server.go, saas_upgrade.go both UpgradeDrainUntil and SpokeReportedUpgrading
src/pkg/dashboard/api.go, api_nous.go, nous_research_question.go, deps.go v6 verdict/promotion/reset/artifact stores + v5 campaigns/progress/repo-targets; researchQuestionLocked wraps normalizeNousResearchQuestion
src/pkg/dashboard/bands.go v6 band defaults kept; issueStageCovered added to done test
src/pkg/dashboard/contribute_protocol.go, contribute_ws.go union (stagelabels + standby; WSTask has MCP + Priority/Mode/FixPRs)
src/pkg/dashboard/import_count_test.go, js_decl_window_test.go import cap 60; v5 decl window
src/pkg/dashboard/static/index.html 11 hunks: v5 FAQ groups + v6 runs-section summary; v5 nous progress/campaign/nousResearchQuestionText/setRq (v6 renderNousResearchQuestion clamp removed); v6 REPO_ISSUE_BAND_DEFAULTS; v5 repo pills; self-upgrade handler ported status === 'current' into v6 promise chain
src/internal/testutil/dashboard_import_allowlist.txt, settings_parity_allowlist.txt 3-way union
src/docs/{dashboard,documentation-map,operator-reference,review-swarm,running-at-level-6,scale-envelope,strategy-lab,api-reference}.md union; v5 Strategy Lab content ported into experiment-lab.md (v6 naming); api-reference.md tables merged by (method,path) preferring v6 rows; check-api-reference-citations.sh --fix (102 citations)
webstatic/style_ratchet_test.go v6 baselines, lowered to post-merge counts

Follow-up commits: v6 static_index_test Experiment Lab header assertions follow #12498; dead selectNousOutputMode removed; PUT /api/nous/config/goals persists panel snapshot (#11694); claimswire_label_replay_test uses claims.LabelClaimed (#12468); fleet-health.md/fleet-report.md time-series links → experiment-lab.md.

Verification

cd src && gofmt -l . && go build ./... && go vet ./... && go test ./... -count=1
bash src/scripts/check-api-reference-citations.sh --fix
python3 src/scripts/check-docs-citations.py src/docs   # 1327 verified
python3 src/scripts/check-docs-links.py src/docs       # all resolve
bash src/scripts/check-release-lines.sh                # PASS
go test -short -cover <every Go package in the merge diff>  # 83 packages

Coverage vs PKG_THRESHOLD (all 83 changed packages ≥ floor): dashboard 86.9 (≥84), webstatic 92.9 (≥88), github 90.0 (≥88), automerge 90.2 (≥88), hub 88.7 (≥87), agent 89.1 (≥88), config 90.3, tui 93.9 / tui/panes 91.0 / tui/client 94.1 (≥90), evidence 96.4, stagelabels 95.8, claims 94.0, nous 94.3, review 95.5 (≥80), scheduler 93.8, spektacular 91.2, cmd/hive 75.7 (≥42). TestStyleRatchet, TestSleepRatchet, TestSettingsDialogReferencesEveryHiveYAMLLeaf, TestEvidenceModalNoIssueNumbers, TestRelayProtocolVersionMatchesHub, import-count test pass.

Local-only failures (identical on pristine origin/v6, macOS tmux/git env): TestPollTmuxOutputForAgent_WiresThrashBreaker, TestApplySessionEnv_*, TestBinaryExec_Deadline, TestGitRetagger_*; contributor-relay.test.js 80 env failures on both base and merge.

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

actions-user and others added 30 commits October 16, 2026 08:27
Automated release commit. Compiles changelog.d/ fragments and moves
the CHANGELOG.md Unreleased section into a dated v5.177.5 entry.
See src/docs/releases.md.

Signed-off-by: hive-release-bot <actions@github.com>
…ross the page (#12308)

The *UIHasNoUndefinedCallees tests build one regexp per callee that starts
with an alternation or a (?m)^\s* anchor, so Go's matcher has no literal
prefix and walks the whole 3 MB index.html once per name. Under -race that
is ~4 s per name: TestUpstreamWatchUIHasNoUndefinedCallees alone took 54 s
and the family ~105 s of the rest 1/5 shard's 10-minute pkg/dashboard
budget.

jsDeclaredNear runs the unchanged regexp only over a line-aligned window
around each literal occurrence of the name. Every alternative in these
regexps contains the name, so the verdict is identical (71 name/pattern
pairs checked against both pages, 0 mismatches) and the four tests drop
from ~11 s to ~0.4 s without -race.

Signed-off-by: quality <quality@hive.kubestellar.io>
Co-authored-by: quality <quality@hive.kubestellar.io>
…parity batch 8) (#12313)

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>
…id-rollout (#12168)

* 🐛 fix(hub): do not advance a stale upgrade while the spoke is still mid-rollout

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

* docs: resync api-reference citations after hub/server.go struct change

Merges v5 (which already resolved the pre-existing pkg/dashboard/api.go
citation drift) and re-runs check-api-reference-citations.sh --fix so the
26 pkg/hub/server.go route citations shifted by the RegistryEntry field
addition resolve again.

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

---------

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

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>
…×model) (#12315)

* dashboard: Evidence sub-panel in Throughput (calibration, accuracy x model) (#12064)

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>

* dashboard: tokenize evidence legend/svg styling for the style ratchet

TestStyleRatchet counts non-var() font-size and border-radius values;
the Evidence sub-panel added one raw 9px font-size and four raw
border-radius values. Use --fs-2xs for the SVG labels and make square
swatches the default so only the round calibration swatch (.dot) needs
a radius token.

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>
Signed-off-by: operations <operations@hive.kubestellar.io>
Co-authored-by: operations <operations@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Automated release commit. Compiles changelog.d/ fragments and moves
the CHANGELOG.md Unreleased section into a dated v5.178.0 entry.
See src/docs/releases.md.

Signed-off-by: hive-release-bot <actions@github.com>
… 9) (#12327)

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>
#12331)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
…gate (#12337)

* ✨ review: add review.shadow to record would_have_held for the review gate

Hive-Run: #12104
Hive-Plan: RFC #12062 / #12068 shadow-mode gates
Hive-Spec: review-shadow#would-have-held

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
(cherry picked from commit a187caa)
Signed-off-by: Andy Anderson <clubanderson@users.noreply.github.com>

* 🧪 review: reference review.shadow for settings parity and test the shadow write path

Adds a review.shadow reference in the review config handler so the
Settings parity test sees the new toggle, and a round-trip test for
recordReviewShadow through MergeReviewEvidenceShadow.

Hive-Fix-Attempt: 1/6

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

* 🧹 review: share the shadow evidence writer and tighten review.shadow logging

Review follow-ups for #12158 (review.shadow, #12104):

- Branch the review-verdicts.json load warning on require_approval so a
  shadow-only run no longer claims merge eligibility will fail closed.
- Extract writeShadowEvidence, shared by intent.shadow and review.shadow,
  so the two recorders cannot drift again; recordReviewShadow now gets
  the logger==nil fallback and logs confidence like the intent gate.
- When a signing key is configured but unusable, skip the shadow write
  and Warn instead of rewriting a signed bundle as unsigned.
- Record both shadow observations from one eligible block with a shared
  evaluated_at.
- Move the review shadow code to review_shadow.go beside its test, and
  add the dashboard PUT/GET + Settings toggle parity coverage for
  review.shadow.

Hive-Fix-Attempt: 2/6

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

* 📝 review: document review.shadow in openapi.json and the intent.shadow signing-key change

Add review.shadow to the /api/config/review GET response and PUT request
schemas in dashboard/openapi.json so the spec matches what
handleReviewConfigGet/Put emit and accept. Add a changed- changelog fragment
for writeIntentShadow now skipping (Warn) instead of writing unsigned when a
configured signing key fails to load.

Hive-Fix-Attempt: 3/6
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io>
Signed-off-by: Andy Anderson <clubanderson@users.noreply.github.com>

* 🧪 review: make the unusable-signing-key test use a malformed key and drop the toggle's inline style

- TestRecordReviewShadowSigningKeyUnusable pointed SigningKeyFile at a
  missing file, which LoadSigningKey treats as "no key" (records unsigned
  by design). Write a malformed key so the test exercises the guard that
  skips the write with a Warn.
- The new Settings toggle added an inline style="margin-top:10px", pushing
  operator index.html over the style-ratchet baseline; .config-toggle
  already spaces stacked toggles via margin-bottom, so drop it.
- Document the signing-key caveat in review-swarm.md / intent-verification.md
  and list review.shadow in hive.yaml.example (swarm docs-currency notes).

Signed-off-by: Andy Anderson <clubanderson@users.noreply.github.com>

---------

Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
Signed-off-by: Andy Anderson <clubanderson@users.noreply.github.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Andy Anderson <clubanderson@users.noreply.github.com>
…g a live turn (#12336)

The governor re-kicks an agent whose previous turn is still streaming; each
attempt waits out the prompt timeout and is counted undeliverable, and three
inside one long review turn filed #12268 — an issue that
cleared itself when the turn ended. Gate the self-report on the agent's
transcript having been silent for busy_no_activity_threshold, the same bar
busyCondition applies, and carry the silence in the report message.

Fixes #12268

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
* 🐛 automerge: skip trusted-author tier for trusted bots

Hive-Run: #12189

Hive-Plan: issue-12189

Hive-Spec: #12189
Signed-off-by: Karibhou <157208370+Karibhou@users.noreply.github.com>

* 🐛 automerge: hand trusted bots to the self-authored lane only while it runs

Replace the prefilter sentinel with an explicit
AutoMergeSweepOptions.SelfAuthoredLaneActive flag. When the self-authored
sweep is running, the trusted-author tier logs reason=trusted-bot-lane and
counts the PR as Skipped so Seen stays consistent; when ACMM gates that
lane off, trusted bots are evaluated by role as before so a bot granted
RequireRole can still merge. prefilterTrustedAuthorPR returns genuine
skip reasons only, so the refetch path needs no sentinel knowledge.

Hive-Fix-Attempt: 1/6

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

* 🐛 automerge: wire TrustedBotAuthors into the run-loop sweep

runAutoMergeSweepIfDue passed SelfAuthoredLaneActive but never set
Options.TrustedBotAuthors, so sweepLaneForAuthor could not recognise
allow-listed bots on that path and the trusted-author tier still logged
untrusted-author-role for them every main-loop tick. Set the hook inside
the cfg != nil block, add a wiring test, and move the stranded isHeld doc
comment back onto its function.

Hive-Fix-Attempt: 2/6
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io>

---------

Signed-off-by: Karibhou <157208370+Karibhou@users.noreply.github.com>
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>
* 🔒 fix(hub): keep spoke compliance summary owner/admin-only

Compliance profile and posture check results are admin-gated on the hub
rollup endpoint (/api/hub/compliance) and must not be exposed to
unauthenticated callers on /api/registry or non-owner members on
/api/saas/my-hives.

Strip RegistryEntry.Compliance in handleRegistry for public registry
responses and in buildMyHivesResponse for users who are not owners or
admins. The stored registry entry and disk persistence remain intact.

Fixes #12264

Hive-Run: #12264
Hive-Plan: compliance-exposure-fix
Hive-Spec: compliance-exposure#strip-non-admin
Signed-off-by: repires <repires@users.noreply.github.com>

* 🔒 fix(hub): fold compliance scrub into my-hives row loop, document visibility

Review follow-ups for #12290:
- Move the Compliance=nil strip in buildMyHivesResponse into the existing
  per-row gating loop beside the Leaderboard scrub; nothing downstream reads
  Compliance, so a second pass after attachQuadrants was redundant.
- fleet-health.md: state that the Compliance column is owner/admin-only and
  omitted from /api/registry and other members' /api/saas/my-hives rows.

Hive-Fix-Attempt: 1/6
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io>

* docs(fleet-health): drop description of nonexistent hub Compliance column

The hub UI has no Compliance column; keep only the API visibility note.

Hive-Fix-Attempt: 2/6

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

---------

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

* feat(hub): quadrant card drill-down into owner-only evidence view

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

* fix(hub): class-driven evidence modal, fallback link, criteria-table disclosure

Review follow-ups for #12322:

- Move the #evidence-modal inline styles into .evidence-modal* classes
  (overlay uses var(--overlay-scrim)) and tokenise the .evidence-note /
  .evidence-msg font sizes and .evidence-table padding, so the hub static
  pages stay at the TestStyleRatchet baselines (945 style= / 448 colours /
  426 font-size / 164 padding).
- When no quadrant axis is scored the card is not drawn, which left admins
  with no path into the evidence view; render an admin-only one-line
  fallback link in its place (members still get nothing).
- Disclose in-panel, in the changelog fragment and in the api-reference row
  that the per-axis criteria table from #12117 is not emitted by
  /api/hub/evidence yet and is tracked under #12080.

Hive-Fix-Attempt: 1/6
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io>
Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* fix(hub): keep fleet quadrant header self-suppressing when nothing scored

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* 🧪 hub: mount the evidence fallback link through fleetQuadrantFallbackHTML and test the pair

The previous fix kept fleetQuadrantHeaderHTML self-suppressing (as
TestFleetQuadrantHeaderWiring pins) by inlining the fallback ternary at
the mount site, but left TestFleetQuadrantFallbackLinkWhenNothingScored
calling the header alone. Name the rule (fallback appears exactly when
the header suppresses itself), mount it beside the header, and render the
pair in the test the way the hives container does.

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

---------

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Andrew Anderson <andy@clubanderson.com>
…rted issues (#12343)

A [selfreport] issue named the hive but not the repositories or owners it
serves, so a maintainer could not tell whether a fleet issue was confined to
one project or org. The evidence table gains repos / owners (the hive's
project.repos and their distinct owners) and repo / ref for item-scoped
classes (advisory_post_failed records the digest's repo via ObserveItem).
The hive:selfreport-affected block carries Affected repos (N) and Affected
owners (N) as a union across joining hives, re-derived idempotently; the
fingerprint is untouched so dedupe is unchanged. governor.fleet_report
.include_repos (default true, Settings toggle) turns the attribution off
for hives whose watched repos are private.

Closes #12338

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…UTOR in the contributor lane (#12345)

The contributor lane rejected NONE/FIRST_TIMER/FIRST_TIME_CONTRIBUTOR
authors in its list-time prefilter, before the claim-marker and
registry-tier admission paths ran, so relay contributors' green,
reviewer-approved PRs skipped every cycle with
contributor-lane:author-association (#12195, #12290 on hive's hive).

Check the association only after admitContributor and only when
neither a verified App-authored hive:claim marker nor an operator-set
registry tier vouches for the author; in that case author-association
outranks the marker path's reason. An unmarked, unregistered
first-timer is still never admitted.

Fixes #12344

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…s PR live, no needs-human re-apply (#12350)

trySweepSupersededPR iterated every claim from claimsFromPR, including
the weak bare-reference tier, so a PR whose Fixes target was open but
whose Part-of parent had been closed by another merged PR was escalated
to needs-human as "also claims another issue that is still open"
(#12322: Fixes #12117, Part of #12080 closed by #12242). And the label
add ran unconditionally once the notice existed, so clearing the label
was undone on the next cycle.

- supersessionCandidateClaims: closing-keyword claims drive the sweep
  when any exist; bare references are context. With none, the
  branch-name heuristic and references stand in as before.
- Any open candidate issue means the PR is live: no notice, no label,
  no close.
- ensureSupersessionComment reports whether the notice changed; an
  identical notice already on the PR does nothing this cycle, so a
  cleared needs-human sticks until the closer or reason changes.

Fixes #12349

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
…held vs outcome) (#12348)

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>
shouldHoldAgentPR now holds an outreach PR only when its target repo is
not one the hive manages for the outreach agent (config.AgentOwnsRepo).
Same-repo outreach PRs follow the ordinary ACMM level gate and auto-merge
on green CI at L6; cross-repo outreach stays held at every level. The
hold callback carries the PR's target repo; the outreach prompt,
level-hold notice and operator docs describe the new rule.

Operator decision by @clubanderson, 2026-10-16.

Closes #12352

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: Andy Anderson <andy@clubanderson.com>
…b.snapshot_url (#12347)

* 🐛 dashboard: partial PUT /api/config/governor/hub no longer clears hub.snapshot_url

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

* changelog: fragment for #12347

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: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com>

* changelog: fix fragment bullet and drop duplicate for #12330

Prefix the descriptive fragment with the required '- ' bullet so
changelog-fragment-guard passes, and remove the autofix stub
fixed-12347.md so the fix compiles into one Unreleased entry.

Hive-Fix-Attempt: 1/6

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

---------

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Signed-off-by: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…t the relay (#12359)

good_first_issue.enabled becomes a *bool that defaults on (enabled: false
opts out); the sweep runs every 15m and advertises issues from 1h old so it
can beat a scanner that claims within minutes. The scorer normalises titles
before the epic/RFC/meta check, rejects security-titled issues, and excludes
roadmap/meta-tracker items and the hive's own advisory/selfreport/sentinel/
fleet reports. The labelled set is refreshed from every enumeration so a hive
agent claiming a hand-labelled issue releases it at once.

Closes #12358

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

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Adds the Outcome by author kind evPanel card to the Throughput Evidence
sub-panel, drawn from outcomes_by_author_kind in GET /api/evidence/summary:
grouped merged / closed / reverted-14d bars per human · agent · bot with
n= and a what-this-does-not-show note. Reporting only; nothing reads or
alters merge eligibility.

Closes #12364

Signed-off-by: Andy Anderson <andy@clubanderson.com>
…ot likely-done (#12384)

A merged `Refs #N` / `Part of #N` PR made SyncIssuePRClaimLabels and
annotateIssueWithClaim apply hive/likely-done, although Settled() and
close-on-merge both treat a reference claim as weak and #11931 requires a
closing keyword for likely-done. #12316 landed in the
dashboard's Confirm & close band this way while half its work (#12318)
was still an open PR.

Apply hive/partially-addressed for a merged reference claim, drop a stale
likely-done, and stop re-POSTing an already-carried likely-done every tick.

Closes #12383

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
* ✨ nous: clarify passive baseline snapshots in Strategy Lab

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

* 🐛 fix(dashboard): use styled classes and shared timezone helper for snapshot copy

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>
hivecommons-hive Bot and others added 10 commits October 16, 2026 19:32
…12500)

* fix(automerge): derive head age from head SHA, not PR updated_at

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(automerge): isolate head-age tracker state between sweep tests

Add Options.HeadFirstSeen (mirroring ContributorSoak) so engines can use a
private tracker; the shared default is unchanged. The sweep test client
helper now installs a fresh tracker per engine.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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>
…als (#12523)

Signed-off-by: scanner <scanner@hive.kubestellar.io>
Co-authored-by: scanner <scanner@hive.kubestellar.io>
…arget pills (#12521)

The Repo Targets pills toggled .active and aria-pressed, but the only
CSS for .active set --pill-c, which the ADR-0018 chip-taxonomy rule for
.nous-config-pill never reads. Both states therefore rendered as the
same amber outline and operators could not tell which repos Nous would
target until after saving.

Pills are now native <button type="button"> elements carrying
.is-on/.is-off plus aria-pressed; selected renders as a filled amber
chip with a leading ✓, excluded as a dimmed outline. Titles say
"Click to exclude"/"Click to include" and the counter updates on
every toggle. .active is kept in sync as the hook saveNousConfig reads.

Closes #12520

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
… dependencies close (#12524)

* 🐛 hard-suppress: lift hive-applied blocked when native blockers close

ReconcileHiveHardSuppress lifted a hive-applied `blocked` only when a PR
cross-referencing the parked issue merged. A child parked on a native
GitHub "blocked by" dependency is unblocked by the blocker's own PR, which
never mentions the child, so the label stayed forever (#12450/#12451 on
#12447/#12448). For `blocked`, also treat the reason as lapsed when the
issue has at least one native blocker and none remains open; the note
names the closed blockers. Human-applied labels and `hold` are unchanged.

Closes #12522

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

* changelog: fragment for #12524

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: 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>
…me questions (#12422)

Add documentation covering the background-only experiment mode for Hive
itself under Nous, answering outcome questions (quality, security, review
accuracy, auto-merge latency, outreach, per-agent effectiveness, and
user satisfaction), cohorts/flags, guardrails and fast-fail auto-revert,
and clarifying the user/background boundary where spoke dashboards and
the Experiment Lab exclusively display repository experiments.

Hive-Run: #12398
Hive-Plan: issue #12398
Hive-Spec: issue-12398#docs

Signed-off-by: repires <repires@users.noreply.github.com>
Co-authored-by: repires <repires@users.noreply.github.com>
…constants (#12430)

Deduplicate the label colour and description literals for
hive/partially-addressed and hive/likely-done across ensure sites in
close_on_merge.go, prclaims.go, and contribute_verdict_settle.go by
defining PartiallyAddressedLabelColor, PartiallyAddressedLabelDescription,
LikelyDoneLabelColor, and LikelyDoneLabelDescription constants in
prclaims.go, and registering both labels in escalationIssueLabelDefinitions.

Closes #12399

Hive-Run: #12399
Hive-Plan: label-spec-dedup
Hive-Spec: labels#partially-addressed

Signed-off-by: repires <repires@users.noreply.github.com>
Co-authored-by: repires <repires@users.noreply.github.com>
…periment (#12510)

Changing the Experiment Lab research question used to leave the baseline
untouched, so a brand-new question showed 2688 / 672 "Baseline sufficient".
Snapshots are question-independent observations of the hive, but the
baseline an experiment is judged against must not include interventions
from a previous campaign, and hypotheses/results are question-specific.

- pkg/nous: campaign store (campaigns.json) with Ensure/Start/SetQuestion,
  archived campaigns and QuestionChanged; existing data becomes campaign 1.
- pkg/hivestate: Count(dir, since) for windowed snapshot counts.
- dashboard: campaign/observation blocks in /api/nous/status, baseline_pct
  and experiment rows scoped to the active campaign, PUT config/goals
  rotates the campaign on a changed question, POST /api/nous/campaign/start.
- UI: tile and Data Collection bar read from the active campaign, muted
  "Observation history" line, Previous experiments card, confirm step and
  Start a new experiment button in the config dialog.
- docs, OpenAPI, api-reference, changelog fragment, import ratchet +1.

Closes #12501

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

# Conflicts:
#	.github/workflows/discord-syntax.yml
#	bin/contributor-relay.js
#	src/cmd/hive/main.go
#	src/docs/api-reference.md
#	src/docs/dashboard.md
#	src/docs/documentation-map.md
#	src/docs/operator-reference.md
#	src/docs/review-swarm.md
#	src/docs/running-at-level-6.md
#	src/docs/scale-envelope.md
#	src/docs/strategy-lab.md
#	src/internal/testutil/dashboard_import_allowlist.txt
#	src/pkg/config/config.go
#	src/pkg/dashboard/api.go
#	src/pkg/dashboard/api_nous.go
#	src/pkg/dashboard/bands.go
#	src/pkg/dashboard/contribute_protocol.go
#	src/pkg/dashboard/contribute_ws.go
#	src/pkg/dashboard/deps.go
#	src/pkg/dashboard/import_count_test.go
#	src/pkg/dashboard/js_decl_window_test.go
#	src/pkg/dashboard/static/index.html
#	src/pkg/dashboard/webstatic/style_ratchet_test.go
#	src/pkg/github/automerge/automerge_sweep.go
#	src/pkg/github/client.go
#	src/pkg/hub/quadrant_axes.go
#	src/pkg/hub/saas_upgrade.go
#	src/pkg/hub/server.go
…ratchet

- static_index_test: Experiment Lab header assertions follow the #12498
  wrap/strip implementation (nousResearchQuestionText/setRq) instead of the
  retired renderNousResearchQuestion clamp
- remove dead selectNousOutputMode left over from v5 (v6 dropped output modes in #11699)
- nous_campaign: PUT /api/nous/config/goals persists the panel snapshot (#11694)
- claimswire_label_replay_test: use claims.LabelClaimed (stage/020-claimed, #12468)
- style ratchet baselines lowered to post-merge counts

Signed-off-by: Andy Anderson <andy@clubanderson.com>
Signed-off-by: Andy 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 hanthor 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:

  • backend-auth-recovery-runbook.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

Changelog fragment in the wrong directory

Fragments live in changelog.d/ at the repository root, not under src/. Files under src/changelog.d/ are never compiled into CHANGELOG.md, so the changelog-fragment-guard check fails. Move them and push:

git mv src/changelog.d/added-nous-experiment-progress.md changelog.d/added-nous-experiment-progress.md
git mv src/changelog.d/changed-hub-hero-headlines.md changelog.d/changed-hub-hero-headlines.md
git mv src/changelog.d/fixed-hub-restart-storm-badge-zero.md changelog.d/fixed-hub-restart-storm-badge-zero.md
git mv src/changelog.d/fixed-hub-upgrade-group-behind.md changelog.d/fixed-hub-upgrade-group-behind.md
git mv src/changelog.d/fixed-nous-repo-targets-empty.md changelog.d/fixed-nous-repo-targets-empty.md
git mv src/changelog.d/fixed-token-restart-window-12466.md changelog.d/fixed-token-restart-window-12466.md
git commit -s -m "changelog: move fragment to repo-root changelog.d/"

See changelog.d/README.md (#5675, #11919). This comment is removed automatically once nothing is misplaced.

@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
#12489 ✨ feat(github): record typed release owner-step proposals same files src/docs/hive-open-issue.md
src/pkg/github/issue_request_watcher.go

@hivecommons-hive hivecommons-hive Bot added author/trusted Author is trusted for unattended merge (trusted-author role or registry/claim tier in require_tiers) stage/050-review-pending Review swarm requested; awaiting a verdict for the current head labels Oct 16, 2026
@hivecommons-hive

Copy link
Copy Markdown
Contributor
d945c72

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

Hive flagged this PR (author @clubanderson, head d945c72f391a) 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 41 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • .github/workflows/backend-smoke.yml
    • .github/workflows/changelog-fragment-guard.yml
    • .github/workflows/changelog-reminder.yml
    • .github/workflows/ci-runner-image.yml
    • .github/workflows/close-linked-issues.yml
    • .github/workflows/coverage-hourly.yml
    • .github/workflows/dashboard-lint.yml
    • .github/workflows/dco-post-merge.yml
    • .github/workflows/dco-push-delta.yml
    • .github/workflows/dco-squash-attribution.yml
    • .github/workflows/docker.yml
    • .github/workflows/docs-index-reminder.yml
    • .github/workflows/docs-link-check.yml
    • .github/workflows/flue-smoke.yml
    • .github/workflows/fossa.yml
    • .github/workflows/gh-aw-compile.yml
    • .github/workflows/go-security-analysis.yml
    • .github/workflows/hive-of-the-week.yml
    • .github/workflows/image-attestation-guard.yml
    • .github/workflows/notice-autofix.yml
    • .github/workflows/omp-smoke.yml
    • .github/workflows/podman-contract.yml
    • .github/workflows/pr-auto-update-test.yml
    • .github/workflows/pr-auto-update.yml
    • .github/workflows/pr-overlap.yml
    • .github/workflows/pr-verifier.yml
    • .github/workflows/prune-ghcr-hivecommons.yml
    • .github/workflows/prune-ghcr.yml
    • .github/workflows/release-line-guard.yml
    • .github/workflows/suid-contract.yml
    • .github/workflows/tagged-release.yml
    • .github/workflows/testutil-guard.yml
    • .github/workflows/v2-ci.yml
    • .github/workflows/v2-tests.yml
    • .github/workflows/v4-freeze-gate.yml
    • .github/workflows/v5-topup.yml
    • .github/workflows/v6-topup.yml
    • .github/workflows/wavefront-smoke.yml
    • src/pkg/policies/defaults/outreach-full.md
    • src/pkg/policies/outreach_claims_test.go
    • src/policies/outreach-full.md
  • ci_gate_weakening — CI configuration is deleted, softened or has gate checks removed (Disables or softens CI gates (continue-on-error, || true, removed checks))
    • .github/workflows/v2-tests.yml
  • remote_code_execution — adds a remote-fetch-and-execute, decoded payload, reverse shell or embedded credential (Adds curl|sh, eval of encoded payloads, reverse shells or embedded private keys)
    • src/pkg/fleetreport/runtime_test.go

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 a50d8d1 into v6 Oct 16, 2026
85 of 88 checks passed
@kubestellar-prow
kubestellar-prow Bot deleted the topup-v5-into-v6-20261016 branch October 16, 2026 21:16
@hivecommons-hive

Copy link
Copy Markdown
Contributor
Evidence bundle `#12556d945c72` sha256:a087412de4d1bac2051ce43b3eabc78a1609156428ee3ee0b1f7e0e313c59a4f — download from the dashboard or `hivectl review evidence #12556`.

@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 d945c72.

@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

@hivecommons-hive hivecommons-hive Bot removed author/trusted Author is trusted for unattended merge (trusted-author role or registry/claim tier in require_tiers) stage/050-review-pending Review swarm requested; awaiting a verdict for the current head labels Oct 16, 2026
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.

4 participants