Skip to content

🌱 Forward-merge v5 into v6 (125 commits) - #15194

Merged
clubanderson merged 135 commits into
v6from
sync/v5-to-v6-2026-10-28
Oct 29, 2026
Merged

clubanderson merged 135 commits into
v6from
sync/v5-to-v6-2026-10-28

Conversation

@clubanderson

@clubanderson clubanderson commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

Summary

Forward-merge 125 v5 commits through snapshot db3be8d into v6 (original base 9f58413, refreshed through f16e94c). Preserves v5/v6 ancestry; follows the previous full top-up #14399.

Conflict decisions

  • Deliberately resolved 51 initial conflicted files and subsequent refresh conflicts in close-on-merge tests, audit vocabulary, and three adoption/stage-state files.
  • Preserved v6's Crux module, runtime boundaries/seams and split configuration; transplanted v5's new fields into topical files instead of resurrecting the monolith or old agent package.
  • Combined v5 sandbox history, recycling/shared pools and kick fairness with v6 deferred kicks, source attribution and dashboard-before-dispatch ordering.
  • Kept v6 fork/workflow safety, finisher controls and centralized human-decision wording while adding v5 adoption recovery/close-first, merge trains, hold provenance, trust overrides and tracker controls.
  • Reconciled docs semantically. Updated incoming tests to v6 signatures. Preserved v6's retryable escalation notes after targeted regressions caught an over-broad early return.
  • Refreshed v6's PKCE prebinding, trusted-merger identity and stalled-chat-poll fixes. Included v5's contributor-merge closing, green-090 decisions, contributor-tier auditing/refresh, non-rotating tracker symbols, admission-skip classification, and durable supersede-now execution.
  • Preserved local reporter-trust rationale filtering and bot-author bypass while checking foreign port sources against explicit trust/verified merged-upstream acceptance. Kept bounded reported drain deadlines alongside the older-spoke silent-drain grace.
  • Adapted dashboard tests to v6 backend ownership and asynchronous sandbox archival; fixed the JavaScript test extractor for incoming default-object function parameters.

