Skip to content

🌱 top-up: merge v5 into v6 (51 commits) - #13283

Merged
hivecommons-hive[bot] merged 53 commits into
v6from
topup/v5-into-v6-20261020
Oct 20, 2026
Merged

hivecommons-hive[bot] merged 53 commits into
v6from
topup/v5-into-v6-20261020

Conversation

@clubanderson

@clubanderson clubanderson commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Summary

Forward-merge of v5 into v6 as a --no-ff merge commit (51 commits, origin/v6..origin/v5). Successor to #13141.

Urgent payload: the runtime CA trust-bundle fix β€” #13230 (ae8939600, refresh CA bundle and distrust two roots) and its follow-up #13247 (7d1b5a3ae, CA-distrust check passes platform / ignores docker stderr) β€” so the :edge image built from v6 picks it up.

Notable v5 changes carried

Conflicts resolved (31 files)

File(s) Resolution
changelog.d/fixed-13087-*.md, fixed-13114-*.md v5 text
src/Dockerfile.hub union: v6 #10097 comment + v5 CA-distrust RUN block
bin/hive-open-issue.sh, src/docs/hive-open-issue.md union: v6 --step-kind/--release-tag/--release-target + v5 --blocked-on-pr; argv positions renumbered; bin/test_hive_open_issue.sh passes
src/cmd/hive/main.go Deps union (WebhookWake, EvalLoop); v5 logUndeliveredReviewKick added to v6 onFailed; v6 kick-dispatch-after-first-publish (#8659) kept, so #13182's relocation was not applied; v6 BuildFrontendStatus options kept
src/pkg/config/* v6 split layout kept; v5 changes ported by hand into review_config.go (ReviewModelSelection, PerspectiveModels), governor_config.go/dashboard_config.go/defaults.go (webhook-wake pacing)
src/pkg/dashboard/server.go, task_run_log.go, contribute_task_prompt.go, static/index.html, tests union (v5 EvalLoopStatus, governor badge, Release row, VerdictTargetBranch, taskBaseBranchForIssue + v6 JWKS/Runs nav/stdio block/readIssue)
src/pkg/dashboard/api_review_queue_superseded{,_test}.go v6 (inbox is v6-only)
src/pkg/github/client.go, merge_request_watcher.go, issue_request_watcher.go both gates: v6 review-hold refusal then v5 mergePolicyGate; v6 NeedsDecision-on-comment + v5 BlockedOnPR; duplicate helpers deduped
src/pkg/github/automerge/automerge_contributor_lane.go, automerge_stage_labels.go v6 approval lookup (#13089) kept; reviewGateStage union
src/pkg/review/dispatch.go union hunk (NewHuman + SkippedReviewModels), v6 bot-shaped-login fix-push gating (#13134)
src/pkg/stagelabels/human.go v6 DecisionComment/DecisionActions kept (see judgement calls)
docs (reviewer-queue, labels-and-control-signals, api-reference, maintainer-commands, review-queue-triage, scale-envelope, operator-reference, review-swarm) union where both lines added rows; v6 where v6 rewrote the section; citations refreshed

Judgement calls

Follow-up commit on the branch (CI drift, not merge errors)

4b3dc2b86 β€” both failures reproduce on v5's own docker.yml pushes today and post-date the carried commits:

Tests

go build ./... && go vet ./... clean. go test ./... β€” only local-environment failures (macOS tmux socket path length in pkg/agent, git retagger outside repo in pkg/releasesentinel, TestBinaryExec_Deadline in pkg/spektacular), none merge-related; CI is authoritative.

Coverage vs floors: cmd/hive 76.5 (42), agent β€” CI, dashboard 87.1 (84), github 89.8 (88), automerge 90.9 (88), hub 88.8 (87), proxy 90.5 (89), review 94.3 (80), stageengine 96.3 (90).

Gates: check-docs-citations.py 1390 verified / 0 drift; check-api-reference-citations.sh --fix 17 rewritten; check-docs-links.py clean; check-cli-model-lists.sh same warning as v6 baseline. No changelog fragment for the merge itself; no stage goldens or transition_table.go changed.

clubanderson and others added 30 commits October 20, 2026 11:13
#13133)

* πŸ› In-progress sweep and claim read fall back to the hub's claim ledger

A ledger claim whose hive:claim marker comment was suppressed by the
per-issue comment budget read as 'no claim' to SweepInProgressIssues and
annotateIssueClaims, which stripped stage/020-claimed and flipped the
issue back to 010-actionable while the scheduler still withheld it.

Fixes #13132

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

* πŸ“– Refresh scale-envelope citation after client.go field insertion

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

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…eholder questions (#13139)

* πŸ› 085 entry comment follows the decision cause; flag @maintainer placeholder questions

A PR parked at stage/085-needs-decision gets its entry comment once per
stage visit. When the maintainer clears the cause the comment named
(sentinel alert) and a different lane fence keeps the PR at 085
(workflow-path), the stage does not change and nothing tells them why the
PR is still parked. The stage store now remembers the cause digest of each
entry comment per stage+head and postHumanEntry re-posts for a cause this
visit has not explained; each distinct cause is posted once per head and
records from before the change count as explained.

Reviewer decision questions copied the policy example's literal
@maintainer, which GitHub notifies nobody for. The policy now asks for a
real approver login and the 085 comment marks a placeholder mention.

Fixes #13137

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

* changelog: fragment for #13139

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>
…3140)

* πŸ› Moves within 070/071/072 re-attribute the fix, not a regression

072 β†’ 070 on hive-signoff-attribution (the hive's own follow-up commit
broke the squash sign-off gate, so the hive takes the breakage back) and
072 β†’ 071 when the author kind is learned late were flagged regressed, with
a stage-regressed comment and tracker chip, because 070 < 072 numerically.
Nothing moved backwards for the author; IsRegression now treats the
fixing family as one state split by who owes the fix.

Fixes #13138

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

* changelog: fragment for #13140

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>
…sion reasons (#13152)

Backport of #13117 to v5, in the engine-native form that
landed on v6 with the v5β†’v6 top-up (#13141, ed14048): requiresHumanStage
gives the trusted-lane role check and contributor-lane admission reasons a
weak 085 opinion when the head's reviewer verdict is already
requires_human, resolveStage keeps that weak 085 whatever the tier, and
RouteHuman's fresh-head exit no longer applies when the verdict is
requires_human. A requires_human verdict on an untrusted contributor-lane
PR therefore derives stage/085-needs-decision instead of
050-review-pending + stalled.

Stage goldens regenerated with -update (44 cases, all
route=fresh/verdict=requires_human 050 β†’ 085). transition_table.go untouched.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…son login (#13150)

Backport of #13125 to v5. fixPushAllowed delegated to
hiveAuthored, so contributor-relay PRs (person login, `β€” hive:` trailer)
still got a hive-signed fix commit that the squash sign-off gate rejects as
bot-signoff. The push now requires an agent/App login author, or a PR the
stage reconciler adopted in place (stage/074-adopted-by-hive, the v5
exception the v6 top-up kept); the fix is proposed in the review otherwise.

(cherry picked from commit 31662b0)

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
* ✨ Sidebar x/y count pills for Overview and Governor

Overview shows open issues / open PRs from the stage tracker working set
(GET /api/stage-tracker items by kind); Governor shows the shared
actionableNow.issues / .prs split from /api/status, the same numbers the
Governor tiles print. Both reuse .badge-count .oc-nav-count and stay
hidden until their feed has answered once.

Closes #13147

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

* changelog: fragment for #13148

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>
…action (#13163)

Backport of #13092 (fixes #13087 on v6)
to v5.

`/hive approve` on a pull request was silently skipped by the un-park
sweep unless the PR sat at `stage/085-needs-decision`, and the 085 entry
comment never said what would actually release the hold. The sweep now
answers `/hive approve` on any open PR once per comment (marker-
deduplicated, no label writes) with what the merge lane will do with it,
and `stage/085-needs-decision` comments carry a "How to release it" list
supplied by the lane, naming manual-only merges explicitly.

Deviations from the v6 change: v5 has no review hold-release ledger
(#13088 is v6-only), so no lane consumes `/hive approve`
on a PR here. The reply therefore acknowledges the comment and names the
v5 release lever β€” a trusted merger's GitHub Approve review on the exact
head β€” instead of recording a release; the "no active hold" and
"predates the latest verdict" branches are not ported. Lane actions use
the same wording and the existing #13041 "What to do" block is kept.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
* πŸ› fix: lead superseded contributor PR threads with the close/keep-open decision

Backport of #13120 to v5 (additive rendering only).

- Review comments render the hive-decision-question as visible text at
  the top; the HTML marker is unchanged.
- A review marked <!-- hive-redundant-of: #N --> shows "no-op merge:
  duplicate of #N" instead of the numeric score headline.
- The supersession sweep notice states the recommendation (close as
  superseded) and the other choices.

(cherry picked from commit d0c869e)
Signed-off-by: Andrew Anderson <andy@clubanderson.com>

* πŸ› fix: offer superseded PR decisions without auto-close

Backport of #13118 to v5. Superseded contributor PRs now
appear in the Review Queue with close / keep-open actions even when
supersession_sweep.close_contributor_prs is unset.

The sweep emits a detected-contributor audit event on every detection
(and kept-open when hive/keep-open is present), including when its notice
is already present. The queue reader accepts detection and legacy grace
entries; existing auto-close guards and grace events remain intact.
An explicit keep-open label suppresses the recommendation, and disabled
auto-close shows no countdown and never promises an automatic close.

Deviation from v6: the your-turn inbox (dashboard ownership rules,
SupersessionStatusOption, superseded_recommended_close) is v6-only and is
not ported; only the Review Queue half lands here.

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

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: MikeSpreitzer <14296719+MikeSpreitzer@users.noreply.github.com>
…13160)

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: gregoryhunt <31053269+gregoryhunt@users.noreply.github.com>
…o pair (#13131)

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
…13171)

* πŸ› entrypoint: provision users and token caches for replicas: copies

A replicas: copy (<agent>-2 .. <agent>-N) is derived in memory by
ExpandAgentReplicas and stripped on save, so the entrypoint never saw its
name: no hive-<agent>-N user, no private token group, no pre-created token
cache. The manager ran it as a bare uid:node and the token write created
the cache dev:node 0600, so every gh call in the replica was blocked with
token_cache_unavailable, permanently.

Move the inline agent-name collection into hive_collect_agent_names and
expand replicas there with the same naming and 2..MaxAgentReplicas bound
as config.replicaAgentName, so replicas are provisioned at boot like
declared agents. Raising replicas on a running hive still needs a restart
for the new copies, the same as an agent added through the API.

Fixes #13166

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CoYvUkv8Gp4AHGWLo97nqb
Signed-off-by: Gregory Hunt <greg@on-board.ai>

* πŸ“ changelog fragment for #13166

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CoYvUkv8Gp4AHGWLo97nqb
Signed-off-by: Gregory Hunt <greg@on-board.ai>

---------

Signed-off-by: Gregory Hunt <greg@on-board.ai>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…vidence (#13172)

v5 backport of #13099. A stall that the harness nudge recovered is
self-recovery working (#12814) and is no longer counted toward the
fleet-report defect bar; only unrecovered stalls remain evidence.

(cherry picked from commit 9802648)

Closes #13157

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
The 'Make the default branch resolvable' step used --depth=0, which git rejects ('depth 0 is not a positive number'), and the failure was masked by '|| true', so the step was dead code and the check only worked because actions/checkout fetch-depth: 0 happened to populate the ref. Drop --depth=0 and || true and verify the ref so a fetch failure fails the step visibly.

(cherry picked from commit c35db2f)

Closes #13158

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…'t ping fork authors (#13143)

A review-backlog finding whose evidence file exists only on the reviewed
PR (absent on its base branch) is filed with the blocked label and a
<!-- hive:blocked-on pr=owner/repo#N --> marker, without help wanted. A
blocked issue lands in the filtered bucket, derives no stage label, and
IssueClaimBlockReason refuses every automated claim on it; a sweep after
each stage-label sync lifts the label once the tracked PR merges or
closes and strips help wanted while it is open.

hive-open-issue comment --blocked-on-pr <n> posts the same neutral note
through the issue-request watcher with @-mentions stripped, and the
scanner prompts point at it instead of @-mentioning the fork author.

The contributor lane keeps a session off an issue it just failed,
abandoned or had its lease revoked on for
governor.claims.reclaim_cooldown_s (default 6h) instead of handing it
back every ten minutes when the global failure cooldown lapses.

Fixes #13142
Part of #12999

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
GET /api/campaigns folds completed runs from the package-global
lifecycle timeline store (lifecycleStore singleton) into the list. Under
-shuffle a stage-completion journey for acme/repo!graph-a:node-a
recorded by an earlier test leaked in and the unfiltered list returned
3 campaigns instead of 2. Reset the singleton at the top of the test
like the other campaign/run tests already do.

Reproduced deterministically by replaying the CI shuffle seed
1792510983440914831 on dashboard slice 1/2 before; passes after.

Fixes #13167

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
bootDashboardWith launches backfillRecentMergedPRs in a goroutine that
logs through b.logger; the test read log.String() from an unsynchronised
strings.Builder while that goroutine was still writing, which -race
flags intermittently. Use the package's existing goroutine-safe
syncLogBuffer as the sink instead.

Reproduced 1/900 with -count=300 -race -cpu 1,2,4 before; 0/900 after,
plus -count=200 -race -shuffle=on clean.

Fixes #13168
Fixes #13169
Fixes #13170

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
The merge-request relay (hive-merge β†’ merge-request watcher β†’ MergePR as
the App) gated on agent authority, merge-eligible.json at a pinned head,
labels and positive CI, but never on the contributor-lane policy the
auto-merge sweep enforces. A scanner's merge request therefore landed an
untrusted-tier contributor PR (green at stage/060, never soaked) that the
lane would have refused on tier and soak alone.

- Split the contributor-lane sweep's evaluation out of its merge tail
  (evaluateContributorLanePR) and expose Engine.RelayMergeRefusal, which
  runs the same gates read-only: tier admission, association, diff fences,
  control labels, review verdict, CI with min_head_age, soak, human-merge
  paths and head-SHA pinning. App, trusted-bot and trusted-author-role
  authors keep today's relay behaviour.
- Add a MergeRequestPolicyGate hook on the GitHub client; the watcher
  consults it before any branch update, denies terminally (.denied) with
  the gate named in the agent's result, audits merge_request_refused, and
  fails closed on unreadable evidence through the bounded retry path.
  The hive installs the auto-merge engine's RelayMergeRefusal through the
  request-relay supervisor, so rebuilt clients re-arm it.
- classifyMergeEligibility no longer lists PRs parked on a human decision
  (stage/085-needs-decision, or the issue-side stage/045 spelling).

Signed-off-by: Andy Anderson <andy@clubanderson.com>
… in seconds (#13165)

* ✨ Webhook deliveries wake the eval loop and refresh the stage tracker

A verified GitHub webhook that invalidates cached PR/issue state now asks
the governor loop for an early, debounced eval cycle (governor.
webhook_wake_debounce_s / webhook_wake_min_gap_s) that re-enriches only the
dirty PRs, so eval_interval_webhook_s is a safe base tick and GitHub calls
go down. The loop re-checks webhook health as the 2x eval_interval_s window
closes and falls back to eval_interval_s at once, logging one line per
transition; /api/status reports evalMode, lastWakeReason, lastWakeAt.

Every status publish invalidates the /api/stage-tracker cache and sends a
stage-tracker SSE event the SPA refetches on. The spoke handles
pull_request_review_comment and the hub relays it plus issues.

Closes #13164

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

* 🌱 Fix webhook waker coalesced expectation in test

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

* 🌱 Only nudge the stage tracker over SSE once it has been served

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

* 🌱 Expose webhook wake pacing keys in the governor Settings UI

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

* πŸ“– Refresh api-reference citations after server.go line shift

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

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
The test pressed K three times and asserted exactly one POST left,
relying on the second press being processed before the first response
cleared kickPending. The fixture answers instantly, so when the test
goroutine is descheduled between presses (CI under -race load) the first
kickResultMsg lands first, kickPending is cleared and the second press
issues a second request.

Hold the /api/kick/scanner response with the fixture's existing gate()
until all three presses have been processed (same pattern as the ACMM
exactly-once test), then release it and assert the queued footer.

Fixes #13191

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Hive-Run: #13146

Hive-Plan: contributor-dispatch-target-branch

Hive-Spec: contributor-dispatch#wrong-base-verdict

Signed-off-by: hanthor <5840441+hanthor@users.noreply.github.com>
Co-authored-by: hanthor <5840441+hanthor@users.noreply.github.com>
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
…er fix kicks before governor kicks (#13188)

The merge-lane review gate skipped the trusted-human-approval lookup for
any changes-requested outcome, and classified the head from the
perspective map rather than the aggregate verdict, so a requires_human
head read as changes-requested:style to the gate and an owner's APPROVED
review on the exact head never cleared it. The gate now follows the
normalized aggregate verdict (new requires-human outcome) and a trusted
human's approval on the head overrides every non-approved outcome; the
review_evaluated audit line records human_approver and overrode.

Review-plan fix kicks (a maintainer's changes_requested review or
/hive decision) were assembled after the governor kick to the same
agent, so the governor kick owned the agent and the fix kick timed out
every cycle; fix kicks now go first, and an undelivered review/fix kick
is logged and audited by PR.

Signed-off-by: Andy Anderson <andy@clubanderson.com>
…est (#13198)

contains() piped the full generated YAML into grep -qF; grep exits on the
first match, printf then hits EPIPE, and set -o pipefail turns a genuine
match into 'FAIL: valid name kata-clh is emitted'. Compare with a bash
substring match instead, which reads the whole haystack.

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
The Evidence card's "Outcome by author kind" reported every PR this hive
reviewed but did not merge as "outcome unknown" (33 of 137 in a 24h
window on hive's own spoke), although the governor's review-outcome
ledger had already resolved 29 of them with a GetPRState call.

- pkg/evidence: new optional `outcome` block on the bundle (source,
  state, at, merged_by/merged_at/closed_at) with Validate + JSON schema
  rules; FoldPRs honours it (OutcomeKnown, MergedElsewhere, Closed) and
  ApplyOutcomeHints applies ledger rows at read time to PRs whose
  records state no outcome.
- pkg/github: Client.RecordReviewEvidenceOutcome stamps the newest
  bundle for a PR merged by someone else (with an `unrecorded` merge
  event naming the merger) or closed without merge, under
  reviewEvidenceMu; never touches a bundle that already states an
  outcome. No GitHub API calls.
- cmd/hive: recordReviewOutcomesAt calls it after ledger.Resolve.
- pkg/dashboard: summary adds merged_elsewhere per author kind and
  missing.prs_outcome_from_ledger; prs_outcome_unknown now means truly
  unresolved; the card footnote shows the merged-elsewhere / closed /
  open breakdown.

A separate `outcome` block is used instead of `backfill` because
Validate requires backfilled:true alongside `backfill` and readers treat
backfilled bundles as carrying no live verdicts or CI.

Fixes #13186

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

Runtime-error self-report issues now carry the reporting hive's display
name and dashboard URL: the Evidence table gains 'hive name' and 'spoke'
rows and each 'Affected hives (N)' line renders
'name (hive id) (instance …) β€” [open](url) β€” owner(s) …'.

The spoke emits both best-effort (project.name; dashboard.public_url else
hub.dashboard_url) only when hub-managed, so anonymous hives stay
anonymous. The hub relay overlays its authoritative project_name and
vanity URL and fills the rows for spokes that predate the fields, the
same enrichment pattern as owner(s). Rendering is byte-identical when
the fields are absent, so older reports and issues are unchanged.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Every Evidence panel now shows a server-computed letter grade (A+ … C-,
or β€” when there is not enough data) in the header and a one-sentence
plain-English summary under it. Rubrics and summary generators are pure
functions in pkg/evidence/grade.go, exposed additively as cards[key] on
/api/evidence/summary. Dense stats, denominators and "what this does not
show" move behind the β“˜ popover; the CI gate card's disclosed line drops
to the muted small size so nothing in a card exceeds the title size.

Fixes #13204

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…es across the fleet (#13210)

* πŸ› Release agent issue claims on relaunch and pace rate-limit relaunches across the fleet

An agent claim (2h TTL) survived the hive rollouts that killed the holding
agent: nothing released it, and the πŸ”’ marker on the forge read as live until
until= even when the ledger had dropped it, because issueclaim.Latest ignored
hive:release markers. The scanner's claim on an issue therefore parked it at
stage/020-claimed for two hours across two image rolls with nothing working it.

- agent.Manager gains a relaunch observer fired on every fresh CLI launch;
  cmd/hive wires it to Ledger.ReleaseAgentClaims, which drops only that
  agent's KindAgent claims and fires OnReleased.
- The release hook posts the release comment for the relaunch reason, and the
  release marker now carries at=; issueclaim.Latest marks the latest claim
  Released when a later release marker names its identity.
- Rate-limit relaunches of Copilot agents are spaced fleet-wide (30s) on top
  of the per-agent 300s cooldown, so the agents that tripped GitHub's limit
  during the boot stagger do not all re-validate together 300s later.

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

* πŸ› test: assert expiry posts nothing without a sleep (sleep ratchet)

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

---------

Signed-off-by: Andy Anderson <andy@clubanderson.com>
…ed stage transitions (#13136)

* πŸ› fix: register covering-PR-close and claim reshuffle edges as expected stage transitions

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>

* test: 045β†’020 is a non-regression hop, not an undrawn regression

Every backward issue edge among 010–040 is drawn now, and IsRegression never
flags a move out of 045, so the old 'undrawn regression' sample is expected.

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>

* πŸ“ docs: 040 falls are narrated on the PR, not commented on the issue

The three 040 β†’ 010/030/020 edges were labelled "(backward hop, commented)"
in both the stateDiagram and transition_table.go, but the issue reconciler
only comments regressions whose previous stage is before 040
(issue_stage_labels.go: a covering PR's own falls are narrated on the PR).
Relabel them "narrated on the PR" and widen the prose enumeration of drawn
issue fallbacks to include 030 β†’ 020 and the 040 falls.

Hive-Fix-Attempt: 1/6
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>

---------

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…re the hive opens the PR (#13209)

A hive-authored docs PR was opened as "πŸ“ docs: …" and failed the
repository's required PR Type check: the agent prompt and AGENTS.md said
πŸ“– for docs while review_priority.go read πŸ“ as docs too, so nothing told
the agent the two differ (πŸ“ is the proposal emoji).

Define the convention once (PRTitleEmoji* in pkg/github/pr_title.go),
make review_priority draw from it, spell the convention out in the
hive-open-pr instructions and AGENTS.md/CONTRIBUTING.md, and have the
pr-request watcher correct a leading emoji that contradicts the
Conventional Commits type before CreatePR. A title with no emoji is never
given one, so repositories that gate on a bare header are untouched.

Signed-off-by: Andy Anderson <andy@clubanderson.com>
…e author, not 070 (#13207)

A human's or clanker's PR whose commits GitHub links to the hive App (a
hive follow-up, or a contributor committing from a hive pod with the App's
noreply address) was routed to stage/070-fixing under
hive-signoff-attribution. No hive lane pushes to a non-App branch, so the
PR sat where nothing could act (pluk#315, promptargs#303, rationguard#303,
dibs#438, hivecommons.github.io#222 on 2026-10-20).

Route it by author kind (071 human / 072 clanker, 070 only when
self-authored) and tell the human author once per head exactly what to run
(git commit --amend --reset-author -s && git push --force-with-lease, or
the git rebase --exec form). The clanker's 072 nudge carries the same ask.

Also classify the trusted-author lane's review-gate holds
(no-review-bundle / awaiting-review-approval) as 050-review-pending: they
had no stage opinion, so a PR carried no stage label at all until the
swarm's verdict was noted.

Signed-off-by: Andy Anderson <andy@clubanderson.com>
Carries v5 through origin/v5 (incl. the runtime CA trust-bundle fix, #13230/#13247) into v6 as a --no-ff merge. Conflicts resolved preferring v5 for shared code and v6 where v6 intentionally diverged (config split, /hive approve-on-PR hold release, kick dispatch after first status publish).

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 20, 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 kellyaa 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

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

github-actions Bot commented Oct 20, 2026 •

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
#13261 πŸ› fix: keep standing meta issues off the Hive activity monitor CONFLICT src/docs/dashboard-sections.md
#13271 πŸ› fix(chat): link notifications to the public dashboard URL and report CLI failures as failed passes same files src/cmd/hive/main.go
#13278 πŸ› fix(dashboard chat): post inception questions, accept plain replies, and name the query field same files src/cmd/hive/main.go
src/docs/api-reference.md

@hivecommons-hive

Copy link
Copy Markdown
Contributor

@clubanderson is auto-promoted for contributor-lane merging on this PR: the last 5 merged PRs by this author in this repository have no revert or sentinel-alert evidence. CI, reviewer verdict, diff fences, soak, holds and branch protection still apply.

@hivecommons-hive hivecommons-hive Bot added author/human A person pushed this PR themselves dco All commits are DCO signed-off role/trusted Author is trusted for unattended merge (trusted-author role or registry/claim tier in require_tiers) stage/071-needs-author Human-authored PR: CI red, changes requested or conflicting; diagnosis posted, the author must act labels Oct 20, 2026
@hivecommons-hive

Copy link
Copy Markdown
Contributor

@clubanderson this PR is back in your court (stage/071-needs-author). Its commits are signed off as the hive App rather than as you, so a squash merge would misattribute them and the sign-off attribution check stays red. No hive agent can rewrite a contributor's commits β€” the fix is yours:

  • 15 commits are signed off as the hive App instead of you, so a squash merge would misattribute them β€” set git config user.email to your own address, then run git rebase --exec 'git commit --amend --no-edit --reset-author -s' HEAD~51 && git push --force-with-lease

Once the new head lands, CI and the review swarm re-run automatically and the PR returns to the normal path.

@hivecommons-hive

Copy link
Copy Markdown
Contributor
c296fde

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

Hive flagged this PR (author @clubanderson, head c296fdee104b) 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 28 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • .github/actions/docker-base-registry/action.yml
    • .github/workflows/cli-pin-bump.yml
    • .github/workflows/docker.yml
    • .github/workflows/v2-ci.yml
    • .oss-scanner/Dockerfile
    • src/Dockerfile
    • src/Dockerfile.contributor
    • src/Dockerfile.hub
    • src/deploy/ci-runners/Dockerfile
    • src/deploy/entrypoint.sh
    • src/deploy/test_contribute_k8s_workload.sh
    • src/deploy/test_entrypoint_replica_names.sh
    • src/deploy/test_entrypoint_uid_stable.sh
    • src/deploy/test_image_ca_distrust.sh
    • src/deploy/test_image_suid_inventory.sh
    • src/deploy/test_manifest_caps_runtime.sh
    • src/pkg/policies/defaults/reviewer-queue.md
    • src/pkg/policies/defaults/scanner-advisory.md
    • src/pkg/policies/defaults/scanner-full.md
    • src/pkg/policies/defaults/scanner-holdgated.md
    • src/pkg/policies/defaults/scanner-issues.md
    • src/pkg/policies/defaults/scanner.md
    • src/policies/reviewer-queue.md
    • src/policies/scanner-advisory.md
    • src/policies/scanner-full.md
    • src/policies/scanner-holdgated.md
    • src/policies/scanner-issues.md
    • src/policies/scanner.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.

…ots; bump runner gh to 2.102.1

Both breakages post-date the v5 commits this top-up carries and fail every
image build on v5 today too:

- Debian trixie 20250419+deb13u1 / Alpine ca-certificates-20261020-r0 /
  Ubuntu noble package refreshes already drop the emSign ECC Root CA - G3
  and Comodo AAA Services entries, so the unconditional `sed && grep -q`
  distrust step in src/Dockerfile, Dockerfile.contributor, Dockerfile.hub,
  .oss-scanner/Dockerfile and src/deploy/ci-runners/Dockerfile fails the
  build. Each entry is now rewritten only when present; the final tests
  still prove the roots are absent from the regenerated bundle. Applied
  from the in-flight v5 fix #13266 (scanner/fix-hub-ca-bundle)
  so the next top-up merges cleanly.
- cli.github.com's apt repo no longer serves gh 2.102.0 (only 2.102.1),
  so the CI runner image PR gate failed on `apt-get install gh=2.102.0`.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
@github-actions github-actions Bot added the conflicts-with-open-pr Open PR has a merge conflict with another open PR label Oct 20, 2026
@hivecommons-hive

Copy link
Copy Markdown
Contributor

@clubanderson this PR is back in your court (stage/071-needs-author). Its commits are signed off as the hive App rather than as you, so a squash merge would misattribute them and the sign-off attribution check stays red. No hive agent can rewrite a contributor's commits β€” the fix is yours:

  • 15 commits are signed off as the hive App instead of you, so a squash merge would misattribute them β€” set git config user.email to your own address, then run git rebase --exec 'git commit --amend --no-edit --reset-author -s' HEAD~52 && git push --force-with-lease

Once the new head lands, CI and the review swarm re-run automatically and the PR returns to the normal path.

@hivecommons-hive

Copy link
Copy Markdown
Contributor
4b3dc2b

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

Hive flagged this PR (author @clubanderson, head 4b3dc2b869d4) 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 28 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • .github/actions/docker-base-registry/action.yml
    • .github/workflows/cli-pin-bump.yml
    • .github/workflows/docker.yml
    • .github/workflows/v2-ci.yml
    • .oss-scanner/Dockerfile
    • src/Dockerfile
    • src/Dockerfile.contributor
    • src/Dockerfile.hub
    • src/deploy/ci-runners/Dockerfile
    • src/deploy/entrypoint.sh
    • src/deploy/test_contribute_k8s_workload.sh
    • src/deploy/test_entrypoint_replica_names.sh
    • src/deploy/test_entrypoint_uid_stable.sh
    • src/deploy/test_image_ca_distrust.sh
    • src/deploy/test_image_suid_inventory.sh
    • src/deploy/test_manifest_caps_runtime.sh
    • src/pkg/policies/defaults/reviewer-queue.md
    • src/pkg/policies/defaults/scanner-advisory.md
    • src/pkg/policies/defaults/scanner-full.md
    • src/pkg/policies/defaults/scanner-holdgated.md
    • src/pkg/policies/defaults/scanner-issues.md
    • src/pkg/policies/defaults/scanner.md
    • src/policies/reviewer-queue.md
    • src/policies/scanner-advisory.md
    • src/policies/scanner-full.md
    • src/policies/scanner-holdgated.md
    • src/policies/scanner-issues.md
    • src/policies/scanner.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 b68eaa3 into v6 Oct 20, 2026
75 of 78 checks passed
@kubestellar-prow
kubestellar-prow Bot deleted the topup/v5-into-v6-20261020 branch October 20, 2026 22:45
@hivecommons-hive

Copy link
Copy Markdown
Contributor
Evidence bundle `#132834b3dc2b` sha256:37d07cf3e29e5d1eb26ebde669d4ccd17c73537ee071710e48b199311daf0cd4 β€” download from the dashboard or `hivectl review evidence #13283`.

@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 4b3dc2b.

@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 the stage/071-needs-author Human-authored PR: CI red, changes requested or conflicting; diagnosis posted, the author must act label Oct 20, 2026
@clubanderson

Copy link
Copy Markdown
Member Author

/lgtm
/approve

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

Labels

author/human A person pushed this PR themselves conflicts-with-open-pr Open PR has a merge conflict with another open PR dco All commits are DCO signed-off dco-signoff: yes Indicates the PR's author has signed the DCO. role/trusted Author is trusted for unattended merge (trusted-author role or registry/claim tier in require_tiers) 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