Repository navigation
π± top-up: forward-merge v5 into v6 (123 commits) - #12783
Conversation
β¦port (#12533) Move the per-PR fold behind GET /api/evidence/summary into pkg/evidence (evidence.PR, evidence.FoldPRs, evidence.PRKey) and use it in the hub heartbeat evidence block and `hivectl evidence export`. Both previously kept the newest bundle per PR and windowed on its created_at, so on a spoke with live + backfilled bundles they reported reviewed PRs as open and pulled old PRs into short windows, disagreeing with the dashboard. The fold now also carries revert_of/followup_of/followed_up_by from whichever record knows them (the heartbeat counts followups as failures). The export windows --since on PR open time, adds an opened_at column and reports outcome=closed for a backfilled close without merge. Hive-Run: #12516 Hive-Plan: evidence-fold-shared-readers Hive-Spec: review-evidence#exporting Signed-off-by: Danathar <Danathar@users.noreply.github.com> Co-authored-by: Danathar <Danathar@users.noreply.github.com>
β¦#12530) * fix(issue-claims): do not record a start claim for deferral comments Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com> * fix: resolve blockerRef const/type name collision Signed-off-by: scanner <scanner@hive.kubestellar.io> --------- Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
β¦s exactly one stage label (#12526) * π stagelabels: one enforcer re-reads before writing so an item carries exactly one stage label A contributor claim on #12512 landed nine minutes after the issue reconciler had staged the issue stage/010-actionable. The claim-ledger hook mirrored the claim with a bare AddLabels(stage/020-claimed), so the issue carried two stage labels until the claim lapsed and the hook removed 020 again. The reconciler and the PR lanes plan from the cycle's list payload, so a stage another writer places between the list and the write is never seen either. Every stage write now goes through stagelabels.Enforce / EnforceStage: when a write is due the item is re-read and the plan recomputed from truth, so exactly one stage/NNN-* survives and any duplicate found is healed and counted. The claim hooks (claimswire, contribute_claims) call Client.SetStageLabel, which keeps the author tier and health labels it finds and swaps only the stage. Signed-off-by: Andrew Anderson <andy@clubanderson.com> * π github: journal stage label writes against observed updated_at so a re-added label can be removed again #12443 kept stage/020-claimed next to stage/072 while the reconciler logged 'removed stage/020-claimed' every cycle: the mutation journal had recorded that remove as applied once and replayed it as an idempotent no-op, and Journal.Reconcile refuses to walk an Applied op back. Label mutations are not one-shot effects β another writer can put the label back β so the stage labeler's reads record the item's updated_at and its writes carry it as a claim input. The plain AddLabels/RemoveLabel keep their crash-retry dedupe. Signed-off-by: Andrew Anderson <andy@clubanderson.com> * π± stagelabels: cite the tracking issue Signed-off-by: Andrew Anderson <andy@clubanderson.com> * π scale-envelope: move the RankActionableIssues citation with the code Signed-off-by: Andrew Anderson <andy@clubanderson.com> * test: rename SetStageLabelβApplyStageLabel, drop fixed sleep ApplyStageLabel is a write, not a rebuild-time hook, so it must not match the Set* convention guarded by TestGitHubClientSetHooksAllConfigured. Replace the poll loop's time.Sleep with testutil.Eventually to keep the sleep ratchet flat. Signed-off-by: Andrew Anderson <andy@clubanderson.com> --------- Signed-off-by: Andrew Anderson <andy@clubanderson.com>
β¦g test (#12499) * fix(deploy): avoid printf|grep pipefail false-fail in runtime-config test Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com> * ci: retrigger build-and-test after runner infra failure (PPA 503 in PyYAML step) Signed-off-by: scanner <scanner@hive.kubestellar.io> --------- Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
β¦them (#12535) Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com>
β¦head is red (#12540) The automerge lanes gate on required checks only, so a PR whose rollup shows a red non-required check still reaches contributor-lane:soaking and classifyStage mapped that to stage/100-merge-queue β 'merge queue' next to a red β on #12457. EvaluateCommitCI now reports the completed-red statuses/check runs it skipped as non-required (FailingNonRequired; meta contexts excluded), the sweep notes them on the stage tracker per head SHA, and classifyStage turns a merge-queue reason into 080-awaiting-merge-admission with reason optional-check-failing:<check> whenever the current head carries one. A red required check is still the lane's required-check-failing:* β 072/070, and a note recorded for an older head does not bind a newly pushed head. Closes #12538 Signed-off-by: Andrew Anderson <andy@clubanderson.com>
β¦12536) * fix(agents): point Copilot login dead-ends at the dashboard login flow Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com> * changelog: fragment for #12536 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> --------- Signed-off-by: scanner <scanner@hive.kubestellar.io> Signed-off-by: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com> Co-authored-by: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
β¦le cards and a scope-conflict guard (#12543) * β¨ nous: concurrent campaigns with scope guard and /api/nous/campaigns Campaigns become first-class concurrent entities (hypothesis, scope, active|paused|archived). Two running campaigns may not share a repo target or both be hive-wide: Create/Resume/Update return *Conflict and the handlers answer 409 scope_conflict with the other campaign. campaigns.json v1 files load and upgrade to v2. GET/POST /api/nous/campaigns and PATCH /api/nous/campaigns/{id}; status lists every campaign with its own baseline count and attributed rows. Refs #12532 Signed-off-by: Andy Anderson <andy@clubanderson.com> * β¨ experiment lab: inception-style experiment cards, scope-conflict guard, per-card stages - Experiment Lab renders running campaigns as Inception-style cards (.campaigns-card/.campaign-row): question, scope pills, status, stage line, baseline bar N / 672 with an β saying 672 β 7 days at 4/hour, Pause/Resume/Archive, + New experiment inline form reusing the Repo Targets pills; archived ones under Previous experiments. - 409 scope_conflict renders an in-app warning offering Pause #N and start / Narrow scope (never window.alert/confirm). - Research question removed from the section header (#12498): it lives only on the cards; header is title + β/β + mode Β· N experiments. - Server-derived per-campaign stage/stageLabel/stageDetail/nextAction; a complete baseline in Observe mode offers a single Generate proposals action instead of telling the user to switch modes. Empty states say what to do. Principles tile gets an β. - Fix /api/nous/status echoing the boot-time mode after PUT /api/nous/mode. - OpenAPI, api-reference, strategy-lab.md, dashboard-sections.md, FAQ, changelog fragment; Go + node-run UI tests. Refs #12532 #12541 #12501 #12498 #12521 Signed-off-by: Andy Anderson <andy@clubanderson.com> * π± nous cards: token-based warning tint, FAQ link, lower style ratchet baselines - .nous-conflict-warn uses color-mix on var(--yellow) instead of a raw rgba - FAQ links the Experiment Lab section of dashboard-sections.md (no old-name path in static copy, TestStaticNoStrategyLabCopy) - lower webstatic style ratchet baselines to the current counts Signed-off-by: Andy Anderson <andy@clubanderson.com> --------- Signed-off-by: Andy Anderson <andy@clubanderson.com>
The unlabelled quadrant kite drew a gold polygon with no indication of which axis was which. Unlabelled kites of a legible size (the 78px Fleet quadrant header) now get a tiny muted monospace letter just outside each tip, clockwise from north T, P, S, E β matching the TRUST / PROD / SATIS / EFFIC tile order β each with a <title> carrying the full axis name. The 22px table kite stays bare and relies on its hover panel. Signed-off-by: Andrew Anderson <andy@clubanderson.com>
β¦ 668 (#12552) Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io>
gh-wrapper's pr edit fall-through, pr merge and pr comment arms stamped agent/<lane> + hive/<id> onto any PR the agent touched. A review-fix kick (review.fix_human_prs) running 'gh pr edit --body' on a contributor's PR re-routed it to the scanner and claimed it for the hive (#12495). - wrapper: _hive_owns_pr compares the PR author with the wrapper's own identity (trusted bot login / gh api user); mismatch or unknown β no labels, the operation still goes through. Issue arms unchanged. - stage reconciler: strips stray agent/* and hive/<HiveID> from open PRs the App did not author; StageLabelPolicy.HiveID wired from config. - tests in bin/test_gh_wrapper_gates.sh and automerge_stage_labels_test.go - docs: labels-and-control-signals.md Closes #12545 Signed-off-by: Andrew Anderson <andy@clubanderson.com>
#12547) Nothing read the label as a signal, but every agent write re-applied it, so it crowded the label bar on every item a hive touched. - bin/gh-wrapper.sh stops adding hive/<id> (and stops creating the label definition); the identity footer now ends with <!-- hive:origin hive=<id> at=β¦ --> so the origin is still machine-readable - github.OriginMarker/ParseOriginMarker/OriginHive read the marker with a fallback to a leftover label during migration - runtime-error self-reports and the hub self-report relay no longer add hive/<slug>; the seen marker and the Affected-hives block name the hive - Client.RetireHiveIDLabels runs at boot until clean: strips the label from open items, deletes the definition once nothing open carries it, writes /data/hive-id-label-retire-<hive-id>.json and audits each strip - attribution footer regex accepts the trailing marker - docs: labels-and-control-signals.md marks the label retired and points at the marker; dashboard/fleet-report/operator docs updated Closes #12539 Signed-off-by: Andrew Anderson <andy@clubanderson.com>
β¦s, collapsible list (#12554) Signed-off-by: Andrew Anderson <andy@clubanderson.com>
β¦2423) * π fix: tolerate legacy snapshot URL suffixes at config load Keep dashboard writes strict while warning on legacy query or fragment values during config validation. Preserve legacy URL semantics and retain scheme, host, and credentials checks. Hive-Run: #12420 Hive-Plan: legacy-snapshot-url-load-compatibility Hive-Spec: #12420#load-time-compatibility Signed-off-by: mendezr <mendezr@users.noreply.github.com> * π docs: describe snapshot_url load-time tolerance; redact URL in errors - operator-reference: hub.snapshot_url row now distinguishes the load-time warn-and-preserve path for legacy query/fragment values from the dashboard 400. - changelog: drop "on config load and" from the #12356 fragment so the unreleased notes no longer contradict #12420. - config: snapshot URL validation errors redact query/fragment and userinfo (and unwrap *url.Error, which embeds the raw URL). - test: reuse captureLog helper; add redaction coverage. Hive-Fix-Attempt: 1/6 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: scanner <scanner@hive.kubestellar.io> * π docs: clarify snapshot URL validation on both paths Signed-off-by: mendezr <mendezr@users.noreply.github.com> --------- Signed-off-by: mendezr <mendezr@users.noreply.github.com> Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: mendezr <mendezr@users.noreply.github.com> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
β¦id> label (#12563) #12549 added three assertions expecting --add-label agent/<lane>,hive/<id>; #12547 merged 11 seconds later and retired hive/<id> from LABELS_CSV. v5 has failed build-and-test on every PR since bec8c14. The wrapper behaviour is the intended one, so only the expectations change. Closes #12562 Signed-off-by: quality <quality@hive.kubestellar.io> Co-authored-by: quality <quality@hive.kubestellar.io> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
β¦periment Lab (#12566) The hive designs no proposals itself; proposals, ledger rows and principles come only from the external experiment loop writing /var/run/nous/governor/*. GET /api/nous/status now reports an experimentLoop block, and a ready card in suggest/evolve mode says the loop is not running when nothing was written there for NousLoopIdleCycles (24) evaluation cycles, with a docs link. strategy-lab.md documents the component, the file contract and what deployment the repository does and does not cover. Refs #12541 Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
β¦ated_at (#12565) Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Batch successful local ingestions per run or across a daily window. Retry failed batches on empty synthesis cycles without affecting the local vault. Leave repository writes disabled until the publisher core supplies its filtering and policy boundary. Hive-Run: #12449 Hive-Plan: issue-12449/cadence Hive-Spec: issue-12449#daily-cadence Signed-off-by: mendezr <mendezr@users.noreply.github.com> Co-authored-by: mendezr <mendezr@users.noreply.github.com>
* β¨ feat: configure bead-synth repository publishing Add a separate disabled-by-default publish block and expose it through the owner-only knowledge pipeline API. Validate repository paths and mode/cadence enums without enabling any publishing behavior. Hive-Run: #12447 Hive-Plan: #12443 config and API Hive-Spec: #12447#acceptance Signed-off-by: mendezr <mendezr@users.noreply.github.com> * π fix: omit empty bead-synth publishing and track settings gaps 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>
#12558) * π stage labels: any red check on the head is 070/072, never 080 or 100 Follow-up to #12540 (merged), which held a PR with a red non-required check at stage/080-awaiting-merge-admission. Operator expectation on #12457 and #12423: a red check on the head is red CI to a reader, so the repair stage applies whatever the lane's reason (soaking, merge-failed, pending, no-verdict, a transient error) β never 080 or 100. The nudge lists every red optional check on the head. Parking modifiers (hold, needs-human, admission) still take precedence. Trace: both PRs were labelled 100 by the contributor lane's contributor-lane:soaking(...) reason (required checks green, the failing 'relative links and anchors resolve' check is not required on v5), then flapped to 060 via the min_head_age/updated_at bug (#12491, fixed by #12500, not yet deployed). Only the three API-merging lanes (self-authored, trusted-author, contributor) record stages; tide's 'needs lgtm' status is not on their path, so lane admission (soaking) is the enqueue 100 names. Closes #12538 Signed-off-by: Andrew Anderson <andy@clubanderson.com> * π stage labels: a red required check keeps the lane's own reason A red optional check on the head maps to the repair stage only after the lane's own red-CI reason (required-check-failing:*) has had its say, so the recorded reason names the required failure first. Signed-off-by: Andrew Anderson <andy@clubanderson.com> --------- Signed-off-by: Andrew Anderson <andy@clubanderson.com> Co-authored-by: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com>
β¦<id> label retirement (#12564) #12549 added gate tests pinning the injected label set as agent/<lane>,hive/<id>; #12547 retired the hive/<id> label in the same window, so build-and-test on v5 went red at the pr edit / pr merge / issue edit assertions. The wrapper is correct; the expectations now name agent/<lane> alone. Refs #12539, #12545 Signed-off-by: Andrew Anderson <andy@clubanderson.com> Signed-off-by: ci-maintainer <ci-maintainer@hive.kubestellar.io> Co-authored-by: ci-maintainer <ci-maintainer@hive.kubestellar.io> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* π fix: preserve synthesized knowledge in spoke backups Implement the independent backup portion of #12443 without enabling repository writes. Preserve only flat markdown facts in the reserved default vault and restore them owner-only. Hive-Run: #12443 Hive-Plan: #12451 backup follow-through (partial) Hive-Spec: #12443#acceptance-criteria-backup Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com> Signed-off-by: mendezr <mendezr@users.noreply.github.com> * π fix: restore bead-synth facts at the synthesizer's mode; refresh backup docs Review follow-ups for #12495: - Archive and restore vaults/bead-synth-wiki/*.md at 0644, matching what knowledge.BeadSynthesizer writes. The entrypoint re-applies no ownership under vaults/, so an owner-only restore from a different uid left facts unreadable to the synthesizer and reindex. Test asserts the aligned mode. - move-cross-runtime.md: include the vault in the spoke-archive file set. - knowledge-curator.md: note at vault_path that only the default path is included in spoke backups; backup-restore.md cross-references it. - restore.go header and bead_synth.go document the default-path-only scope. Hive-Fix-Attempt: 1/6 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: scanner <scanner@hive.kubestellar.io> * π docs: complete bead-synth backup mapping; umask-tolerant restore-mode test Review follow-ups for #12495: - Add bead-synth-wiki/ to the extract/restore comparison table and to the Docker Compose archive-contents sentence in backup-restore.md. - Colocate the bead-synth archive prefix with spokePrefix/beadsPrefix in the archive-layout block and name the on-disk vaults/ segment once. - Compare the restored fact mode against a same-mode os.WriteFile probe so the assertion holds under any process umask, not only 022. Hive-Fix-Attempt: 2/6 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: scanner <scanner@hive.kubestellar.io> --------- Signed-off-by: mendezr <mendezr@users.noreply.github.com> Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: mendezr <mendezr@users.noreply.github.com> Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io>
β¦#12569) * feat(dashboard): settings UI for publishing bead-synth facts to a repo Signed-off-by: scanner <scanner@hive.kubestellar.io> * fix: drop bead-synth publish keys from settings parity allowlist The Settings UI now references every knowledge.bead_synthesizer.publish.* leaf, so TestSettingsDialogReferencesEveryHiveYAMLLeaf rejects the stale allowlist entries. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: scanner <scanner@hive.kubestellar.io> --------- Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
β¦12531) * β¨ labels: stage/090-ready-for-human-merge + stage/085-needs-decision Fold the merge recommendation into the stage state machine instead of a new recommend/* axis (operator: "maybe make the recommendation a stage instead?"). - Rename stage/090-needs-human β stage/090-ready-for-human-merge; the engine renames the GitHub label in place so PRs keep it. - New stage/085-needs-decision for hand-offs that need a human decision (sentinel-alert, hold / do-not-merge* / needs-decision, no reviewer, non-trust human-only lane rules). - stagelabels.RouteHuman refines every human hand-off against the head's evidence: fix evidence (changes_requested / red checks / DCO no / conflicts) β 072 (070 self-authored) with the reasons in the nudge; no current-head verdict β 050; decision causes β 085; checks pending or soak remaining β 060; else 090. - One deduped entry comment per 085/090 visit; never a GitHub review. - Leaving 085/090 is not a regression. - Check digest (SummarizeCommitChecks) cached per head for 10m. Closes #12528 Signed-off-by: Andrew Anderson <andy@clubanderson.com> * π± stage human tests: match classifyStage needs-rebase path and nudge ask order Signed-off-by: Andrew Anderson <andy@clubanderson.com> * π± stage tests: persist before reload; sentinel-blocked resolves to 085 Signed-off-by: Andrew Anderson <andy@clubanderson.com> * π stage labels: parked hold outranks a red optional check as 085, not 090-needs-human The v5 merge brought in #12558's red-optional-check test, which asserted `label:hold` lands at the retired stage/090-needs-human; on this branch a hold is a decision cause routed through the human path (085-needs-decision). Hive-Fix-Attempt: 1/6 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: ci-maintainer <ci-maintainer@hive.kubestellar.io> --------- Signed-off-by: Andrew Anderson <andy@clubanderson.com> Signed-off-by: ci-maintainer <ci-maintainer@hive.kubestellar.io> Co-authored-by: hivecommons-hive[bot] <280983584+hivecommons-hive[bot]@users.noreply.github.com> Co-authored-by: ci-maintainer <ci-maintainer@hive.kubestellar.io> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
β¦ (split drain flapped maintainer PRs to 090) (#12574) Two sweep drivers (the engine ticker and the main loop's queued sweep) share one stage tracker and each drains it in ApplyStageLabels. A drain that lands mid-sweep splits a PR's observations: the next drain holds only the contributor lane's no-claim for a maintainer the trusted-author lane had admitted, so the PR was written to stage/090 and flipped back with stage/regressed a minute later. A weak opinion is now skipped until every lane enabled for the repo is in the same drain. Closes #12573 Signed-off-by: Andrew Anderson <andy@clubanderson.com>
Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io>
Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io>
β¦outing (#12589) Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
β¦starts on a merged PR (#12591) Hive's automerge regularly evaluates and merges a PR before the swarm review writes its bundle (pod log on hive's hive: 23 'no bundle for merged PR' vs 20 'merge recorded' in five hours). The bundle written minutes later never gained a merge record, so the PR read as outcome unknown (or, before the unknown bucket, as a false approve). upsertReviewEvidence now records actor, merged_at, merge SHA and opened time from the PR it already fetched when starting a bundle. Record-only: nothing reads it to decide a merge. Signed-off-by: Andy Anderson <andy@clubanderson.com>
Automated release commit. Compiles changelog.d/ fragments and moves the CHANGELOG.md Unreleased section into a dated v5.182.0 entry. See src/docs/releases.md. Signed-off-by: hive-release-bot <actions@github.com>
release: v5.182.0
Reset the process-wide lifecycle timeline before the inception-only fixture. Shuffled CI retained a completed graph-a:node-a run from an earlier test, causing the strict single-campaign assertion to fail despite the active campaign being present. Hive-Run: #12729 Hive-Plan: isolate-campaign-delete-fixture Hive-Spec: ci-flake#TestCampaignDeleteClearsActiveInceptionState Signed-off-by: mendezr <mendezr@users.noreply.github.com> Co-authored-by: mendezr <mendezr@users.noreply.github.com>
* π fix: isolate Git source validation tests from DNS Use the existing resolver seam in URL, public-host, and branch-validation unit tests so transient external DNS failures cannot fail CI. Keep production SSRF validation unchanged. Hive-Run: #12732 Hive-Plan: deterministic-git-source-validation-tests Hive-Spec: issue-12732#eliminate-dns-flake Signed-off-by: Karibhou <157208370+Karibhou@users.noreply.github.com> * π test: fail closed on unexpected Git source lookups Return resolver errors instead of failing a parent test from a subtest. Declare public hosts at each call site and cover the unregistered-host path. Hive-Run: #12732 Hive-Plan: deterministic-git-source-validation-tests Hive-Spec: issue-12732#eliminate-dns-flake Signed-off-by: Karibhou <157208370+Karibhou@users.noreply.github.com> --------- Signed-off-by: Karibhou <157208370+Karibhou@users.noreply.github.com>
Recognize the missing cel-go cache file from run 39036933822 as infrastructure so the existing one-time rerun and rate reporting can handle it. Keep missing repository files classified as code failures. Hive-Run: #12746 Hive-Plan: classify-observed-module-cache-failure Hive-Spec: issue-12746#ci-failure Signed-off-by: Karibhou <157208370+Karibhou@users.noreply.github.com>
Apply the publishable-content boundary to all 20 PR-capable policy pairs and require the rule in the existing regression test. Hive-Run: #12725 Hive-Plan: proposed-fix-policy-cross-repo-citations Hive-Spec: issue-12725#proposed-fix Signed-off-by: mendezr <mendezr@users.noreply.github.com> Co-authored-by: mendezr <mendezr@users.noreply.github.com> Co-authored-by: Danathar <6772335+Danathar@users.noreply.github.com>
β¦12471) * β¨ hub: explain evidence-driven Fleet quadrant scores Replace relative percentile ranks with fixed reference curves, scored-hive medians and explicit criterion coverage. Prefer hive audit throughput, normalize cost ratios to daily merge rates, and expose accessible per-axis explanations without changing merge decisions. Co-authored-by: clubanderson <407614+clubanderson@users.noreply.github.com> Hive-Run: #12458 Hive-Plan: issue-12458/one-pr Hive-Spec: issue-12458#plan-1-3 Signed-off-by: mendezr <mendezr@users.noreply.github.com> * π fix: use a font token and retain tightened style ratchet Signed-off-by: mendezr <mendezr@users.noreply.github.com> * fix(quadrant): require observed agents for a zero idle score 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>
* β¨ nous: deliver opt-in Hive-self flags over heartbeat Add a per-hive assignment/revert seam and a default-off runtime gate, isolated from repo experiments and governor configuration. Apply verified heartbeat assignments as replacements so explicit reverts and withdrawals take effect on the next beat. Hive-Run: #12396 Hive-Plan: heartbeat-feature-flag-gate Hive-Spec: issue-12396#acceptance Signed-off-by: mendezr <mendezr@users.noreply.github.com> * π Refresh route citations after feature gate wiring Signed-off-by: mendezr <mendezr@users.noreply.github.com> * π docs: refresh route citations after base merge Signed-off-by: mendezr <mendezr@users.noreply.github.com> * docs: document HIVE_SELF_EXPERIMENTS_OPT_IN in env-vars reference Hive-Fix-Attempt: 1/6 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: RaΓΊl MΓ©ndez <18744521+mendezr@users.noreply.github.com> * docs(heartbeat): clarify self-experiment wire semantics and validation order Signed-off-by: mendezr <mendezr@users.noreply.github.com> --------- Signed-off-by: mendezr <mendezr@users.noreply.github.com> Signed-off-by: RaΓΊl MΓ©ndez <18744521+mendezr@users.noreply.github.com> Co-authored-by: mendezr <mendezr@users.noreply.github.com> Co-authored-by: architect <architect@hive.kubestellar.io> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: scanner <scanner@hive.kubestellar.io>
Emit bounded author-kind merged/reverted counters from spokes and pool them in the owner evidence drill-down. Exclude follow-up fixes and preserve unknown data for older spokes. Add aggregation, sanitization, wire and renderer coverage. Hive-Run: #12326 Hive-Plan: author-kind revert dataset Hive-Spec: RFC-12062#evidence-author-kind Signed-off-by: mendezr <mendezr@users.noreply.github.com> Signed-off-by: scanner <scanner@hive.kubestellar.io> Co-authored-by: mendezr <mendezr@users.noreply.github.com> Co-authored-by: scanner <scanner@hive.kubestellar.io>
β¦2741) Document the proposed consent variable without presenting the unmerged delivery seam as available on v5. Separate heartbeat feature flags from deferred image-channel switching and qualify scheduler auto-revert expectations. Hive-Run: #12672 Hive-Plan: operator-guide-currency Hive-Spec: issue-12672#opt-in-and-release-channel-boundary Signed-off-by: mendezr <mendezr@users.noreply.github.com> Co-authored-by: mendezr <mendezr@users.noreply.github.com>
Merge origin/v5 (ca55172..d786b89, 445ef0bβ¦d786b8999) into v6. 79 conflicts resolved preferring v5 except where it would clobber a v6-only feature (split config files, kick-after-publish, nousstore, your-turn/ownership model, revise-in-place campaigns, no Nous output mode, observe-after-write label mutations, configured parking labels). Post-merge test/doc adaptations for the union are included; see the PR body for the full table. Signed-off-by: Andrew Anderson <andy@clubanderson.com>
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
Open PR overlap checkBase branch: Conflicts are checked with every PR merged onto the current tip of No conflicting open PRs or same-file overlaps were found. |
There was a problem hiding this comment.
Mechanical verification of the forward-merge at 9a6e342. I could not read 42k lines semantically, so this is what I checked by recomputing the merge, not by reading the diff.
Merge shape matches the body
- Parents are
1f4a41f(v6) andd786b89(v5);git merge-baseisca5517229as stated.git rev-listshows every v5 commit up tod786b89and every v6 commit up to1f4a41fis contained. Since the head was cut,origin/v5has moved by 14 commits andorigin/v6by 1 β normal for a top-up, but means another top-up will follow this one. - No stray
<<<<<<</>>>>>>>markers anywhere in the PR tree (git grepoversrc/,.github/).
Conflict resolution vs. a fresh automerge (git merge-tree --write-tree -X patience 1f4a41f d786b89)
- The PR tree differs from the automerge in 104 files. Every difference is either a resolved conflict or a re-homing forced by v6's split of
pkg/config/config.gointodashboard_config.go/governor_config.go/hub_config.go/review_config.go/defaults.go/validate.goβ v5 added fields to the monolithic file and they were moved into the split files. - One genuine post-merge compile fix, which I confirmed is correct: v5 added
Client.CommitFilesOnBranch(..., files map[string]string)insrc/pkg/github/branch_files.go:77, while v6 already hadClient.CommitFilesOnBranch(..., files []ArtifactFile)insrc/pkg/github/artifact_commit.go:88. The PR renames the v5 method toCommitTextFilesOnBranchand updates the only caller atsrc/cmd/hive/boot_bead_synth_publish.go:123. The v6 artifact path is untouched.
Trust surfaces (why this is routed to a human rather than confirmed)
.github/workflows/v2-ci.yml,src/Dockerfile,src/Dockerfile.contributorand.oss-scanner/Dockerfilewere not in the conflict set; the PR's copies are byte-identical to the automerge result, i.e. pure carries of v5 changes that already landed there via reviewed PRs.SECURITY.mdandsrc/deploy/test_entrypoint_runtime_config.share byte-identical to v5d786b89.- 36 policy files (
src/pkg/policies/defaults/*.mdand theirsrc/policies/*.mdmirrors) andsrc/pkg/proxy/github_proxy.gowere hand-resolved conflicts. I did not read those resolutions line by line;source_sync_test.goandcontent_boundary_test.gopass in CI, which covers the defaultsβmirror sync but not the semantic merge of each policy.
CI: all test shards, coverage, golangci-lint, gosec, govulncheck, docker builds and release-line checks are green at this head; build (linux/arm64) was still running and probot DCO is action_required as it always is on forward-merges carrying others' commits.
β hive: agent=reviewer backend=copilot model=claude-fable-5.1 copilot=1.0.88
|
merged by Hive trusted-author auto-merge: author @clubanderson holds role owner and GitHub permission admin on repo; CI green at 9a6e342. |
|
Thank you for your contribution! Your PR has been merged. We'd love to hear how your experience was: share feedback |
Forward-merge (top-up) of
v5intov6, same approach as #12556.Range
ca5517229v6..origin/v5: 123 commits,445ef0ba6(π evidence: fold live + backfilled bundles per PR) β¦d786b8999(π docs: clarify Hive-self opt-in and feature-flag delivery status)git merge --no-ff -s recursive -X patience origin/v5, 79 conflicting files. Merge commit, not squash/rebase.Headline changes from v5
stage/085-needs-decisionbecomes the park signal,needs-decision/needs-directionretired but still recognised (π± Replace needs-direction and needs-decision with stage/085-needs-decisionΒ #12683),/hive approve|decisionnever stripsneeds-human(π± research: stamp Console ACMM L0βL5 dates on backfilled evidenceΒ #12680 π± research: supplement pass for Bluefin/Console backfilled evidence (merge.opened_at, live heads)Β #12681), claim hooks useApplyStageLabel+hive/claimed-by-<holder>and fresh-read removes (π dashboard: page jumps every few seconds β /api/pane/{guide,quality} 404 polling re-renders sectionsΒ #12512), plus π± Replace needs-direction and needs-decision with stage/085-needs-decisionΒ #12701 π± labels: rename stage/072-returned-to-contributor β stage/072-needs-authorΒ #12713 π± labels: add stage/071-needs-author for human PRs; narrow 072 to clanker PRsΒ #12722 β¨ labels: stage/090-ready-for-human-merge + stage/085-needs-decisionΒ #12531 β¨ labels: hive-owneddco/no-dcofrom the commit check; missing DCO β stage/072 at onceΒ #12544 π stage labels: weak admission opinions wait for every enabled lane β maintainer PRs no longer flap to stage/090Β #12574 π stage labels: any red check on the head is 070/072, never 080 or 100Β #12558 π stage labels: any red check on the head is 070/072, never 080 or 100Β #12540 π stage labels: consolidated truth fixes + role/author axesΒ #12619 π stagelabels: one enforcer re-reads before writing so an item carries exactly one stage labelΒ #12526.origin/<source>labels on created issues (π± labels: rename origin/review provenance label to origin/reviewerΒ #12688), β¨ labels: apply origin/<source> provenance to every hive-created issueΒ #12704 π± labels: retire the hive/<hive-id> provenance label on issues and PRsΒ #12547 π fix: routing/provenance labels only on hive-authored PRsΒ #12549 π claims: one rule for the hive/claimed-by-<who> suffix β principal login, never a backend nameΒ #12551.v6-only behaviour preserved
git log origin/v5..v6is 932 commits; the following v6 divergences were respected wherever v5 touched the same code: split config files; kick dispatch after status publish; nousstore durable stores; your-turn/ownership model;ReviewVerdictHold; configured parking labels (isParkingLabel/hasNeedsHumanLabel,blocked); revise-in-place campaigns (RevisionOfnever written); no Nous output mode (#11699); runs-section layout;experiment-lab.md(v5strategy-lab.mdkept as stub); observe-after-writeexecuteIssueWritefor label mutations; v6 unpark replies name the labels actually removed.Conflict resolutions
src/policies/*.md+pkg/policies/defaults/*.md(36)src/policies.scanner-automerge.mdtrimmed to 32764 B soTestShippedTemplatesFitUnderCap(2Γ headroom under 64 KiB) still passes.pkg/config/*DefaultNeedsDecisionLabel,LegacyNeedsDecisionLabel(s)) ported into v6's split config files.pkg/github/{client,issue_unpark*,watcher,automerge}NeedsDecisionStageLabel = config.DefaultNeedsDecisionLabel.main.go,merge_eligibility.go,claimswire.goApplyStageLabel/ApplyClaimedByLabel, fresh-read remove) kept; v6 wiring kept.api_campaigns.go,api_hive_advice.go(ours),api_nous.go(ours),deps.go,bands.go,server.go,overview_status.go,ownership.goneeds-decisiondropped from waiting-label defaults/chips (mapped to the stage chip); decision bucket matchesEffectiveNeedsDecision()+ legacy;needs_human/reporter_confirmationpartition rows added.static/index.htmlnousPostCampaignhelper extracted.openapi.jsonadr/0019,adr/README,backup-restore,hive-open-issue,inception,scale-envelope,dashboard-sections,dashboard,labels-and-control-signals,maintainer-commands,operator-reference,strategy-lab(ours) + port intoexperiment-lab,api-referencetablescheck-api-reference-citations.sh --fixrefreshed 329 citations.Post-merge test adaptations (union-only breakage)
pkg/github: v6-only tests updated tostage/085-needs-decisionand to v5 π± research: stamp Console ACMM L0βL5 dates on backfilled evidenceΒ #12680 (needs-humanstays);TestRemoveLabel_PlainReplayDedupesgiven the observe-after-write GET.pkg/dashboard:TestCampaignDeleteRemovesArchiveOnlyrewritten for revise-in-place; section-reorder count 21β22 (activity monitor);nous_settings_guardrails_ui_test.go(v5) given v6 stubs and output-mode assertions replaced; merge-queue test stripsorigin/*provenance labels.pkg/dashboard/webstatic: Experiment Lab header assertions updated to v6 markup.pkg/knowledge:TestInceptionCampaignArchiveDeleteadapted to in-place revise.cmd/hive:TestClaimHooksRemoveLabelAfterSecondClaimExpiresmock is now a small label store that counts onlystage/020-claimedadds/removes (v5 hooks also writehive/claimed-by-*).Validation (local, macOS)
gofmt -lclean;go build ./... && go vet ./...OK.go test ./... -short -count=1: all green except the known local-only failures (pkg/agenttmux/session-env,pkg/releasesentinelgit retagger,pkg/spektacularbinary deadline) that also fail on a cleanv6checkout here.python3 src/scripts/check-docs-citations.py src/docsOK;check-api-reference-citations.sh,check-release-lines.sh,.github/scripts/check-inline-js.jsOK;src/pkg/dashboard && npm test88/88; style ratchet baselines unchanged.Notes
dcochecks will fail because the merge carries other authors' v5 commits; non-blocking for forward-merges (same as π± top-up: forward-merge v5 into v6 (2026-10-16)Β #12556). The merge commit itself is signed off.--merge), never squash/rebase.