Skip to content

🌱 chore: forward-merge v5 -> v6 (full catch-up through 12cf5e745, 283 commits, hand-resolved) - #14399

Merged
clubanderson merged 291 commits into
v6from
sync/v5-to-v6
Oct 27, 2026
Merged

clubanderson merged 291 commits into
v6from
sync/v5-to-v6

Conversation

@hivecommons-hive

@hivecommons-hive hivecommons-hive Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Forward-merge of origin/v5 (12cf5e7) into v6 (9170788): git merge --no-ff --signoff origin/v5 on origin/v6, all 283 v5 commits, hand-resolved, plus two follow-up merges for the commits both branches gained while the first round was in review (v6 #14574; v5 #14585, #14583, #14579, #14580, #14571, #14427, #14428, #14588, #14593). Replaces the earlier two-slice plan (slice 1 of 2 through 25dd844) with the full catch-up.

Fixes #14340

Conflict map (136 files, first round)

Area Files Resolution
pkg/github (automerge, verdicts, labels) 15 v5 adoption semantics win (signoff re-home #13975/#13980 supersedes squash-unsafe in-place adoptions unless blocked by hold / human verdict / moved head / fork). v6-only kept: fork re-home refusal (#14306), maintainer PR non-adoption, observed-state label writes (#14011), hold guard, 405 refusals. v5's push-rehome tests adapted to the v6 fork refusal (new TestAdoptedLostPushAccessOnForkIsRefusedImmediately); verdict_label_sweep_test plain RemoveLabel case adapted to observed-state semantics.
cmd/hive 12 v5 plus v6-only: hold guard, redmain sweep, mention webhook, UpgradeDrainUntil, QueuedRefs, OwnerStep/needs_decision, repeat-failure detector, ManualMerge, SetBuildCommit, GovernorCadenceKickSource. Tests repointed from agent.NewManager to cruxtest.NewRuntime.
pkg/dashboard 11 v5 chat router (#14408/#14409 deterministic PR/agent matchers, grounded path) replaces the v6 chat_commands hint cases for /agents stuck, /agents <name> status, "which agent completed last", /prs waiting on review (dead helpers removed; v6 test rows adapted to v5 answers). ! commands dispatch to the chat spine before any local answer (v6 conformance). Unrouted plain text returns v5's responder_unavailable (v6 clarify test adapted from fallback). v6-only kept: chat spine, Nous layout, finisher chip, request log, actions JWKS, krun console, spek hub executor, Spek recheck, ioscan classifier controls. settings_parity_allowlist.txt pruned (v5 UI now references auto_merge.contributor_tier.auto_promote_after_merged, auto_merge.human_merge_paths.<key>). v6 merge-lane panel PR links made forge-aware (v5 #14115 test). api-reference.md citations regenerated (check-api-reference-citations.sh --fix, 0 unresolved).
pkg/agent -> src/crux/agent (module cut) 16 v5 cut src/crux as its own module (github.com/hivecommons/hive/crux, replace => ./crux; crux must not import root). Every v6-only change under src/pkg/agent and src/pkg/sandbox carried to src/crux/agent / src/crux/sandbox (taskmcp, logread, advisorhook, ModelRole, Host additions, SendKickWithSource, OmpAgentHomes, ClassAgentGitHubCapReached, advisor lane #9722); src/pkg/agent removed; imports repointed. cruxtest.Runtime gained SetSandboxLauncher; crux/api HostSetters gained the advisor resolvers (in-process only); api/client parity test covers the new methods.
fleetreport / crux/config / pkg/config 4 each v5, plus v6-only agent_github_api_cap_reached class and advisor (omnigent) rows. standby-floor writer exception repointed to crux/config/.
scheduler / internal/testutil 3 v5; crux boundary ratchet baseline pkg/dashboard: 11 (spek hub executor Headless*/UIDMap/proxy env - follow-up), dashboard import allowlist: pkg/logscrub -> crux/logscrub, crux/agent added with justification.
workflows 2 v5 v2-tests.yml and coverage-hourly.yml taken, v6 deltas re-applied; crux/agent floor 88.
bin/contributor-* 2 v5; bin/test_hive_open_issue.sh passes.
docs rest v5 text with v6-only clauses preserved (trusted-merger approval, fork-rehome refusal, merge-queue memory, krun/#13804 security notes, --needs-decision/--no-consolidate/--step-kind union, api-reference per-row union). Stale pkg/agent/ doc paths rewritten to crux/agent/.

Second round (16 files, merging v5 through 4d1642c + v6 #14574)

Area Files Resolution
v6 #14574 (BASH_ENV repeat-failure route) 2 repeat_failure_bash_env{,_test}.go re-homed to src/crux/agent with the crux/config import (crux must not import the root module); SetRepeatFailureEnabledResolver added to the crux Host interface, cruxtest recorder, sidecar (in-process only) and crux/api HostSetters. The bot's own re-merge on this branch imported pkg/config from crux and was replaced.
stagelabels / evidence / config 3 Union: v6 Route.ManualMerge + v5 HumanApprover/ManualMergeRule/LaneReason (#14579); auto_merge.credit_issue_authors (#14585) applied in review_config.go where v6 moved AutoMergeConfig.
pkg/github (review evidence, sentinel) 5 v5 (blocked param, Notice = !blocked); sentinel_sweep.go keeps the v6 adoption handling with v5's one-line change.
pkg/github/automerge 3 v6's linked-issue gate (#14184 fallout) now seeds the v5 MergeCreditor author cache (NoteIssue, misses included) so a merge-ready PR still costs one issue GET; v5's lane-side decisionActions test dropped (v6 renders actions in stagelabels.DecisionActions).
pkg/dashboard 3 stageTrackerSentinel: v5 #14579 supersedes v6 #14053 (cleared label: alert off, findings still fill the tooltip; v6 test row aligned). server.go: v5 FleetRun + v6 AdmissionLabels. index.html: v5 attention title + v6 "Hive end to end first" sort.
docs 3 v5 text with v6-only sentences re-applied; api-reference citations regenerated.

Duplicate forward-ports deduped (one copy kept)

#14455, #14494/#14415, #14376, #14358, #14276, #14279, #14170/#14043, #14105/#14036, #14564, #14315, ioscan #14060/#14070 vs #14078, #14534 (hold guard), #14011, #14480/#14481, #14202/#14181 (405 refusals), #14303 vs #13975, #14541 (feedback JSON guard; supersedes #14548). changelog.d has no duplicate fragments.

Verification (local, macOS)

  • go build ./... and go vet ./... clean in src/ and src/crux/; gofmt -l clean.
  • Tests: every package touched by conflicts passes (cmd/..., pkg/github/..., pkg/dashboard, pkg/config, pkg/advisor, pkg/chat, pkg/scheduler, pkg/fleetreport, pkg/spektacular, pkg/stageengine, internal/..., all of src/crux). TestBinaryExec_Deadline flaked once under full-tree load, passes 3/3 alone (unchanged v6 code).
  • Coverage vs floors (after the second round): tui 92.8% (floor 90), github 88.9% (floor 88), dashboard 87.6% (floor 84), crux/agent 89.0% (floor 88). pkg/outcomebench (✨ Reproducible mediated-vs-unmediated outcome benchmark with README outcomes block #14588) passes.
  • TestRepeatFailureBashEnv_* fail on macOS bash 5.2 on pristine origin/v6 as well (CI is Linux); not a merge issue.
  • No new time.Sleep in tests. scripts/check-go-ratchet-completeness.sh is not present on either branch.

Deferred / follow-ups

  • spek hub executor still couples pkg/dashboard to crux/agent (ratchet baseline 11, import allowlist entry) - needs a Host-side seam.
  • Sidecar advisor resolvers (SetAdvisorEnabledResolver/SetAdvisorRolesResolver) are in-process only.
  • v6 chat_commands hint handlers for agents/prs were removed in favour of the v5 matchers; the remaining hints (/governor, /knowledge, /spek, /who) stay.

Merge as a merge commit (not squash), the same way #13896 (e591959) was merged, so v6 keeps v5's history and the next top-up is incremental.

clubanderson and others added 30 commits October 24, 2026 15:24
#13984)

* ✨ Tracker: 'Let hive decide' delegated decision for needs-human items

Owner-delegate policy package, decisions.delegate setting, delegated
decision endpoint + job, queue-approval note helper.

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

* ✨ Tracker: 'Let hive decide' delegated decision — UI, JS tests, docs, changelog

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

* 📖 docs: resync scale-envelope citation shifted by QueuePRAutoMergeWithNote

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

* 🌱 config: add decisions block to agent-runtime golden fixture

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

* 🌱 Let hive decide: OpenAPI entry, dashboard import allowlist, settings-parity leaf references

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

---------

Signed-off-by: Andy Anderson <andy@clubanderson.com>
* 🐛 fix: recover stalled in-place adoptions through supersede

Keep rebase work in the existing fixer lane, then re-home idle heads instead of parking them. Recover lost push access and squash attribution failures immediately while retaining diff fences and mutation gates.

Hive-Run: #13975
Hive-Plan: adoption-repair-fallback
Hive-Spec: issue-13975#expected-1-3
Signed-off-by: mendezr <mendezr@users.noreply.github.com>

* 🐛 fix: require confirmed push denial before rehoming adoptions

Keep live in-place adoptions on transient API failures, omitted access evidence, and unrelated base workflow drift. Name hold, human-verdict and head-ownership blockers accurately in sign-off stall notes, with regression coverage.

Signed-off-by: mendezr <mendezr@users.noreply.github.com>

---------

Signed-off-by: mendezr <mendezr@users.noreply.github.com>
Co-authored-by: mendezr <mendezr@users.noreply.github.com>
… items blocked on their PR (#13990)

* ✨ review: verdict labels, decided-only backlog in heads mode, backlog items blocked on their PR

review.verdict_labels mirrors each PR head's review state onto one label
(reviewing / approve / changes_requested / requires_human), independent of
the automerge engine's stage labels; never created, never blocking.

With review_heads, backlog routing runs only on the decision step's decided
reports (raw head reports filed near-duplicates that spent the daily cap),
and the decided review lists its follow-up items in place.

Every review-backlog item is parked on the PR it was filed from, in every
destination. ReconcileReviewBacklogBlocks lifts the block when the PR
merges and cancels the item when it closes unmerged (GitHub: closed as not
planned; Linear: the team's canceled state).

Fixes #13833

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

* 🐛 review: fix CI — verdict_labels omitzero in JSON, label order, staticcheck

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

* 🌱 review: drop duplicate reviewBacklogLedgerMu after rebase onto v5

v5 already declares the ledger mutex (#13914) and fileOutOfScopeReviewBacklog
already holds it; keep that declaration and name the block sweep among its
writers.

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

* ✨ review: unblock and re-triage backlog items when their PR closes unmerged

Per the maintainer decision on #13849, ReconcileReviewBacklogBlocks no
longer cancels a review-backlog item when the PR it was filed from closes
without merging. It drops the block, comments "source PR #N closed
unmerged — re-triage against current base" and leaves the item open for
normal triage and dedupe: a closed PR is often superseded by one that lands
the same lines. Closing as not planned stays a human (or /fixed) action.

Removes the resolver's CancelItem (GitHub not_planned close, Linear
canceled state) and adjusts tests, docs and the changelog fragment.

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

---------

Signed-off-by: Gregory Hunt <greg@on-board.ai>
Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: Gregory Hunt <greg@on-board.ai>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
…longer imports crux/agent (#13982)

* refactor(crux): make crux.Process its own type so the crux root no longer imports crux/agent

crux.Process is now a snapshot struct crux/agent copies out of its
AgentProcess; ProjectContext, RingBuffer, the Copilot-token constants,
GitHubTokenLogin, DefaultAgentMode, AgentAvailableAtACMMLevel and the
fatal-network pane patterns are defined in the crux root and aliased or
forwarded by crux/agent. crux.FromManager becomes agent.AsRuntime, and the
pane classifiers that share tables with the pane poller move to the new
crux/paneclass leaf. This removes the crux -> crux/agent edge that made
folding crux/types into the root an import cycle.

Refs #13963
Refs #13536

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

* test(crux): cover Process pane capture, ProjectContext scope/pause and RollUpProviderStatus in the module root

The coverage gate floors the crux root package at 90% and the previous
push measured 50.0%: process.go, project.go and provider_status.go moved
in without their tests. Brings the ProjectContext scope/pause tests over
from crux/agent and adds pane-capture and provider roll-up cases.

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

* test(crux): cover GitHubTokenLogin through a local endpoint seam

The crux root dropped to 81.9% against the 90% floor after the move:
GitHubTokenLogin hit a hard-coded https://api.github.com/user with no test
seam. Route it through package-level gitHubUserURL/gitHubUserClient and
exercise the success, non-200, malformed-body, transport-error and bad-URL
branches against httptest.

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

* docs(crux): point Process slice at #13962 and rename changelog fragment

Hive-Fix-Attempt: 1/6

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: architect <280983584+hivecommons-hive[bot]@users.noreply.github.com>

---------

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Signed-off-by: architect <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>
Refs #13536

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>
…cal 085 cases (#14000)

* ✨ delegatedecision: LLM-backed owner-delegate decider for non-mechanical cases

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

* 🐛 dashboard: reference decisions.delegate.llm.model so settings parity passes

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>
…feed (#14015)

ReconcileSeededDefaults warns once per policy template whose on-disk
copy diverges from the embedded default with no seed-manifest record.
#13853 deduped that warning per path per process, but a hive whose
/data/policies predates the seed-manifest tracking (#9428) still has
every embedded template diverge on its first post-upgrade reconcile —
up to one WARN per template within a single boot, each file warning
only once but all sharing the same constant message text. The generic
unclassified_error_repeated catch-all (pkg/fleetreport/slogfeed) keys
on the message alone, so that one-time multi-file burst still crosses
its 5-in-10-minute threshold and re-opened the same self-report
(#13825, #13835, #14005) even after #13853 had already merged.

Add the message to IsBenignMessage's skip list, the same treatment
already given "review pending expired": a burst across unrelated
items (there, PRs; here, policy files) is not a repeated runtime
defect. The underlying per-template warning is unchanged and still
reaches the container log and the dashboard-facing advice.

Closes #14005

Hive-Run: #14005
Hive-Plan: fleet-report benign-message skip-list (unclassified_error_repeated)
Hive-Spec: fleet-report.md#unclassified_error_repeated

Signed-off-by: hanthor <jreilly1821@gmail.com>
…wn governor mode (#14004)

evidenceGovernorMode always returned GetState().Mode (the fleet-wide
cadence), so an Evidence view filtered to ?repo= judged that repo's
opens:merges ratio against the fleet band even when the governor runs
per-repo cadence scope and has a distinct mode for that repo in
State.RepoModes. A repo sitting QUIET inside a SURGE fleet therefore
read as 'backlog growing' against the fleet's drain band instead of
its own scouting band.

evidenceGovernorMode now takes the repo filter, prefers that repo's
RepoModes entry (case-insensitive, matching the rest of this file's
repo filtering) and falls back to the fleet mode when the repo has
none (aggregate cadence scope, or a repo the governor has no snapshot
for). Unfiltered (repo="") callers are unaffected.

Hive-Run: #13992
Hive-Plan: evidence-opens-merges-repo-governor-mode
Hive-Spec: issue-13992#per-repo-governor-mode

Signed-off-by: hanthor <jreilly1821@gmail.com>
…ew follow-up) (#14007)

* 🐛 delegatedecision: tie LLM verdicts to their recording actions

Review findings on #14000:

- A non-park-keeping reply could un-park an item with a bare
  labels-remove of stage/085-needs-decision — no /hive decision comment,
  no marker, no RecordOperatorIssueDecision. The park label is no longer
  removable by the model (LLMRemovableLabels); only comment-decision or
  close-as-duplicate lifts the park, and every acting verdict must carry
  its recording action.
- close-as-duplicate from the model closes the newer item only
  (target < number), matching the dedupe rule; a contributor PR may still
  yield to the hive's newer PR under close-superseded.
- Verdict and actions are validated together (checkVerdictActions): the
  close verdicts require close-as-duplicate, adopt-supersede its action,
  approve on a PR approve-review, and those acting kinds appear only with
  their verdict — so the job and audit log never record a verdict the
  executor did not carry out.

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

* 🐛 delegatedecision: expect the hold refusal in the held RunWithLLM case

ApplyRails records "held: all actions refused" for a held item, so the
refusals assertion added alongside the verdict/action tie must expect one
refusal there, not zero.

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

---------

Signed-off-by: ci-maintainer <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: ci-maintainer <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* 🐛 fleetreport: stop retrying cleared comments refused with 403

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

* docs: refresh RankActionableIssues citation after client.go shift

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>
…ndshake errors (#14022)

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

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

* 🐛 review evidence: stop retrying bundle writes refused with permission denied

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

* changelog: fragment for #14030

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>

* chore: format changelog fragment as entry bullet

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

---------

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Signed-off-by: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…ror feed (#14048)

logCopilotModelFallback warns once per agent per (requested, running)
model tuple when the Copilot CLI rejects --model and runs another model
(#13659), and the poller already surfaces the substitution on the
agent's LastError. The generic unclassified_error_repeated catch-all
keys on the message alone, so a hive whose copilot agents share one
model id the account's CLI rejects has every agent warn once in the
same boot — six WARNs in ten minutes on the reporting hive
(requested claude-sonnet-4.6, running auto) — and crosses the
5-in-10-minute threshold even though no single agent repeats.

Add the message to IsBenignMessage's skip list, the same treatment
given the policy-seed-divergence burst (#14005): it is an operator
configuration condition, not a repeated runtime defect. The per-agent
warning and LastError are unchanged.

Closes #14020

Hive-Run: #14020
Hive-Plan: fleet-report benign-message skip-list (unclassified_error_repeated)
Hive-Spec: fleet-report.md#unclassified_error_repeated

Signed-off-by: Danathar <Danathar@users.noreply.github.com>
Co-authored-by: Danathar <Danathar@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…eue (#14046)

A repository whose ruleset requires GitHub's merge queue answers the REST
merge with 405 "Repository rule violations found ... Changes must be made
through the merge queue". The sweeps returned merge-failed with the error,
so every pass logged a WARN per candidate PR and the fleet reporter filed
it as unclassified_error_repeated.

Classify that 405 as the merge-queue-required skip reason at all four
sweep merge sites (self-authored, trusted-author, queued, contributor
lane). The stage engine keeps it at 100-merge-queue, as merge-failed was.

Closes #14018

Hive-Run: #14018
Hive-Plan: selfreport-unclassified-error-repeated
Hive-Spec: automerge-sweep#merge-queue-required

Signed-off-by: Danathar <Danathar@users.noreply.github.com>
Co-authored-by: Danathar <Danathar@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The scanner's merge sweep and CI-repair pass read `gh pr checks` once
for each of many PRs. The guard counted every read, so a sweep of four
PRs crossed the threshold two minutes into a kick and was self-reported
as "polling CI on its own PR". Waiting on one PR re-reads the same
target, so only command lines run more than once now count toward the
nudge threshold and the ci_poll_nudge self-report. The wall-clock
trigger for a single blocking `gh run watch` is unchanged.

The reviewer-lane report in the issue predates the reviewer exemption
(#13899).

Closes #14016

Hive-Run: #14016
Hive-Plan: ci_poll_nudge sweep vs poll
Hive-Spec: issue-14016#acceptance

Signed-off-by: Danathar <Danathar@users.noreply.github.com>
Co-authored-by: Danathar <Danathar@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.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>
…lures, stop repeating the automerge skip line (#14052)

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>
… the issue chooser (#14051)

Fixes #14050

Signed-off-by: outreach <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: outreach <280983584+hivecommons-hive[bot]@users.noreply.github.com>
* 🐛 fix: queue delegated supersede decisions for adoption

Hive-Run: #13987
Hive-Plan: 13983-item-3
Hive-Spec: delegatedecision#adopt-supersede
Signed-off-by: thatguywob <thatguywob@users.noreply.github.com>

* 🐛 fix: consume delegated supersede request after one attempt

The adoption/supersede label was only cleared once a superseding PR
existed, so a persistent push/PR-create failure (the state the 085
supersede-failed route reports) re-ran the adoption every sweep. Clear
the label after any recorded attempt so the request is one retry and a
failure re-parks the PR at 085 for the owner; deferrals (hold label,
unreadable fence) record nothing and keep the label.

The dashboard now refuses the supersede action when
governor.labels.stage.adoption is off instead of queuing a label the
engine never consumes.

Hive-Run: #13987
Hive-Fix-Attempt: 1/6

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: ci-maintainer <280983584+hivecommons-hive[bot]@users.noreply.github.com>

---------

Signed-off-by: thatguywob <thatguywob@users.noreply.github.com>
Signed-off-by: ci-maintainer <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: thatguywob <thatguywob@users.noreply.github.com>
Co-authored-by: ci-maintainer <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…14043)

* 🐛 labels: stop re-provisioning stage labels on archived repositories

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

* 🐛 labels: memoise archived repos on the EditLabel path too (review follow-up)

Apply the same 403+archived check to the EditLabel error so an archived
repo whose stage labels exist with drifted colour is skipped on later
sweeps instead of logging a provisioning failure every cycle. Add a
sweep-level test running SyncIssueStageLabelsWith twice against the
archived 403 server, asserting one POST and one archived warning, plus a
direct test for the edit path.

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

* ✨ contribute: expire and revoke contributor registration tokens

Persist issuance, expiry and activity metadata; migrate existing credentials, enforce lifetime and optional idle limits, and expose recovery and incident-response controls in Management, the API and hivectl. Preserve token authority across stale profile saves and bind live sessions to the handshake credential.

Hive-Run: #13804
Hive-Plan: contributor-registration-token-lifecycle
Hive-Spec: issue-13804#acceptance
Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Signed-off-by: mendezr <mendezr@users.noreply.github.com>
Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>

* 🐛 fix: tolerate version drift on token last-used touch; repair failing tests

- authenticateContributorToken no longer fails a valid token when the
  last-used bookkeeping write loses a version CAS race: touchLastUsed
  reloads the profile, updates only TokenLastUsedAt while the same token
  hash is stored, retries on conflict and never reports failure. Writes
  are throttled like the WS heartbeat (which now shares the helper).
  The one-time migration write stays strict.
- Document GET /api/contribute/token and the two token revoke routes in
  dashboard/openapi.json (TestOpenAPISpecCoversEveryRegisteredRoute).
- Add examples to hivectl contribute commands (TestCommandTreeHasExamples).
- Classify /api/contributors as hub-private in the landing fetch guard.
- Allowlist contribute.token_max_age / token_idle_max for settings parity.

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

* 🌱 test: cover hivectl contribute login branches for the coverage floor

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

* 🌱 dashboard: drop unused contributorProfileFromRegistrationToken helper

The helper had no production caller and was bound to the default token
policy, so a future caller would silently ignore contribute.token_max_age
and contribute.token_idle_max. Tests now authenticate through the server's
configured policy instead.

Refs #13912

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

* 📖 docs: refresh contributor API source citations after rebase

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

* 🐛 contribute: return revoked profiles so callers audit the refusal

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

---------

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

* 🐛 ledger: reconcile or time-box issue_comment ops stuck in Unknown

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

* docs: refresh RankActionableIssues citation after client.go shift

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>
Project recorded repository token-mint exclusions into ready counts and withheld diagnostics, including their expiry. Preserve repo_unmintable on subsequent ready requests while allowing healthy repositories and expired exclusions through.

Hive-Run: #14003
Hive-Plan: issue-14003-expected-behavior
Hive-Spec: issue-14003#expected-behavior

Signed-off-by: arteeh <arteeh@users.noreply.github.com>
Co-authored-by: arteeh <arteeh@users.noreply.github.com>
Co-authored-by: thatguywob <343366780+thatguywob@users.noreply.github.com>
Subtract per-command baseline counts before classifying repeated CI reads. Successive scanner sweeps can revisit the same PRs without being mistaken for an own-PR wait loop.

Hive-Run: #14061
Hive-Plan: isolate-ci-poll-counts-per-kick
Hive-Spec: #14061

Signed-off-by: arteeh <arteeh@users.noreply.github.com>
Co-authored-by: arteeh <arteeh@users.noreply.github.com>
…and stop re-warning 405 rule violations (#14071)

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
nudgeIfPollingCI's wall-clock trigger fired on any poll seen more than
ciPollNudgeWallClock into a kick, so a scanner reading each PR once late
in a long kick was told to stop polling. Skip that trigger when the polls
since the kick are a sweep (more than one, none repeated). A lone poll,
the blocking `gh run watch` the trigger exists for, and any repeated read
are still nudged.

Hive-Run: #14066
Hive-Plan: review-backlog intent-alignment (PR #14063 follow-up)
Hive-Spec: ci-poll-nudge#wall-clock-sweep

Signed-off-by: Danathar <Danathar@users.noreply.github.com>
Co-authored-by: Danathar <Danathar@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ckend (#14078)

Port of #14060 and #14070 from v6. On the next v5 → v6 top-up, v6's version wins.

Closes #14059

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>
@kubestellar-prow kubestellar-prow Bot removed the dco-signoff: yes Indicates the PR's author has signed the DCO. label Oct 27, 2026
The CI Runner Image PR gate installs gh=${GITHUB_CLI_VERSION} from
cli.github.com, which only serves the newest patch; 2.103.2 was replaced
by 2.103.3 on 2026-10-27, the same drift #14341 fixed for 2.102.0. v5
carries the same pin and will need the same bump.

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
@github-actions github-actions Bot added dco-signoff: yes Indicates the PR's author has signed the DCO. and removed dco-signoff: no Indicates the PR's author has not signed the DCO. labels Oct 27, 2026
@hivecommons-hive hivecommons-hive Bot removed the stage/050-review-pending Review swarm requested; awaiting a verdict for the current head label Oct 27, 2026
@hivecommons-hive hivecommons-hive Bot added the stage/070-fixing Hive-authored PR: CI red, changes requested or needs rebase; a hive agent is fixing it label Oct 27, 2026
@hivecommons-hive hivecommons-hive Bot added stage/050-review-pending Review swarm requested; awaiting a verdict for the current head and removed stage/070-fixing Hive-authored PR: CI red, changes requested or needs rebase; a hive agent is fixing it labels Oct 27, 2026
@hivecommons-hive

Copy link
Copy Markdown
Contributor Author

🛑 Fix loop escalated — human attention needed

This PR has failed CI on 3 distinct fix attempts (new commits, still red). The hive has stopped dispatching further automated fixes for it.

Failing checks: DCO

Raw failure evidence (from check-run annotations):

build (linux/amd64, true, false, 60): buildx failed with: failed to build: failed to solve: process "/bin/sh -c GIT_HASH=$(git -C /repo rev-parse HEAD 2>/dev/null || echo \"unknown\") &&     GIT_SHORT=$(if [ \"$GIT_HASH\" = \"unknown\" ]; then echo unknown; else printf '%s' \"$GIT_HASH\" | cut -c1-7; fi) &&     if [ \"$GIT_BRANCH\" = \"
build-and-test: npm is not on PATH after actions/setup-node on hive-runners-lke-qh55w-runner-v6lrj (half-written shared tool cache, see #10518); marker removed, re-run this job
build-hub (linux/arm64, true, true, 75): buildx failed with: failed to build: failed to solve: process "/bin/sh -c GIT_HASH=$(git -C /repo rev-parse HEAD 2>/dev/null || echo \"unknown\") &&     GIT_SHORT=$(if [ \"$GIT_HASH\" = \"unknown\" ]; then echo unknown; else printf '%s' \"$GIT_HASH\" | cut -c1-7; fi) &&     if [ \"$GIT_BRANCH\" = \"
coverage: Coverage requires successful test shards (hub=success, sliced=success, agent=success, rest=failure)
golangci-lint: issues found
build-and-test: b.agentMgr.SetRepeatFailureEnabledResolver undefined (type hostedRuntime has no field or method SetRepeatFailureEnabledResolver)
golangci-lint: b.agentMgr.SetRepeatFailureEnabledResolver undefined (type hostedRuntime has no field or method SetRepeatFailureEnabledResolver) (typecheck)

Remove the needs-human label after addressing the root cause to return the PR to the automated fix lane.

@github-actions github-actions Bot removed the conflicts-with-open-pr Open PR has a merge conflict with another open PR label Oct 27, 2026
#14596 moved the knowledge-export helpers out of bin/contributor-agent.sh
into bin/lib/knowledge-export.sh; the v5-side omnigent link case
(AGENTS.md + CLAUDE.md) is re-homed into link_backend_knowledge there,
with a contributor-agent.test.sh case covering it.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: adjudicator <280983584+hivecommons-hive[bot]@users.noreply.github.com>
@kubestellar-prow kubestellar-prow Bot added dco-signoff: no Indicates the PR's author has not signed the DCO. and removed dco-signoff: yes Indicates the PR's author has signed the DCO. labels Oct 27, 2026
@kubestellar-prow

Copy link
Copy Markdown
Contributor

Thanks for your pull request. Before we can look at it, you'll need to add a 'DCO signoff' to your commits.

📝 Please follow instructions in the contributing guide to update your commits with the DCO

Full details of the Developer Certificate of Origin can be found at developercertificate.org.

The list of commits missing DCO signoff:

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@github-actions github-actions Bot added dco-signoff: yes Indicates the PR's author has signed the DCO. and removed dco-signoff: no Indicates the PR's author has not signed the DCO. labels Oct 27, 2026

@hivecommons-hive hivecommons-hive Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewer adjudication: REPAIR — evidence: all 60+ CI checks green; probot DCO failure is the expected forward-merge artifact (prow dco passes, label dco-signoff: yes) and tide ERROR reflected mergeable=CONFLICTING after v6 gained #14596, which moved the knowledge-export helpers out of bin/contributor-agent.sh into bin/lib/knowledge-export.sh; changes: merged origin/v6 (374e243) into sync/v5-to-v6 (84dad80, signed off) taking v6's source line and re-homing the v5-side omnigent link case (AGENTS.md + CLAUDE.md) into link_backend_knowledge in the lib, plus an omnigent case in bin/contributor-agent.test.sh; verified lossless: every file touched by #14596 differs from the worktree only by v5-side content (omnigent backend, BOB_API_KEY rename, src/crux paths, agy quota windows, apptainer exec target); tests: bash bin/contributor-agent.test.sh (all suites pass, exit 0); bash -n on both scripts; new assertion confirmed failing against the v6 lib without the ported case; remaining risk: v5 has gained 3 further commits since 12cf5e7 that are not in this PR and will ride the next forward-merge

— hive: agent=adjudicator backend=copilot model=claude-fable-5.1 copilot=1.0.88

@hivecommons-hive

Copy link
Copy Markdown
Contributor Author
84dad80

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

Hive flagged this PR (author @hivecommons-hive[bot], head 84dad807d729) 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 36 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • .github/CODEOWNERS
    • .github/release-lines.yml
    • .github/workflows/ci-runner-image.yml
    • .github/workflows/coverage-hourly.yml
    • .github/workflows/crux-sync.yml
    • .github/workflows/dco-post-merge.yml
    • .github/workflows/docker.yml
    • .github/workflows/docs-link-check.yml
    • .github/workflows/forgejo-smoke.yml
    • .github/workflows/go-security-analysis.yml
    • .github/workflows/pr-verifier.yml
    • .github/workflows/price-table-refresh.yml
    • .github/workflows/promote-stable.yml
    • .github/workflows/tagged-release.yml
    • .github/workflows/v2-ci.yml
    • .github/workflows/v2-tests.yml
    • .oss-scanner/Dockerfile
    • Justfile
    • src/Dockerfile
    • src/Dockerfile.contributor
    • src/deploy/README.md
    • src/deploy/ci-runners/Dockerfile
    • src/deploy/entrypoint.sh
    • src/deploy/k8s/deployment.yaml
    • src/deploy/probe_podman_rootful_netadmin.sh
    • src/deploy/probe_podman_rootless_netadmin.sh
    • src/deploy/test_attach_hint_runtime.sh
    • src/deploy/test_entrypoint_token_access_audit.sh
    • src/deploy/test_entrypoint_uid_isolation.sh
    • src/deploy/test_terminal_scrollback_status.sh
    • src/deploy/test_ttyd_url_arg.sh
    • src/deploy/ttyd-tmux.sh
    • src/go.mod
    • src/pkg/policies/defaults/scanner-automerge.md
    • src/pkg/policies/seed_reconcile_test.go
    • src/policies/scanner-automerge.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/coverage-hourly.yml
    • .github/workflows/crux-sync.yml
    • .github/workflows/forgejo-smoke.yml
    • .github/workflows/v2-tests.yml
  • test_removal — deletes 5 test file(s) (Deletes test files or guts test coverage)
    • src/pkg/agent/bob_launch_shell_test.go
    • src/pkg/agent/dismiss_prompts_fake_test.go
    • src/pkg/agent/stall_selfreport_test.go
    • src/pkg/crux/runtime_test.go
    • src/pkg/watchdog/rotation_probe_test.go
  • 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/crux/observation_test.go
    • src/crux/paneclass/paneclass_test.go
    • src/pkg/ioscan/toolapprove_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.

@clubanderson
clubanderson merged commit e4aa972 into v6 Oct 27, 2026
88 of 92 checks passed
@kubestellar-prow
kubestellar-prow Bot deleted the sync/v5-to-v6 branch October 27, 2026 18:15
@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 Bot added a commit that referenced this pull request Oct 27, 2026
…to the crux module

v6 relocated pkg/agent and pkg/crux into the crux module (#14399), so the new
repeat-failure files move to crux/agent and the status types to package crux.

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author/hive This repository's own hive (the App or one of its agent lanes) authored this PR copilot dco-signoff: yes Indicates the PR's author has signed the DCO. needs-human reviewer-passed 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. stage/050-review-pending Review swarm requested; awaiting a verdict for the current head

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[scanner] v5→v6 forward-merge (v6-topup) failing: 109 conflicts incl. the pkg/agent→crux/agent rename

8 participants