Repository navigation
v5.176.0
Added
- Expose the review gate settings in the dashboard Settings dialog (Features → Review gate): post review comments, webhook-triggered dispatch and its debounce, the pending review TTL and re-dispatch cap, the per-head review cap, the re-review cutoff, and the out-of-scope finding backlog toggle and cap, with YAML-key hints on the existing review controls (#11854).
- Settings → Security now edits the global
agent_sandbox.*scalar settings (image, runtime, network mode, timeout, workspace dir, env allowlist) and the Kubernetes Job service account, TTL and workspace claim/mount. - Settings → Security now edits the
intent.*path-pattern and feature-signal lists (empty restores the built-in defaults, shown as placeholders) and shows YAML-key hints for thesentinel.*list settings. - Added automatic Development-sidebar linking for fix PRs that target a non-default branch (e.g.
v6whilev5is the default): hive now calls GitHub'saddCloseIssueReferencesmutation for every same-repoFixes #Nreference when it opens such a PR, and for strong open PR claims during enumeration, so the issue list shows the linked-PR icon and count for release-line work (#11888). GET /api/evidence/summaryaggregates stored review evidence bundles into outcomes by author kind, reviewer calibration and per-model accuracy, weekly sentinel hits and shadow-gate counts, withnandmissingcounts on every series; it is read-only and never affects merging (#12063).- Evidence bundles now link reverts and follow-up fixes: when a merged PR's title or body says
reverts/revert oforfixes/follow-up to/regression froma PR of the same repo merged in the previous 14 days, the new bundle recordsrevert_of/followup_ofand the earlier onereverted_by/followed_up_by(a change-failure-rate proxy; best-effort, never affects a merge). Fixes #12067. - Durable attempted vs blocked agent GitHub write counters by intent tier and block reason, with a weekly series, persisted to
/var/run/hive-metrics/write-counters.jsonand served read-only atGET /api/evidence/write-counters; no change to gating or auto-merge. Part of #12069. - Pre-registration document for the Hive effectiveness study (
src/docs/research/preregistration-2026-10.md): hypotheses H1–H7 including expected-negative H2/H5, metrics and sources, populations and exclusion rules, analysis plan, opt-in experimental arms, and a dated never-edit rule. Refs #12071, RFC #12062. - Evidence: report-only monthly complexity and static-analysis snapshot package (
pkg/evidence/complexity) writing/data/evidence/<org>/<repo>/complexity/<YYYY-MM>.json. Fixes #12072. - Hub: owner-only
GET /api/hub/evidencecross-hive evidence view and an optional heartbeatevidencesummary that feeds new Fleet quadrant criteria (Trust delegation, Efficiency revert rate, Satisfaction override/follow-up rates). Refs #12080, RFC #12062. - Evidence bundles gain an optional
shadowblock (review_gate.would_have_held,intent.would_have_blocked, with reason, tier, confidence and evaluated_at) for recording what shadow-mode gates would have done; bundles without it are byte-identical and merge behaviour is unchanged. Fixes #12103. - Added
intent.shadow(default false): whileintent.enforceis off, both merge lanes (merge-eligible.json and the App self-merge sweep) evaluate intent verification as if enforced and recordshadow.intent.would_have_blocked(+ reason, tier, confidence) on the PR evidence bundle and in the audit log. It never blocks a merge;enforce: trueis unchanged. Fixes #12105. - README gains a "Contributor relay" section explaining donated compute/tokens with no shared secrets and no forge permission changes (#12122).
hive-gh: compactgh --jsonprojections forpr view|list|checks,issue view|listandrun viewthat keep every gate field (labels, author, head SHA, mergeable/merge state, review decision, check conclusions) and leave the full fetch one--fullaway; gh-wrapper and proxy denials are now one actionable line ending in a machine-readablereason=<code>(#12127, refs #12134).- Token spend can now be read per issue, PR, and head SHA: the governor and review-swarm kick paths record which work each kick was launched for (
/data/launch-attribution.jsonl, attached to the existing token collector), a cached join against the existing per-message usage timeline and price table servesGET /api/launch-cost(with a repeat-spendlaunchescounter per ref and?ref=filtering), and the dashboard Cost panel gains a "cost by work item" table. Attribution only — no new budget gate (#12128, refs #12134). - Read-only widget token for the iPhone widget: hive owners create (or revoke) it from the dashboard's 📱 iPhone widget dialog, which shows a QR code that hands the hive URL and token straight to Scriptable, plus when the token was last used and a "Copy script URL" button. The token only authenticates
GET /api/widget/summary(sent asX-Hive-Widget-Token), is stored hashed, and replaces the need for a GitHub token on the phone; hosted hives let that one path through the hub's auth gate. The dashboard also ships a web app manifest andapple-touch-icon, so a Home Screen bookmark is named "Hive" with the bee icon (#12147). - Hub fleet widget:
GET /api/hub/widgetreturns every hive you can see on the hub with its open and actionable issue/PR counts, agents and last heartbeat, plus fleet totals and history; the iPhone Scriptable widget gains a hub mode (widget parameterhub) showing fleet totals with sparklines, "N hives need you" and the hives with the most actionable work. Spokes now report total open issues and PRs in the heartbeat (#12148). - Saved label filters and presets can be pinned to the dashboard sidebar: a Filters nav group shows each pinned filter with a live count across all projects and opens a cross-repo view of the matching issues and PRs grouped by repository, with the facet bar on top; Needs human is pinned by default (#12172).
- Projects cards gain a collapsible Filter section driven by a faceted label filter (labels, free-text terms with quoted phrases and
-termexclusion, type/state/author facets, any/all toggle) with named saved filters persisted per hive in the browser; the built-in Needs human preset (hard-suppress labels,needs-signaland the hold labels, sourced from the server vialabelPresets[]on/api/status) is selected by default (#12172). - In-memory attempted vs blocked agent GitHub write counters in the proxy, keyed by ACMM mode and block reason (
GitHubProxy.WriteCounts()); no change to gating or auto-merge. Part of #12069. - contribute-k8s: optional
HIVE_K8S_RUNTIME_CLASSsetsruntimeClassNameon the contributor workload (#12204) - Added a github-actions[bot] PR takeover to automerge: when a trusted
github-actions[bot]PR is stuck atrequired-check-missingbecause itspull_requestworkflows can never run, the hive App re-authors it as a signed-offhive/takeover-<n>PR and closes the original (auto_merge.bot_takeover.enabled, default on) (#12003). - New hives start with the dashboard's non-critical cards collapsed (#12014): a browser with no persisted dashboard state shows Overview, Governor, Projects, Review, Approvals, Agents and Agent activity expanded and starts Throughput, Tokens, Cost, Advisory, Knowledge, Contributors, Inception, ACMM Eval, Diagnostics, Audit Log, Agent Logs, Strategy Lab and FAQ collapsed with their summaries visible. Browsers that already hold dashboard state are marked
legacyand keep today's all-expanded default; an explicit expand/collapse always wins and round-trips through saved layouts, export/import and reset. The avatar menu's Layout section gains Expand all sections / Collapse all sections. - Auto-merge gains a default-on
contributor-lanetier (auto_merge.contributor_lane.*) that merges PRs produced by this hive's own contributor lane — linked issue carries the hive'shive:claim kind=contributormarker for the PR author — once CI is green on the current head for the soak window (default 120 minutes), the reviewer verdict approves (when a reviewer agent is configured), and Sentinel has no blocking finding. Skips are logged with distinctcontributor-lane:*reasons; Settings → Features gets matching controls. - Added hover help marks to the dashboard's GitHub API budget panel: "ETag hit rate" now explains that it is the share of cacheable REST GETs answered 304 Not Modified via a remembered ETag (free against the core rate limit, counted since process start), and "Core remaining" explains the hourly core limit, the bar's warn/critical colours, and the governor's conserve/critical behaviour when the budget runs low.
- Hive-curated
good first issueadvertising (good_first_issue.*, default off): a periodic sweep scores open, unclaimed issues, applies GitHub's canonicalgood first issue+help wantedlabels to the few that qualify, and leaves one<!-- hive:gfi -->welcome comment pitched at contributors who bring their own coding agent — why hive chose it, a deep link to this hive's relay (/contribute?issue=<owner/repo>#<n>), theFixes #n+ DCO rules, and a paste-to-your-agent prompt. A hive agent starting the issue releases the label and marks the comment superseded; relay claims on labelled issues are counted as conversions on Settings → Features. - Dashboard avatar menu gains 📱 iPhone widget, which hands the Scriptable widget script (now served by every spoke at
/ios-widget/hive-widget.js) to Scriptable and runs its setup pre-filled with this hive's URL; reveals an App Store link when Scriptable is not installed. - iPhone Home Screen widget for a hive (
src/pkg/dashboard/static/ios-widget/hive-widget.js, docs insrc/docs/ios-widget.md): open issues, open PRs, actionable issues and actionable PRs, each with a sparkline; small, medium and Lock Screen sizes; tap opens the hive. Runs in Scriptable and authenticates with a GitHub token through the hub's existing bearer auth-check, so no spoke or hub change is required. - Expose issue close-on-merge, Jev, duplicate PR sweep, agent policy repo, PR follow-up window and re-entrant turn settings in the dashboard Settings dialog (Features tab).
- Expose data directories, standalone deployment, review evidence, GitLab/Gitea forge, token mint limits, design-first planning, supersession and compliance windows, swarm banner and tool approval inbox settings in the dashboard Settings dialog, and show YAML keys on the existing escalation, intent, sentinel, auto-merge and publication controls.
- Expose the long-running runs settings in the dashboard Settings dialog (Features → Experimental): stage checkpoints and the checkpoint wait timeout and severity, run triage minimum body length and clarification comment, the Spek recheck cadence, delta cap, discovery proxy and discovery limits, and the Flue, OMP and vibe-kanban external-execution modes, endpoint, workflow versions, project and state directory. The vibe-kanban MCP command is shown read-only (#11854).
Changed
- Changed the
hive/covered-by-prissue label to🐝 covered by PR(hive amber). Hive renames the legacy label in place the first time it is needed in a repository, so issues that already carry it keep it without per-issue writes; readers (claim sync, close-on-merge backfill, dashboard done band) accept both spellings during the transition (#11888). - dashboard: unique, section-specific sidebar nav icons (#12058)
- README and introduction now list Codex and Antigravity (replacing the retired Gemini CLI) among example agent CLIs (#12082).
- Troubleshooting and documentation-map now guide operators without host shell access to the admin MCP diagnostic reads for logs, startup output, request logs, agent terminals, kick logs, and crash/restart/memory evidence (#12119).
- The knowledge primer and Context7 fetches are now byte-capped the way code maps are:
knowledge.primer.max_bytes(default 4096) bounds the rendered# Relevant Knowledgeblock per kick, dropping facts whole in rank order and ending with a visible… truncated: N facts / M bytes omitted (size cap)marker plus a scheduler log line; Context7 llms.txt bodies keep whole, topic-ranked snippets up toHIVE_CONTEXT7_MAX_TOTAL_BYTES(default 16 KiB;HIVE_CONTEXT7_MAX_SNIPPETS,HIVE_CONTEXT7_MAX_SNIPPET_BYTES) with the same marker and a log line. Nothing is ever clipped mid-entry. Closes #12124. Refs #12134. - Kick prompts are now laid out static-first for provider prompt caching: the
[agent:…]header, governor work-source rule, and every static seam (independent review, workflow push ceiling, formal quality, work tracker) precede the policy body, and the data-bearing seams (hold-gated PR coordination, fix-before-new blocks, PR follow-up handoff) plusREPO-SCOPED CADENCE TARGET/AUTHORIZED REPOSfollow it in a fixed documented order./clear, the random canary preamble (still first), and every mandatory seam are unchanged (#12125). - Review swarm: the combined-perspectives kick now emits the shared review boilerplate (scope contract, read instructions, review-bot thread obligations, grounding, output schema, publish contract) exactly once under
SHARED INSTRUCTIONS, followed by one short[perspective:<name>]section per perspective; the grounding budget is stated once for the session and the review-bot thread fetch is bounded to the finding plus the first few replies (comments(first:5)). Per-perspective verdicts, the review-bot thread contract and (repo, PR, head SHA, perspective) dispatch keying are unchanged.combined_perspectivesstays opt-in (decision recorded indocs/review-swarm.md) and is now promoted as recommended inhive.yaml.exampleand the docs (#12126). - The repo
AGENTS.mdblock prepended to a kick is now capped atproject.agents_md_max_bytes(default 8192, the same as the skills cap). The cap drops whole sections at#/##heading boundaries (or the whole file) — never a clipped rule — and when anything is dropped the kick carries a one-line⚠️ AGENTS.md exceeded N bytes; sections omitted: … — read AGENTS.md …warning right after the precedence statement, and the scheduler logs the omitted sections. The precedence paragraph is shortened to one sentence (~0.5 KB from ~1.1 KB) with every pinned clause kept. Closes #12129. Refs #12134. prompt_sourcekick templates fetched from GitHub are now capped at 64 KiB (promptsrc.DefaultMaxPromptBytes, >2× the largest shipped template;HIVE_PROMPT_SOURCE_MAX_BYTESoverrides) instead of 512 KiB, and a body over the cap is rejected whole rather than truncated: the kick falls back to the last successfully fetched copy, then the normal template chain, with a logged warning naming repo, path, size and cap, and the dashboard refuses to bake an over-cap source instead of writing a half-policy (#12130).- Retro analysis and intent alignment model calls are now cached in bounded in-memory LRUs: retro keys on a hash of the deterministic finding set and skips the model only for an empty set; intent alignment keys on (head SHA, intent revision) and never short-circuits on the deterministic verdict. Cache hits/misses are logged and exposed via
CacheStats()(#12131). - The trajectory-review lane now skips a review only when the agent manager's own state proves the agent idle (turn ended or awaiting CI), no output has appeared since its last review, and the review is not overdue (at most 6 intervals between reviews); a stalled-but-running agent is always reviewed and the transcript is never used as a skip signal. Skips are logged with a reason, counted in the Trajectory Review panel, and exported as
hive_trajectory_reviews_total/hive_trajectory_skipped_totalon/metrics(#12132). - Kick prompt size is now measured, not guessed: every rendered kick logs a
kick renderedline withkick_bytes, the issue/PR counts listed versus open, and the activegovernor.kick_limitscaps; aTestKickSizeMeasurementtable renders the shipped scanner policy at representative backlogs and a guard pins what the lists may add at the default caps. The measurements (fixed policy cost 32.9 KiB; lists add ≤ 30.5 KiB at 100/50 on a 302-PR backlog) are documented under "Kick size and the list caps" indocs/operator-reference.md; the100/50defaults are unchanged because lowering them saves little and slows draining large automerge queues (#12133). - docs: point admin MCP links at the v6 reference so the v5 link check passes (#12161)
- Hub landing page: hero headline, meta descriptions and the rotating carousel now carry the same plain-language Hive intro as the docs ("co-maintainer that never sleeps", three rules vs a terminal agent, ACMM L1→L6 limits in code, checks before and after, hub and spoke, contributor relay, project vs hosted service), one slide per idea with a link to the matching docs section; stale "autopilot"/"earned with coverage" framing and the Gemini-first agent list in the meta tags are gone.
- README, Hive introduction and the ACMM Policy Matrix page spell out ACMM as the AI Codebase Maturity Model on first use, with a short definition and the paper link.
- Experiment Lab (Strategy Lab) is now repo-only. The Governor / Repo / Both scope selector is gone, the lab shows repo-scope phases and the single repo research question, and the config dialog drops the Governor Research Question, Controllable Knobs, and Invariants sections.
GET /api/nous/statusalways reports"scope": "repo", strips anyphases.governorblock, and derivesresearchQuestionfromrepoGoalonly.PUT /api/nous/scopeis kept for compatibility but accepts only"repo";governor,both, or anything else returns 400. Governor wording was removed from the lab's UI, help text, and docs. Closes #12206. - The dashboard's 🔗 Knowledge Sources modal now has room to breathe: it opens as a wide, fixed-height dialog (
min(1480px, 94vw)×min(92vh, 1100px), body remains the single scroller) instead of a cramped 960px box, the Git Sources / Wiki Subscriptions / Documents / Context7 / Import Facts blocks sit in spaced section cards with consistent header, explainer and empty-state rhythm, the "▼ Add …" forms get a proper vertical gap and right-aligned action row, and the "+ New channel" button no longer wraps onto two lines. On phones (≤768px and the landscape tier) the two-column grid now folds to a single column inside the full-screen sheet — previously the columns stayed side by side and overflowed the viewport. The inline recipes moved into stylesheet classes, lowering the style ratchet baselines (inlinestyle=1559→1537, rawfont-size650→646, rawpadding223→222). - The root README is now a plain-language landing page, with the Docker Compose, Podman, and Kubernetes walkthroughs moved into dedicated
src/docs/guides. - Documentation links that still referred to root README quick-start anchors now point at the dedicated Docker Compose, Podman, and Kubernetes guide pages.
- The Settings dialog's Features tab is now organised into eight titled sections (#12032) instead of one flat list: Auto-merge, Review gate, Autonomy & ACMM, Work intake & issue lifecycle, Agents & tooling, Quality loops & release health, Integrations & observability and Experimental. Each section has a heading that stays pinned while its controls scroll, a one-line description, and a stable
id/data-settings-sectionanchor; a chip table of contents at the top of the tab jumps the dialog body to a section, and Settings search names each Features hit by its new section heading. No control, key or action changed. Inline wrappers moved into stylesheet classes, lowering the style ratchet baselines (inlinestyle=1537→1507, rawfont-size646→632, rawpadding222→206). - Budget
conservemode no longer sheds the unstick steps (sha_hold, supersession sweep,escalation); onlycriticalskips them, and/api/gh-rate-limits.api_budgetlists both tiers (#12005). - Renamed the v5 dashboard's Strategy Lab to Experiment Lab and rebuilt its ⚙️ configuration dialog so the content no longer sits flush against the dialog edges: the dialog now uses the wide fixed-size modal recipe (sticky header with its own Close ×, the body as the single scroller, a footer for Cancel/Save) with every section rendered as a padded card and the Trust Ladder as an equal-cell segmented control with tint-based active state, folding to one column on phones. Backports v6 #11715 and #12033. The config key is now
dashboard.experiment_lab;dashboard.strategy_labkeeps working as a deprecated alias for one release (it enables the panel, logs a one-line deprecation at load and is folded into the new key on the next save). The/api/statusfeaturesblock carries bothexperiment_laband thestrategy_labalias;/api/nous/*and thenous-sectionid are unchanged.
Fixed
- Fixed the
TestFetchBranchSHASpokeTargetWalkbackStopsAtCurrentTargetCI flake (#11753): the test helpers waited only 2s for leaked background commit-behind/commit-order resolvers whose GitHub compare call may run for 10s, so the wait now covers the resolvers' full timeout. - dashboard: persisted last-good CLI catalogs are no longer aged against the wall clock at load time.
newCLIModelCacheread the on-diskcli-models-last-good-*.jsonfiles and discarded any older than 24h usingtime.Nowbefore the cache's clock could be installed, so the cutoff was applied twice with two different clocks. Expiry now lives only inlastGoodFor, which evaluatescliModelLastGoodTTLwith the cache clock on every read — the same verdict, decided once. This also un-breaks thev5dashboard test shards, which pinned a 2026-10-14 clock and began failing deterministically a day later (#11994, #11995, #11996). - The task-list sweep no longer hard-parks issues with
needs-humanfrom remainder prose; only the explicitRefs #N (needs-human: …)marker does, and prose hand-offs get the softhive/handofflabel so another lane can claim the issue (#12002). - timeline: an agent commenting on its own PR no longer records a
startedstage on the PR journey. The Delivery SLA now ignores PR-keyed journeys when derivingpr_to_merge, so merges are no longer double-counted andn_startedis no longer inflated (#12006, part of #11998). - timeline: Delivery SLA no longer reports already-merged issues as stale in-progress. Issue-side
pr_opened/mergedstages only began recording with #11880, so on a freshly upgraded spoke every issue an agent started earlier stayed "started, no PR" and was counted instale_in_progress(hive's spoke showed 61, all of them closed by merged PRs). On startup the hive now lists each repo's PRs merged in the last 7 days once and folds every merged PR onto the issues it closes (Fixes/Closes #N), stampingpr_openedat the PR's realcreated_atandmergedat itsmerged_at; the merge sweep does the same for every merge it observes. Only issues the timeline already tracks are touched and an issue already marked merged is skipped, so the backfill is idempotent across sweeps and restarts. Merged issues drop out of the stale list, andstart_to_pr/open_to_mergehave samples from day one (#12007, part of #11998). - agent: the blocked-action thrash breaker no longer pauses agents for displaying marker text. The breaker matched
git push blocked:/blocked by hive policyanywhere in any pane line, so a reviewer that rangit diff/grep -nover hive's own thrash-breaker tests was paused indefinitely without ever runninggit push. A line now counts only when it starts with the⛔glyph the credential helper emits (after stripping whitespace, ANSI escapes and agent-TUI gutters), so diff+/-,grep -nN:prefixes, quoted source and markdown are ignored. The governor'sagents_skippedlog now names the real pause trigger (reviewer (paused by thrash-breaker)instead ofoperator-paused), and the dashboard Power table badge shows non-operator triggers inline with the pause provenance as a tooltip (#12015). - dashboard: the Delivery SLA ⓘ no longer shows two tooltips at once. The tile wrapper carried the full explainer as a native
title=while the ⓘ inside it rendered the same text in the styled help tooltip, so hovering the ⓘ drew both. The tile'stitle=is gone (the ⓘ keeps the text and itsaria-label), and a newwebstatictest scansindex.html— static markup and the JS template literals that build it — and fails when any styled-tooltip trigger also inherits a non-empty nativetitle=(#12017). - Evidence bundles for agent-authored PRs now record the author's
agent,backendandmodel(from theagent_pr_createdaudit entry the attribution trailer is rendered from), so author family can be paired with reviewer family; read-only, never affects a merge. Fixes #12065. - Fix
beads.Store.Ready()ignoringdepends_on: beads with a non-closed (or unknown) dependency are no longer offered as ready. Fixes #12070. - dashboard: show upgrade animation when upgrade is hub-initiated (#12073)
- Experiment Lab header no longer shows the stale mode × scope pill (e.g.
OBSERVING · GOVERNOR); it now shows the research question for the active scope as muted text when one is set, and nothing otherwise.GET /api/nous/statusgains aresearchQuestionfield. Fixes #12089. - dashboard: the legacy LiteLLM endpoint block now warns when it diverges from the
litellmgateway. Settings → Model Gateways → "Legacy LiteLLM endpoint (governor.litellm)" sat collapsed at the bottom of the tab with no hint that its URL differed from thelitellmgateway card above it — the #9945 state where pre-#11794 builds sent the gateway's key to the stale legacy URL and failed with a 401 while the gateway's Test passed. The block now opens by default and shows an inline ⚠ naming both URLs and the fix (set it to the gateway URL or clear it, then Save) whenever they disagree, and saving thelitellmgateway mirrors its endpoint into the legacy block client-side so the warning clears without a reload (#12090, refs #9945). - link every covered-by-PR claim to its PR, not only closing claims on release lines (#12092)
- Hub: the exhausted heartbeat-fallback Deployment patch now re-pulls a release-channel hive on its channel tag instead of pinning it to a SHA tag, so channel-tracked spokes roll once per upgrade instead of being rolled again by the tracked-channel re-arm (#12108).
- hub leaderboard: battle log rows are left-aligned with zebra striping, link public
repo#Nrefs to GitHub with kind-aware verbs (merged PR/closed issue) instead of rendering a[project]placeholder, URL paths are no longer scrubbed as repositories, repeated joins per actor are collapsed, Hive of the Week only renders a video whenHIVE_OF_WEEK_VIDEO_URL(or?video=) is configured and otherwise shows an empty state, team leagues only render non-empty groups so the count matches, and the standing strip explains that standings count contributor-relay tasks (#12109) - leaderboard: Battle Log
hive#Nlinks and Hive of the Week now treat a hive's own project repos as public whenever the hub registry lists the hive as public (hub.is_public), soHIVE_PUBLIC_REPOSis an optional addition rather than a required, drifting duplicate of the registry (#12109) - dashboard: the Operations tab's "Your contribution" card no longer reports "could not be loaded. This is a bug" to a signed-in viewer with no contributor profile on the hive (routinely the hive's own owner).
/api/contribute/menow answers that state as a 200 withhas_profile:falseinstead of a 403 — which the hosted spoke's Ingress, inheriting the controller's globalcustom-http-errors, had been replacing with an HTML error page served as 200 — and the card renders an empty state pointing at connecting a contributor agent. Thehive-contributeIngress now pinscustom-http-errors: "502,503"(template and reconciler) so no JSON answer on that prefix can be intercepted again (#12111). - ci: give the
test (rest i/R)shards a 20mgo test -timeoutso a loaded runner no longer trips the default 10m panic onpkg/dashboard(#12113). - Settings dialog: the sticky section heading on the Features tab now sits flush under the search row — the dialog body's top inset is a scrolling spacer instead of padding, which Chromium measured sticky
topfrom, so rows no longer scroll through a gap under the search bar. The dialog is taller (fills the viewport minus a small gutter, capped at 1200px) and a new left-hand rail lists the active tab's sections, scrolls the body to one on click, highlights the section in view, collapses on narrow dialogs and hides while search results are shown. Fixes #12169. - Fixed the dashboard account menu not opening from the mobile navbar (#12192): the avatar is now a real
<button>(iOS Safari never synthesised a click from a tap on the bare<img>), and on phone layouts the dropdown is pinned under the navbar withposition: fixedinstead of being clipped by the scrollingoverflow: hiddenchip strip. - contribute-hive: do not print a tmux attach hint when the contributor agent runs headless (#12196)
- Dashboard: the Diagnostics "GitHub API budget (1h)" tile now spans two grid cells so its per-caller table (Caller, Endpoint, Charged, Req, 304, 429) is fully visible; endpoint and caller cells ellipsise with a full-path tooltip and the table scrolls horizontally as a fallback instead of silently cutting columns (#12203).
- Fixed the dashboard page jumping on every status refresh while the AGENTS section was scrolled into view (#12208): the agents grid was rebuilt via
innerHTMLeach tick, so terminal-tail panes in rows above the viewport changed height and pushed the visible cards (unrecoverable in Safari, which has no scroll anchoring). Cards are now patched in place, the render scroll anchor follows the first visible agent card, and tail panes only auto-follow when already at the bottom. - hub dashboard: the stable release-channel row no longer renders a stray "auto: on"/"paused" chip on its own line after the pause/resume auto-promotion button; the button label already carries the state (#12210).
- Fixed
hivectl hives usenot reaching a container-mode relay (#12225): the container entrypoint (PID 1) now trapsSIGUSR1and forwards it to the relay, so hive switches take effect without a restart. - Refreshed stale task_list_sweep.go citation from lines 797-815 to 848-854 in labels-and-control-signals.md.
- rate-limit accounting: only daemon-credential responses update the shared core snapshot. With auth injection off, an agent's own pass-through credential could report the same
X-RateLimit-Limitas the daemon's bucket and move the sharedcoreRemaining, driving the reserve-floor 429 and budget mode for every agent. Such observations are still recorded per agent for metrics, but only daemon-credential responses (including agent requests with the injected credential) now update the shared snapshot (#12244). - Fixed the merge-eligibility poll loop stalling behind a GitHub PR fetch: the review evidence writer now fetches PR metadata before taking
reviewEvidenceMuinstead of while holding it (#12248). - Fixed the agent configuration dialog's Model picker being unreadable for gateway backends (Refs #9945): the "no per-agent model" option was labelled "(from launch command)", gateway model ids were shown with their provider prefix stripped (
glm-5-3forrits/zai-org/glm-5-3) while the current model kept its prefix, and nothing said the current model was the reason every call 403'd. The option now reads "(backend default — )" (for CLI backends, "chosen by the CLI"), every option shows the full gateway id, a current model outside the gateway's entitled set is marked "(current — not allowed by gateway)", and the select's tooltip states the precedence (per-agent model → gateway default_model → CLI default)./api/inference/models/{backend}now reportsdefault_modeland the fullentitled_modelsset. Saved values were always the full ids; only the labels changed. - Fixed agents on a LiteLLM gateway sending inference for a model the gateway's team is not entitled to when the gateway's
default_modelis (Refs #9945): an agent entry's ownmodel:— typically left over from an earlier copilot/claude backend, e.g.claude-sonnet-4-6— always beat the gateway default, so every call 403'd withteam not allowed to access model … Tried to access aws/claude-sonnet-4-6while the Model Gateways card showed the right default. Once the gateway reports its entitled set (key-info probe or that 403), a non-entitled per-agent model now falls back per-request to the gatewaydefault_model, with a warning naming the agent and the remedy. The opened gateway card's form-level Test now prints the same endpoint / default model / key SHA / route diagnostic as the saved-card Test instead of a bare "OK — N models", and flags when the endpoint typed is not the one agents use yet. - dashboard: the "legacy endpoint" named by LiteLLM route diagnostics can now be found and is kept in step with the
litellmgateway. The standalone LiteLLM settings tab had been retired, so the legacygovernor.litellmendpoint, key and default model were editable only in hive.yaml even though Test results told operators to reconcile them. They are now under Settings → Model Gateways → Legacy LiteLLM endpoint, every diagnostic and setup hint names that location, and saving the gateway namedlitellmwith a new endpoint repoints the legacy endpoint, default model and key store to it so agents can no longer send the new key to the old proxy (#9945). - Test Connection now names the kind of proxy (e.g. AWS Elastic Load Balancer) that refused a gateway probe, identified from its Server header (#9945)
- Fixed the ACMM pack apply that runs on every restart re-seeding the pack's model (e.g. copilot's
claude-sonnet-4-6) onto agents moved to alitellm/vLLM/llm-d backend or a named model gateway (#9945). That model outranked the gateway'sdefault_modeland 403'd as not entitled, and deleting the agent'smodel:line in hive.yaml did not stick. The pack now leaves the model unset on such agents and clears a pack-owned one, so the gateway default applies; a model an operator picked is kept. - automerge: a trusted bot's pristine head is no longer blocked on required contexts its workflow skips by design. When the author is in
trusted_bot_authorsand a required context has no check run but its same-repo workflow run concludedskippedon the head (for exampleverify PR contentson a Dependabot bump), the sweep now counts that context as satisfied, logsrequired-check-skipped-by-design:<ctx>, and still requires every other required check to be green and the head to passmin_head_age. Contexts that were never scheduled, fork heads and non-bot authors keep theirrequired-check-missing:hold. GitHub branch protection remains the final gate. Theuntrusted-author-role tier=trusted-authorlog noise is tracked separately in #12195. (#12004) - Inference-routed
claudeagents no longer stall on Claude Code's interactive "auto mode … this session isn't eligible because your requests go through 127.0.0.1:18444 … Enter to continue" notice: sessions launch withCLAUDE_CODE_AUTO_MODE_SERVER=0(the OpenAI-format gateway behind the translator cannot return a server-side classifier verdict), and the lifetime prompt watcher presses Enter for any pane already showing it (#9945). - Contributor-lane auto-merge now admits a PR whose author holds a
require_tierstier (defaulttrusted/merger) in the hive's contributor registry without needing a linked issue orhive:claimmarker (auto_merge.contributor_lane.registry_tiers_sufficient, default on; logged ascontributor-lane:registry-trusted). Operator-trusted contributors' PRs no longer sit atcontributor-lane:no-linked-issue/no-claimwhen the body only references the issue or the claim happened outside the relay. All other gates still apply. - The shared core rate-limit snapshot behind API budget mode and the agent reserve-floor
429no longer takes readings from foreign buckets: proxied agent responses carrying GitHub's unauthenticatedX-RateLimit-Limit: 60(or a limit different from the daemon's) previously flipped the hive tocriticaland refused every agent GitHub read for up to an hour after each restart while the real bucket had ~14k remaining. - Repo-card issue pills now show the
🔗covering-PR glyph for every issue hive considers covered by a PR — closing or partial, actionable or suppressed — from hive's own claim evidence, with a tooltip that says "closes via PR #N" or "covered by PR #N (partial)"; a PR whose body saysRefs #Nis graded as a reference claim even when its branch is named after the issue, so it never gets a GitHub closing link, and the sweep retracts a closing link the hive App itself added for a pair that is now reference-only (#12144). - Evidence bundles now record the CI conclusion (status, checks,
captured_at) when merge eligibility is evaluated, soci.captured_atis no longer zero when the merge-time capture fails; capture is best-effort and never affects a merge decision (#12066). - Hub now delivers each hive's recorded
cluster_idin the heartbeat response; spokes with no configured cluster id (provisioned before #11432) adopt and persist it and start reporting node health, and the hub's push-reported note names missing node RBAC (node_rbac: forbidden/ 403 on/api/v1/nodes) with a link tosrc/docs/push-reported-node-health.md. - Keep hosted-spoke vanity ingress TLS on the existing wildcard domain path instead of minting certificates for legacy domains.
- Fix the hub admin users table actions so icon buttons stay side-by-side with zebra-striped rows.
- Fix lifecycle timeline endpoint markers so they render as fixed-size circles instead of stretched ovals.
- Balanced the
/contributeManagement tab by grouping operator admin controls into a responsive section grid. - Merge gate: refuse to merge when any completed non-required check run on the head SHA has failed or timed out, so a red
syntax-checkcan no longer be merged past. - Stop self-reporting
model_discovery_degradedwhen a hive simply has no Copilot SDK helper and serves the HTTP chat-completions catalog, an expected steady state. - Dashboard: restore the
modeColorslookup used by the Experiment Lab sidebar mode indicator, which #12095 removed along with the header pill (leftv5failingsyntax-checkwith an undefined identifier). - Fixed the Operations tab layout so the left column expands when the log rail collapses, the contributor-agent header stays readable, and Issue triage stays in the center column.
- Review swarm: an aggregate whose delivered perspectives all approve but which is missing some of the perspectives the head is owed is now
incomplete(reasonreview coverage incomplete: missing <perspectives>) instead ofrequires_humanwith "did not unanimously approve"; the dispatcher no longer parks such a head on a human hold and re-asks only the missing perspectives, so a reviewer kick that dies after its peers reported can no longer leave a PR unable to self-merge (observed on #12045). - Push-reported node health docs: the per-namespace ClusterRole now grants
nodes/proxyand cluster-widepodslist in addition tonodes; without them the hub card showed "pods API failed … 403" and no disk figures even afterHIVE_CLUSTER_IDwas set (seen on vLLM-d, follow-up to #12049). - Review swarm: a dispatched review that posts no verdict now expires after
review.pending_ttl(default 45m) and its perspectives are re-dispatched, instead of leaving the PR stuck as "not reviewed at this head" until someone pushes a new commit (#12045, #12025 sat hours at queue position 1 with the contributor lane atno-verdict); afterreview.max_redispatchexpiries (default 3) of the same head the planner stops re-kicking and records areview-dispatch-exhaustedrequires_human hold.GET /api/review/queueitems gainpending_sinceandredispatch_countwith a "review dispatched Xm ago, no verdict yet" reason. - hub/dashboard: a daily or weekly hive that misses its upgrade window now says why. When the window opened while a hive was behind its target (for example a
:stablehive at 13:00 ET), every gate that could turn it away (an unresolved channel, a claim still being delivered, an earlier upgrade not yet landed, an undeliverable hive, a full upgrade wave, the merge debounce) logged only at Debug, so the spoke dashboard kept showing the previous manual upgrade as if the schedule had never run. The hub now persists the hold reason on the hive record, relays it in the heartbeat upgrade policy (scheduled_hold_reason/scheduled_hold_at), and the spoke shows it as aHeldrow and in the auto-update status detail (autoUpdate.heldReason/heldAt); it clears once the hive is armed, reaches its target, or its auto-upgrade setting changes (#11196). - Settings search now takes you to the exact setting: clicking a result row or "Open tab" switches to the tab where the control is actually rendered (derived from the live DOM, not the hand-written index), scrolls that row into view inside the dialog, flashes and focuses it, and Enter opens the first result. Every setting row now carries a stable
data-setting-keyanchor and a test audits the search index against the rendered tabs, catching entries that pointed at the wrong tab (Strategy Lab, Trajectory review) or at no control at all. - timeline:
SLAHistory.Seriesread the per-repo day map outside the lock, racing concurrentUpdate(fixes #12077). - Delivery SLA: empty tiles now say what they are waiting for, and the Open → triage and Triage → start spans are rendered. Previously
n=0tiles showed a bare—and the two spans that already had data were hidden (#11998). - Fixed troubleshooting.md and documentation-map.md links to the admin MCP reference, which lives on v6; v5 now links to the v6 document instead of a missing local file (#12162).
- Spoke
/api/versionno longer reports "Upgrade available" when the hub-resolved channel target lags the commit the spoke already runs (e.g. right after a promotion); such an offer was always refused by the hub as "not armed — already at target".
Security
- Contributor-lane auto-merge now merges only for contributors an operator vetted: the
hive:claimmarker stamps the contributor's trust tier and whether their GitHub login was proven (reissue-token flow), and the tier requires a tier in the newauto_merge.contributor_lane.require_tiers(defaulttrusted,merger) plus a verified login. It also skips PRs whose author association isNONE/first-time, PRs that touch CI workflows or delete tests, and hives with no reviewer agent; existing claims without the new fields are refused (#12041).
SBOMs: SPDX JSON, generated by Syft against the linux/amd64 image digest, attached below for hive, hive-contributor, and hive-hub. They cover linux/amd64 only — see releases.md for why linux/arm64 is not scanned separately.
NOTICE: third-party license attribution for the Go module dependencies compiled into these images, attached below. Does not cover base-image OS packages or the Node.js/tmux layers built from source — see releases.md for the exact boundary.