Validation

  • Read-only code-review completed; restored the finisher helpers it identified.
  • Go binary/Crux builds, boundary ratchets, config, review, automerge, reporter-trust and targeted dashboard/hub regressions passed. Documentation citations passed (1441 references); regenerated 462 drifted API references.
  • Final integration head 620f392: 66 successful checks, 17 conditional skips. The full Go matrix (including Crux and shuffled dashboard tests), per-package coverage ratchets, lint/security checks, documentation guards, Linux/ARM64 image build and freshness checks all passed.
  • Contributor relay: 784/784 passing with an isolated home (the real host's quota files contaminate a non-isolated run).
  • Final source fetch still points to db3be8d; 0 v5 commits remain unsynced. No newer v6 commits remain outside the integration.
  • DCO reports 62 unsigned commits; verified all 62 are ancestors of the synced v5 snapshot, with none introduced by the integration. Every integration commit has a DCO sign-off. The inherited-only DCO waiver applies; Tide is pending only because no /lgtm comment is intentionally being added.

Merge commit only: gh pr merge --admin --merge. Never squash/rebase; no /lgtm comment, to prevent Tide racing an ancestry-destroying squash. The standing waiver covers DCO failures caused exclusively by inherited unsigned v5 commits; all meaningful checks must pass.

thatguywob and others added 30 commits October 28, 2026 02:38
* 🐛 fix: opt in to App read tokens for shared-UID agents

Mint and refresh read-only per-agent caches when github.shared_uid_read_token is enabled and App auth is configured. Keep shared-UID agents off direct MCP and mint credentials, and document the loss of cross-agent read isolation.

Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>

Hive-Run: #14778
Hive-Plan: shared-uid-read-token
Hive-Spec: issue-14778#proposal
Signed-off-by: thatguywob <thatguywob@users.noreply.github.com>

* 🐛 fix: record shared-UID token setting parity exception

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

---------

Signed-off-by: thatguywob <thatguywob@users.noreply.github.com>
Co-authored-by: thatguywob <thatguywob@users.noreply.github.com>
* 🌱 chore(ci): run action-pins gate self-test

Exercise the gate before resolving the repository's action pins. The self-test is provided by #14730.

Hive-Run: #14729
Hive-Plan: action-pins-ci-self-test
Hive-Spec: #14729#recommendation
Signed-off-by: thatguywob <thatguywob@users.noreply.github.com>

* 🐛 fix(ci): include the action-pins self-test prerequisite

Bring the gate fixes and hermetic self-test from #14730 into this branch so the new workflow step can execute before that prerequisite merges. Preserve coverage for empty pin sets and workflow filename diagnostics.

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

---------

Signed-off-by: thatguywob <thatguywob@users.noreply.github.com>
Co-authored-by: thatguywob <thatguywob@users.noreply.github.com>
Co-authored-by: quality <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ate fixes (#14812)

Both admission gates (contributor-lane neutral admission and
IssueClaimBlockReason) consulted only the eval-cycle claim ledger, so an
issue whose fix a person had just opened as a PR was still dispatched and
a second PR appeared; nothing resolved two open same-issue PRs beyond
labelling conflicts-with-open-pr and escalating to 085.

- Add a live open-PR dispatch guard (IssueDispatchBlockReason, contributor
  lane hook, claims-ledger fresh-claim admission) that reads the forge,
  labels the issue has-open-pr and withholds the claim; renewals and
  PR-backed start signals keep using the ledger-only gate.
- Add a duplicate-fix sweep: the earlier green/pending PR wins, the later
  hive PR is closed with one comment and duplicate-of:<keeper>; escalate
  to 085 only when the earlier is red/stale and the later green; human
  PRs are commented on and left open.
- scanner.skip_issues_with_open_pr (default true) switches both off.

Fixes #14799

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

The relay redials the registry's dashboardUrl with the contributor's
token after a TLS altname mismatch. dashboardUrl is spoke-reported, so
constrain the redial to https hosts under the hub's spoke domain.

Signed-off-by: sec-check <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: sec-check <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@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: clubanderson <407614+clubanderson@users.noreply.github.com>
)

The duplicate-PR claim ledger only learned which issues an open PR claims
from FetchClaimScan on the full reconcile pass; cached eval cycles skip
applyDuplicatePRGuard (SkipOptional) and the pull_request webhook patched
the PR row but never linked its Fixes #N. An owner PR opened between passes
left its issue offerable for up to an hour and the contribute lane handed it
to a contributor minutes later.

- parse claims from the pull_request payload (same claimsFromPR grammar) and
  apply them to the ledger via a process-wide PRClaimsHook: open → record,
  edited/closed-unmerged → release, merged → merged claim
- governor hook persists the ledger and re-filters the cached actionable
  snapshot through FilterClaimedIssues; open-PR link cache invalidated
- IssueDispatchBlockReason refuses a closed issue ("issue closed")
- webhook response lists claimed_issues; docs + changelog fragment

Fixes #14814

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
* ✨ feat(dashboard): show a draft pill in the activity tracker

Draft PRs on the Hive activity monitor rendered as a bare "Open · since 18h"
row with no status pill, which read as a stuck item. The tracker now derives a
muted draft modifier from the PR's draft bit or prow's
do-not-merge/work-in-progress label (which it reads as a draft rather than a
hold), renders a draft pill with an explanatory tooltip, and shows the Open
cell as "Draft · since …" without the stale tint. Hold still leads a draft.

Fixes #14572

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

* 🌱 test(dashboard): PR-row tooltip carries the title before the headline

The draft fixture is a PR, whose ham-pr-ref tooltip starts with the PR title,
so match the 'Open · draft' headline anywhere in it rather than at the start.

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

---------

Signed-off-by: Andy Anderson <andy@clubanderson.com>
…d push time (#14758)

* fix(automerge): bind unmarked owner approvals to the head's observed push time

workflowFenceApproval judged a typed /hive decision approve (or an
unmarked dashboard /approve) as bound to the current head when it was
created after headPushedAt. Inside the min_head_age window headPushedAt
prefers the head commit's committer date, which the pusher sets, so a
later push with a backdated commit inherited an approval given on an
earlier head and released the workflow-path fence for it.

Approval binding now uses headObservedAt: the PR updated_at pinned on
the head's first observation, which is server-side and never predates
the push. headPushedAt is unchanged for the soak gate it was built for.

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

* docs(automerge): state the re-approve narrowing of the observed-head binding

The changelog fragment and headObservedAt doc comment now say that the
binding time is pinned on the sweep's first observation of the head, so
an owner approval typed between the push and that sweep is judged stale
and must be re-typed. Fail-closed by design; code is unchanged.

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>

* docs(automerge): say unmarked approvals bind to the first-observed head, not the push

hive-merge.md and operator-reference.md still described the pre-#14754
binding ('posted after the head' / 'bound to it'). State that an unmarked
/hive decision approve binds to the PR updated_at pinned on the hive's
first sweep of the head, so an approval typed between the push and that
sweep is stale and must be re-typed.

Hive-Fix-Attempt: 2/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: sec-check <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: sec-check <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…one (#14829)

Tracking/archive issues (label hive/tracking, body marker
<!-- hive:tracking -->, or the sentence "Keep this issue open") are
skipped by the good-first-issue picker and withdrawn if already
labelled, sidelined into the filtered bucket with reason tracking,
refused by the central CloseIssue (close-on-merge, already-done, stale
and advisory sweeps) unless an owner closes from the dashboard,
downgraded Closes->Refs on hive-authored PRs, and PRs created through
hive that cite one get a one-line marked reviewer nudge. The weekly
competitor report workflow now creates its tracking issue with the
label and marker.

Fixes #14826

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

The operation journal (journal.json) kept every Applied/NotApplied entry
forever. On the hosted hive it reached 53k entries / 56 MB and, because
every Begin/RecordResult/Reconcile reloads the file, clones every entry
and rewrites the whole snapshot with MarshalIndent, it accounted for ~60%
of all Go allocations (~13 GB/min) and a persistent ~44 MB heap residue.

Terminal entries now age out after DefaultJournalRetention (7 days) and
the oldest terminal entries are evicted past DefaultJournalMaxEntries
(20k). Planned/Unknown entries are never pruned: they still need
reconciliation. Logical IDs embed the desired generation and claim key,
so a week-old terminal entry can no longer be replayed by a live planner.

Signed-off-by: Andy Anderson <andy@clubanderson.com>
Check due continuous re-kicks between loop iterations and run a cached eval without maintenance sweeps. Defer remaining same-agent kicks after delivery or a live-turn bounce, without recording busy deferrals as governor kick failures.



Hive-Run: #14820
Hive-Plan: continuous-rekick-wake-and-busy-deferral
Hive-Spec: issue-14820#expected

Signed-off-by: thatguywob <thatguywob@users.noreply.github.com>
Co-authored-by: thatguywob <thatguywob@users.noreply.github.com>
… its turn ended (#14843)

* 🐛 governor: keep the continuous re-kick when a kick is recorded after its turn ended

Kick delivery effects are applied in message order, so a fast agent's
RecordKickForRepo can run minutes after its kick was typed while an
earlier lane waits out prompt timeouts. If that agent's turn already
ended, zeroing NextKick (and stamping LastKick later than the outcome)
left it idle with no re-arm path until the 45-minute turn ceiling.

Carry the lane's delivery time into onDelivered and add
RecordKickForRepoAt, which keeps the scheduled re-kick when a newer
turn-end outcome exists.

Fixes #14841

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

* 📖 docs: refresh RankActionableIssues citation in scale-envelope

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

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
… missing session (#14845)

* dashboard: derive sandboxed agent health from the last run, not the missing session

Sandboxed agents (Podman or Job runtime) sit in the idle state between
kicks and have no tmux session, so the SPA painted them red with
"Stopped — see the agent's log" / "session down" and the token
collector never saw their usage.

Persist a SandboxRun record per kick (outcome, summary, usage) under
<work_dir>/sandbox-runs/, restore it on restart, expose it as
sandboxRun on /api/status with an ok/running/failed/overdue verdict
derived from the run and the cadence, make the SPA use that instead of
the session check, and ingest the run history in the token collector.

Fixes #14844

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

* changelog: move fragment to the root changelog.d

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

---------

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
TestClaimHooks_ReleaseWaitsForSlowClaimLabel returns once the claim label is removed, while its release hook goroutine is still inside retryClaimEffect (the queued stage write). That goroutine read the package vars claimsEffectWait/Attempts/Backoff unsynchronised, so when a shuffled run next reached TestClaimHooks_SubmitClaimFacts, swapClaimsEffectRetry wrote them concurrently and the race detector failed the test (#14839).

The retry knobs are now guarded by claimsEffectMu: retryClaimEffect snapshots them once, and the test helper swaps/restores them under the lock. Behaviour is unchanged.

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

TestBootConfigWith_ConfigPathDisagreementAndTracingFailureAreWarnings fails
on v5 with 'registered 4 cleanups, want 3' whenever 127.0.0.1:6060 happens
to be free on the runner: the fake config leaves debug.pprof_addr empty, so
startRuntimeObservability binds the default listener and pushes its stop
hook. Disable the listener in the fakes so the cleanup count only reflects
lock, cancel and tracing.

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>
…lient.go shift (#14846)

The 'relative links and anchors resolve' gate has been red on v5 since
d98b765: scale-envelope.md:37 cited client.go:4679-4696, which no longer
contains RankActionableIssues or AgeMinutes after the surrounding code moved.

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>
…y repair path (#14817)

* 🐛 dashboard: move every late-added pack-owned CLI agent in the gateway repair path

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

* 🌱 dashboard: state the gateway-majority rule hiveGatewayBackend actually implements

Reviewers pointed out that excluding roster peers still on their pack CLI turns the majority bar into 'unanimous operator picks, at least two' in an all-L2 roster, while the doc comment still described a plain majority of all candidates. The threshold is a hive engineering call, so state it rather than hide it: rewrite the doc comment (including the per-level side effect for ci-maintainer), fix the minority test's header, and make the two existing tests say they pin the rule. Changelog wording updated to match.

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>
…ed-PR measurement (#14818)

* ✨ dashboard: keep a daily per-PR launch-cost rollup so cost per merged PR can be measured over 14 days

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

* 🐛 dashboard: document GET /api/launch-cost/history in openapi.json

The route-parity test rejects registered /api routes absent from the
spec; the history endpoint added for #14762 was missing.

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

* 🐛 dashboard: sum launch-cost rollup per launch, count no-usage kicks

Address review findings on #14818:

- Track each launch individually while the join still sees it and fold
  its last share into the day's settled totals exactly once when it
  leaves the window or the launch ring. A day now sums every launch even
  when the 4000-entry ring turns over in under 24h, instead of keeping
  the largest single-window value per ref.
- Count launches that named refs but received no usage, matching
  /api/launch-cost by_ref[].launches semantics.
- Persist live launches alongside the settled rollup so a restart
  neither drops nor double-counts them.
- Cache the sorted per-ref list per day (invalidated only for days a
  tick touched) and move JSON marshal + file I/O out of lc.mu.

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: clubanderson <407614+clubanderson@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Automated pin bump (#8419). Digests recomputed from the downloaded
release artifacts by src/scripts/cli-pin-bump.sh:

  VERSION=2.103.3
  SHA256_AMD64=4c806978ffce1cec70853302a56d70ac6da4f19bae7adca4e1a8ab00633dd91d
  SHA256_ARM64=ee32df2323c8847f5fac6cb6b4b69ca75828e9329a8f22f677021f7b3306ce63

Signed-off-by: hive-release[bot] <hive-release@hive.kubestellar.io>
Signed-off-by: clubanderson <407614+clubanderson@users.noreply.github.com>
Co-authored-by: hive-release[bot] <hive-release@hive.kubestellar.io>
* ✨ agents: recycle idle CLI sessions over an RSS or age budget

A CLI session's V8 heap grows with every turn and never shrinks on idle;
on the hosted hive 14–17 copilot CLI children totalled 5–6.5 GB and the
pod OOM'd daily while the hive process itself sat flat at ~1 GB.

The health tick (CheckAndRestartCrashedAgents) now samples each running
agent's CLI process-tree RSS (tmux pane pid, /proc/*/stat ppid walk,
/proc/<pid>/status VmRSS) and, when a session is over
agents.session_recycle.max_rss_mb (1536) or max_age (6h) AND idle at the
input prompt with no kick in flight for min_idle (2m), ends it through
restartWithStormBreaker — the same graceful path a stall recovery uses —
so claims and queues are preserved. 10-minute per-agent backoff after a
recycle; 5-minute startup grace. The fleet block rides the existing
agents:-map YAML hook and is stamped onto agents without their own
override in EnabledAgents(); per-agent agents.<name>.session_recycle
overrides it. The dashboard shows Session RSS, session age and recycle
count per agent.

Fixes #14842

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

* 🌱 settingsparity: expect the agents.session_recycle leaves in fixture tests

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

---------

Signed-off-by: Andy Anderson <andy@clubanderson.com>
The contributor-lane test engines did not set Options.HeadFirstSeen, so
they all used the process-wide sharedHeadFirstSeen tracker. It pins the
first updated_at observed per acme/widget#7@sha7 and every fixture uses
that same key. headObservedAt, which the workflow-path fence compares
approval timestamps against, therefore returned whichever updated_at the
first test in the process (or subtest, under -shuffle/-count) had pinned
(11:00, 12:40, ...), not the one in the current fixture. Depending on
execution order, approvals posted after the push were treated as older
(releases test failed) and backdated-committer-date approvals as newer
(IgnoresCommitterDate released the fence).

newContributorLaneEngineRepos now gives each engine its own tracker, so
each test observes only its own fixture. Test-only change.

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

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

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

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

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
(cherry picked from commit b9bce6c)

Signed-off-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: scanner <280983584+hivecommons-hive[bot]@users.noreply.github.com>
…k-dir paths (#14896)

SandboxRun.Duration feeds /api/status durationS, but its guard for a zero
StartedAt or an EndedAt before StartedAt was never executed by any test, so
a regression to a bare Sub would ship absurd durations for restored or
partial records unnoticed. SandboxRunUsage.Total and the HIVE_WORK_DIR
fallback were only reached indirectly from crux/agent.

Signed-off-by: quality <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: quality <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Hive-Run: #14909
Hive-Plan: issue-14909-linear-review-scope
Hive-Spec: issue-14909#scope
Signed-off-by: Karibhou <157208370+Karibhou@users.noreply.github.com>
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>
Hive-Fix-Attempt: 2/6

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: architect <280983584+hivecommons-hive[bot]@users.noreply.github.com>
Owner: 'i dont like the status symbols rotating - remove them from all
chevrons'. The working glyph, the merge gate's sweep glyph and the acting
caption's spinner are static icons now; the cue-spin keyframe is gone and
nothing on a chevron or pill rotates. Class names stay so the sibling cue
code and tests compose on them; a webstatic test asserts no rotating
keyframe is applied to a tracker chevron or glyph class.

Fixes #15187

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
…ch sweep (#15180)

Every contributor trust-tier change (operator PUT /trust and /revoke,
newcomer→contributor auto-promotion, registration) now appends
{tier, prev, at, by, reason, source} to the profile's tier_history and
writes a contributor-tier-changed audit event; same-tier writes are
no-ops. GET /api/contributors exposes tier_history and the Contributors
view shows "tier since … · by … · reason" on the tier chip.

The contributor lane's prefilter path (needs-rebase/hold/excluded/draft)
returned before admitContributor, so parked PRs never had a role noted
and ResolveStage fell back to the role/* label a previous pass wrote,
with trusted kept sticky on weak stages. The lane now notes the current
registry tier on that path too, and a fresh lane tier beats a stale
label unless the lane merely cannot vouch for the author.

Fixes #15177

Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Keep v6 fork re-home refusal and comment-aware review scope while exercising v5 DCO replay safely on a base-repository head. Align adopted-original escalation expectations and preserve v5 hold release/keep wording. Regenerate 462 API citations after merged route movement and re-anchor the actionable rank citation.

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

Copy link
Copy Markdown
Contributor
d31c3d6

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

Hive flagged this PR (author @clubanderson, head d31c3d6d8995) 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 24 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • .github/actions/go-mod-download-retry/action.yml
    • .github/workflows/go-security-analysis.yml
    • .github/workflows/testutil-guard.yml
    • .github/workflows/v2-ci.yml
    • .github/workflows/v2-tests.yml
    • .github/workflows/weekly-competitor-report.lock.yml
    • .github/workflows/weekly-competitor-report.md
    • .oss-scanner/Dockerfile
    • GOVERNANCE.md
    • Justfile
    • src/Dockerfile
    • src/Dockerfile.contributor
    • src/pkg/policies/defaults/dedupe-issues.md
    • src/pkg/policies/defaults/scanner-automerge.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/dedupe-issues.md
    • src/policies/scanner-automerge.md
    • src/policies/scanner-full.md
    • src/policies/scanner-holdgated.md
    • src/policies/scanner-issues.md
    • src/policies/scanner.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/actions/go-mod-download-retry/action.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/dashboard/sandbox_health_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 and others added 2 commits October 28, 2026 20:34
Signed-off-by: Andy Anderson <andy@clubanderson.com>
#15190)

Signed-off-by: Andy Anderson <andy@clubanderson.com>
Co-authored-by: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com>
@hivecommons-hive hivecommons-hive Bot added stage/071-needs-author Human-authored PR: CI red, changes requested or conflicting; diagnosis posted, the author must act and removed stage/050-review-pending Review swarm requested; awaiting a verdict for the current head labels Oct 29, 2026
@hivecommons-hive

Copy link
Copy Markdown
Contributor

@clubanderson this PR is held at stage/071-needs-author and the hive will not merge it yet.

Failing checks:

  • coverage
  • test
  • test (dashboard 1/4)
  • test (dashboard 2/4)
  • test (dashboard 3/4)
  • test (dashboard shuffle 1/3)
  • test (dashboard shuffle 2/3)
  • test (dashboard shuffle 3/3)
  • test (hub 4/4)
  • test (rest 3/4)

Next: the hive does not push to your branch. Push a new head (or reply here); CI and the review swarm re-run automatically and the PR returns to the normal path.

@hivecommons-hive hivecommons-hive Bot added stage/050-review-pending Review swarm requested; awaiting a verdict for the current head and removed stage/071-needs-author Human-authored PR: CI red, changes requested or conflicting; diagnosis posted, the author must act labels Oct 29, 2026
…ssions

Signed-off-by: Andy Anderson <andy@clubanderson.com>
Signed-off-by: Andy Anderson <andy@clubanderson.com>
@clubanderson clubanderson changed the title 🌱 Forward-merge v5 into v6 (120 commits) 🌱 Forward-merge v5 into v6 (124 commits) Oct 29, 2026

@hivecommons-hive hivecommons-hive Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

CI at 7e53bb4 has 9 red test shards (run 40795001748). I pulled the distinct failures so the next push can target them; one I traced to the merged tree, the rest are the exact assertion messages from the logs.

Traced in the tree

  1. TestStaticExperimentLabSidebarEntry (experiment_lab_sidebar_12076_test.go:60) — the test asserts the literal window._lastStatus = data;\n applyDashboardFeatureVisibility();. At this head the call is still present (index.html:39456) but the merge placed v5's stage-tracker hop-cue block (index.html:39453-39455, the prevWorkers / renderStageTracker() lines) between the two statements. No behaviour is lost; either move the hop-cue block below applyDashboardFeatureVisibility(); or update the expected literal. This is what fails pkg/dashboard/webstatic.

From the logs — not yet traced to a line

  1. TestYourTurnReleaseOwnerStepAction12635 / TestYourTurnMenuDesignActionHandsIssueToArchitect11566 (your_turn_ui_11566_test.go:929, :1064) — node fails to parse the assembled your-turn.js: SyntaxError: Unexpected token 'function' at function costRepoRowHtml(r, opts). The source around costRepoRowHtml (index.html:30373) is well-formed, so the function the brace-matching extractor (jsClosure) emitted just before it in the closure is being cut short — a merged function body with an unbalanced {/} inside a string or template. Running the test locally and opening the your-turn.js it writes to t.TempDir() at line ~11302 will show which one.
  2. TestApplyPackFollowsUnownedGatewayBackends (pack_gateway_model_test.go:428) — scanner/quality/guide backend="litellm" owner="operator", want its unowned litellm left as is. The merged applyPack now claims unowned gateway backends; this is a v5-vs-v6 semantics choice, not a test typo.
  3. TestReporterTrustUpstreamAcceptance — all 11 subtests (pr_reporter_trust_upstream_test.go:73): Held=false, want true with an all-zero result struct, which reads as the upstream-acceptance path not being reached on the merged tree rather than a wrong branch inside it.
  4. TestEvaluateOrphanedUpgradeHonoursDrainDeadline (upgrade_drain_test.go:80): orphaned = false, want true for both no_drain_reported and drain_deadline_elapsed.
  5. TestHandleKickIoscan{BlockedPromptRedactsAndAudits,ServerRenderedPromptNotRescanned,AllowedPromptDeliveredUnchanged} — only TempDir RemoveAll cleanup: ... directory not empty, i.e. something is still writing under the temp dir after the test returns. Open question whether that is a merge regression or shard-ordering noise; it reproduces across all dashboard shards here.

Not reviewed: the 597-file content diff itself — this comment is scoped to why the merge is red. The DCO action_required check is the usual forward-merge artifact (other authors' commits) and not something to fix here.

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

@hivecommons-hive

Copy link
Copy Markdown
Contributor

CI triage for test (rest 3/4) — PR-local (v6 head is green on the same shard, run 40794253099), two failures in the merge result:

  1. pkg/dashboard/webstatic TestStaticExperimentLabSidebarEntry — experiment_lab_sidebar_12076_test.go:60: index.html is missing window._lastStatus = data;\n applyDashboardFeatureVisibility();. The v5 side of the static/index.html merge dropped or re-indented the applyDashboardFeatureVisibility() call that v6's experiment-lab sidebar test asserts right after window._lastStatus = data;. Re-add that line pair (v6-only) at the status-poll handler.
  2. pkg/github TestReporterTrustUpstreamAcceptance — 11 subtests (upstream_issue, unmerged_upstream_PR, closed_without_merge, merge_lookup_failure, upstream_resolution_failure, watch_disabled_or_repo_absent, unrelated_merged_PR, foreign_*) all fail at pr_reporter_trust_upstream_test.go:73: Held=false, want true with an empty decision struct. Only merged_configured_upstream passes, so the merged pr_reporter_trust.go short-circuits before the v6 upstream-acceptance hold path: the v5 reporter-trust edit (write-back containment / trust refactor) took precedence over v6's upstream-acceptance branch in the conflict resolution. Re-apply v6's hold logic for the non-merged / foreign cases on top of v5's changes.

DCO: expected red on a forward-merge carrying others' commits; non-blocking.

Not pushing — author-owned branch.


🐝 Hive Agent: scanner | Instance: hosted-available-oke-11-placeholder-r05x | SHA: unknown

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

@hivecommons-hive

Copy link
Copy Markdown
Contributor
a45ad4d

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

Hive flagged this PR (author @clubanderson, head a45ad4d166d5) 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 24 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • .github/actions/go-mod-download-retry/action.yml
    • .github/workflows/go-security-analysis.yml
    • .github/workflows/testutil-guard.yml
    • .github/workflows/v2-ci.yml
    • .github/workflows/v2-tests.yml
    • .github/workflows/weekly-competitor-report.lock.yml
    • .github/workflows/weekly-competitor-report.md
    • .oss-scanner/Dockerfile
    • GOVERNANCE.md
    • Justfile
    • src/Dockerfile
    • src/Dockerfile.contributor
    • src/pkg/policies/defaults/dedupe-issues.md
    • src/pkg/policies/defaults/scanner-automerge.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/dedupe-issues.md
    • src/policies/scanner-automerge.md
    • src/policies/scanner-full.md
    • src/policies/scanner-holdgated.md
    • src/policies/scanner-issues.md
    • src/policies/scanner.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/actions/go-mod-download-retry/action.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/dashboard/sandbox_health_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.

…failures (#15201)

The delegated supersede executor returned silently for every PR the
self-authored sweep observes, which includes trusted-bot PRs such as
github-actions: no log, no attempt recorded, request label kept forever
(hivecommons/docs#500). Run the executor for those PRs, refuse the App's
own PR once with a note, skip the collaborator-permission read for App
installations, replay the base onto the hive branch when the head is
conflicting and, on a 409, post one note, consume the request and stage
the PR at its fixing stage with reason supersede-conflict.

Fixes #15196

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

Copy link
Copy Markdown
Contributor

CI triage for the shards the earlier rest 3/4 note did not cover — all PR-local (v6 c3c33e3a9 is green on every one of these shards; this head already contains v6, 0 behind). Run 40795001748 @ 7e53bb4a.

1. test (dashboard 2/4, 3/4, shuffle 1-3/3) — TestYourTurnReleaseOwnerStepAction12635, TestYourTurnMenuDesignActionHandsIssueToArchitect11566
your-turn.js:NNNN SyntaxError: Unexpected token 'function' at function costRepoRowHtml. Not a merge error in index.html (the whole inline script passes node --check). It is a v6 test-helper bug the merge makes live: jsFunc brace-matches from the first { after the signature, so costSortTh(table, key, label, opts = {}) slices to a truncated declaration. v5's render() → renderStageTracker() + merge-celebration chain (stageTrackerScheduleVoices has osc.connect(, which the closure walker reads as the page's SSE connect()) → renderCost → costSortTh pulls it into the your-turn closure for the first time.
→ Fix is on v6 in #15210 (jsBodyStart skips the parameter list; 3 regression tests). Merge v6 into this branch once #15210 lands, or cherry-pick 59594a6e0. No index.html change needed for this one.

2. test (dashboard 1/4, 3/4, shuffle 2/3, 3/3) — TestHandleKickIoscanAllowedPromptDeliveredUnchanged, TestHandleKickIoscanServerRenderedPromptNotRescanned, TestHandleKickIoscanBlockedPromptRedactsAndAudits
testing.go:1464: TempDir RemoveAll cleanup: unlinkat …/001: directory not empty — the test body passes; something started by handleKick is still writing under the temp dir after the test returns (v5 kick path now spawns work v6's ioscan tests do not wait for, or the ioscan tests' tempdir is handed to a v5 writer that outlives them). Needs the writer awaited/cancelled before return, or its root pointed outside t.TempDir().

3. test (dashboard 1/4) — TestApplyPackFollowsUnownedGatewayBackends
pack_gateway_model_test.go:428: guide backend="litellm" owner="operator", want its unowned litellm left as is — the merged applyPack now claims an unowned litellm gateway backend as operator; v6's "leave unowned backends alone" rule lost to the v5 pack/gateway edit in the resolution.

4. test (hub 4/4) — TestEvaluateOrphanedUpgradeHonoursDrainDeadline (no_drain_reported_is_orphaned, drain_deadline_elapsed_is_orphaned)
upgrade_drain_test.go:80: orphaned = false, want true — evaluateOrphanedUpgrade no longer treats an elapsed/absent drain deadline as orphaned. The sibling TestTriggerAutoUpgradesHonoursDrainDeadline still passes, so only the orphan-evaluation branch lost v6's deadline check.

5. coverage — derived: Coverage requires successful test shards (hub=failure, sliced=failure, rest=failure). Will clear once 1–4 and the rest 3/4 items are fixed; no separate action.

Verdict: FIX_DIFF. Not pushing — author-owned branch. Head has since moved to a45ad4d1; items 2–4 were not re-checked against it.


🐝 Hive Agent: quality | Instance: hosted-available-oke-11-placeholder-r05x | SHA: unknown

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

Signed-off-by: Andy Anderson <andy@clubanderson.com>
Signed-off-by: Andy Anderson <andy@clubanderson.com>
@clubanderson clubanderson changed the title 🌱 Forward-merge v5 into v6 (124 commits) 🌱 Forward-merge v5 into v6 (125 commits) Oct 29, 2026
@github-actions github-actions Bot added the conflicts-with-open-pr Open PR has a merge conflict with another open PR label Oct 29, 2026
@hivecommons-hive

Copy link
Copy Markdown
Contributor
620f392

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

Hive flagged this PR (author @clubanderson, head 620f392d3fae) 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 24 sensitive path(s) (Touches a sensitive path (OWNERS, workflows, policies, hive config, security docs, …))
    • .github/actions/go-mod-download-retry/action.yml
    • .github/workflows/go-security-analysis.yml
    • .github/workflows/testutil-guard.yml
    • .github/workflows/v2-ci.yml
    • .github/workflows/v2-tests.yml
    • .github/workflows/weekly-competitor-report.lock.yml
    • .github/workflows/weekly-competitor-report.md
    • .oss-scanner/Dockerfile
    • GOVERNANCE.md
    • Justfile
    • src/Dockerfile
    • src/Dockerfile.contributor
    • src/pkg/policies/defaults/dedupe-issues.md
    • src/pkg/policies/defaults/scanner-automerge.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/dedupe-issues.md
    • src/policies/scanner-automerge.md
    • src/policies/scanner-full.md
    • src/policies/scanner-holdgated.md
    • src/policies/scanner-issues.md
    • src/policies/scanner.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/actions/go-mod-download-retry/action.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/dashboard/sandbox_health_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 46862b2 into v6 Oct 29, 2026
84 of 88 checks passed
@kubestellar-prow
kubestellar-prow Bot deleted the sync/v5-to-v6-2026-10-28 branch October 29, 2026 01:23
@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

@clubanderson

Copy link
Copy Markdown
Member Author

Completed and verified: merged with a true two-parent merge commit 46862b2. Both parents are preserved (v6 f16e94c and integration 620f392). Synced v5 snapshot db3be8d is an ancestor of fetched origin/v6; 0 v5 commits remain unsynced. Final integration CI: 66 successful checks and 17 conditional skips; all meaningful gates passed. The 62 DCO failures were verified exclusively inherited from that v5 snapshot and merged under the standing forward-merge waiver. The created isolated worktree and local/remote feature branches are removed; the parent working tree and other worktrees were left untouched.

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

6 participants