Repository navigation
Description
Finding
The quality lane keeps finding the same class of defect in this repository's Go code: a branch or data-flow that existing tests execute (so it counts as covered) but whose effect no test asserts. Deleting the line leaves the suite green. The accepted patch-coverage gate (#14161) cannot see it — the lines are covered — and the per-package floors in v2-tests.yml / coverage-hourly.yml cannot either.
Prior instances of this class filed by this lane in hivecommons/hive:
- 🐛 fix(knowledge): FullFact only takes a vault body from the fact's own layer #16939 —
src/pkg/knowledge/api.go:958-960mergeFullFactLayer hunk: bothFull/Layerarms ran under existing tests, neither outcome asserted. - 🐛 fix(escalation): a red PR triaged as infrastructure is re-run once instead of sent back to fixers until it escalates #17002 (review) —
src/pkg/relay/ledgertwo arms reached but unasserted; commented on the PR rather than filed. - 🌱 test(crux/serve): pin request span naming and first-status-wins recording #17241 —
src/crux/serve/metrics.gospan.SetName(r.URL.Path)and attributes set on every request, never read back by any test. - Today (not filed per this rule) —
src/crux/agent/watchdog_fleet.go:157,172+markCLILaunchedLocked: the watchdog: PaneShowsLogin pages on Copilot CLI relaunch login flash #17320 relaunch boot grace depends onObservecopyinglastCLILaunchAtintoObservation.LastLaunchAt;TestWatchdogObserveCarriesStartedAtexecutes both lines, nothing asserts the value. Test PR opened separately (references this issue).
Three or more sites with one root cause means the gate is missing, not that another per-site issue is needed.
Recommendation
Add an advisory mutation-testing job to CI, scoped to packages changed by the PR, so "covered but unasserted" surfaces as a surviving mutant in the PR instead of a quality finding weeks later.
Decision taken by hive: gremlins (go-gremlins/gremlins) as the tool — it is Go-native, supports --diff-style package targeting, has a JSON report, and installs with go install (pinnable). Advisory first, mirroring the #14161 phasing:
- Phase 1 (advisory): a
mutationjob in the Go PR workflow runsgremlins unleashagainst the packages the PR diff touches with a wall-clock budget (--timeout-coefficient, hard job timeout 20m) and posts/edits one<!-- hive-mutation -->PR comment listing surviving mutants in changed files (_test.go, generated,testdataexcluded). Never blocks. - Phase 2 (two weeks later, separate PR): fail the job when the efficacy for changed packages drops below a floor agreed from Phase 1 data, with a
mutation/waivedlabel as the override that must name a reason in the PR body. -
src/cruxgets the same job via the existing crux-sync CI mirror once Phase 1 is stable.
The workflow file lives under .github/workflows/, which this agent's tier cannot push; a human or an ISSUES_PRS_MERGE agent needs to land Phase 1. The lane will stop filing individual "covered but unasserted" findings in this repository while this proposal is open, and resumes only if it is declined.
Risk: governance
Priority
- Impact: medium (the class has produced a live-incident fix shipped half-pinned at least once: watchdog: PaneShowsLogin pages on Copilot CLI relaunch login flash #17320's manager half)
- Effort: medium (one workflow job + comment script; tool is
go install-able)
Filed by quality agent (ACMM L4/L6 — full mode)
🐝 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
Activity
hivecommons-hive commentedon Nov 9, 2026
What to reply
/hive approve: go with the recommendation/hive decision <your instructions>: go ahead, following your instructions/hive help: show these againIf what this issue waited on has been done (a merged fix, or an action taken outside this repository), a maintainer can reply
/fixedto close it as completed; Hive clears its park labels.Only a maintainer with write access can un-park; everything else is ignored. Full command reference: https://github.com/hivecommons/hive/blob/v5/src/docs/maintainer-commands.md.
hivecommons-hive commentedon Nov 9, 2026
task-list sweep: 0 of 3 items ticked. Not closing yet — outstanding boxes remain.
Outstanding items:
mutationjob in the Go PR workflow runsgremlins unleashagainst the packages the PR diff touches with a wall-clock budget (--timeout-coefficient, hard job timeout 20m) and posts/edits one<!-- hive-mutation -->PR comment listing surviving mutants in changed files (_test.go, generated,testdataexcluded). Never blocks.mutation/waivedlabel as the override that must name a reason in the PR body.src/cruxgets the same job via the existing crux-sync CI mirror once Phase 1 is stable.Not yet touched:
v2-tests.yml,coverage-hourly.yml,src/pkg/knowledge/api.go,src/crux/serve/metrics.go,_test.goMerged PRs referencing this issue so far:
This comment is edited in place by the task-list sweep on every cycle; it is not duplicated.
github-actions commentedon Nov 9, 2026
PR #17350 has merged (#17350) and referenced this issue with a non-closing
Refs #17349rather than a closing keyword.This issue remains open because the merged PR did not use
Closes/Fixes/Resolves. If the fix should close it on merge, use a closing keyword in the PR body; use the opt-inhive: needs-confirmationmarker only when the reporter genuinely must verify before closure.clubanderson commentedon Nov 9, 2026
/hive decision Approved for Phase 1 only (advisory, gremlins, changed packages, 20m hard timeout, never blocks). Phase 2 (blocking on an efficacy floor) is not approved yet - come back with Phase 1 survivor data and a proposed floor, and park for a fresh decision then. Since the job lives under .github/workflows/, open the PR and flag it needs-human for the push; I will carry it.
hivecommons-hive commentedon Nov 9, 2026
Un-parked by @clubanderson. Decision: Approved for Phase 1 only (advisory, gremlins, changed packages, 20m hard timeout, never blocks). Phase 2 (blocking on an efficacy floor) is not approved yet - come back with Phase 1 survivor data and a proposed floor, and park for a fresh decision then. Since the job lives under .github/workflows/, open the PR and flag it needs-human for the push; I will carry it.
stage/045-needs-decisionis cleared when present andapproved-directionis applied; anyholdlabel is left exactly as it was.12 remaining items
clubanderson commentedon Nov 10, 2026
/hive decision
Phase 1 (#17416) has run long enough to decide Phase 2. Evidence from the last 30 successful
mutation-advisory.ymlruns (gremlins v0.6.0,--diff origin/<base>):Decision for Phase 2, in order:
Skipped: 108despite addingif !looksLikeUUID(id) { return "" }toresumehandle.go. Phase 2 must assert "added Go lines in a mutated package > 0 ⇒ mutants > 0" and fail the job otherwise, or the gate silently passes everything. Verify gremlins'--diffpath matching (it keys onfile.NewNamefromgit diff --merge-base, matched againstfs.WalkDirrelative paths) under thediff.relativesetup from [shared-ci] mutation failing across hivecommons/hive #17463.mutation/acknowledgedlabel applied by a human. Not blocking yet — revisit after 30 more runs once (1) is fixed and the counts are trustworthy.Non-goals: no efficacy percentage floor, no whole-package runs (time budget, #17463), no change to how
edge/stablepromote.github-actions commentedon Nov 10, 2026
@clubanderson this reads as a partial or uncertain confirmation, so the issue stays open. If it is fully fixed for you, reply
/fixedto close it; otherwise please describe what is still outstanding.hivecommons-hive commentedon Nov 10, 2026
Hive status — updated in place; edits do not notify. Full history is in the Activity Monitor.
quality (2026-11-10 17:37 UTC): Phase 2, script half, is in 🌱 mutation: verdict phase and misrouted/uncovered detection for the PR mutation report #17569 (
src/scripts/mutation-report.sh+src/scripts/test-mutation-report.sh). The workflow half lives under.github/workflows/, which this agent's tier cannot push; it needs a human or an ISSUES_PRS_MERGE agent. Exact replacement for.github/workflows/mutation-advisory.yml, to land after 🌱 mutation: verdict phase and misrouted/uncovered detection for the PR mutation report #17569 merges:1. Diagnosis of the zero-mutant case (decision item 1). Run 42842443653 is not a matching fault. gremlins v0.6.0's mutators cover arithmetic, comparison,
&&/||, inc/dec, assignment and loop-control tokens only — nothing for unary!(token.NOT) or return values — soif !looksLikeUUID(id) { return "" }yields zero mutants. All 108 SKIPPED mutants sit atresumehandle.go:132+, outside the added hunk (109–128), which is--diffworking as intended. An "added lines > 0 ⇒ mutants > 0" assertion would have failed 🐛 fix(crux/resumehandle): only UUID-named claude transcripts are resume sessions #17557 wrongly. The trustworthy signature of a matching fault is a SKIPPED mutant inside an added range; 🌱 mutation: verdict phase and misrouted/uncovered detection for the PR mutation report #17569 computes the added ranges from the same merge-base diff and reports that as verdictmisrouted(job fails). A run with no mutable operator in added lines is reported as such and passes.2. Workflow edits (the only part still waiting):
Diff against the current file, in words: rename to
Mutationand drop the "advisory" comment; add the two script paths topaths:; removecontinue-on-error: truefrom the job; add the self-test step beforeInstall gremlins; add theVerdictstep last withif: always()andPR_LABELS. Makemutationa required check in branch protection for v4/v5/v6 once it has been green on a few PRs (theuncoveredwarning never fails, so this only blocks on items 2 and the item-1 fault). Non-goals from the decision are honoured: no efficacy floor, no whole-package runs, no change toedge/stablepromotion. Themutation/acknowledgedlabel needs creating in the repo.Item 3's "revisit after 30 more runs" now has a measurable denominator: every run writes
mutation-out/verdict, and the comment states_Verdict: …_, so the next count can be taken from the comments rather than the gremlins log.— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88
🌱 mutation: honour gremlins' hunk approximation and fail closed on a …
hivecommons-hive commentedon Nov 10, 2026
Fixed by #17416 (merged 474a7b8). Closing. Reply /reopen if the problem persists.
🌱 mutation: verdict phase and misrouted/uncovered detection for the P…