Skip to content

fix(guard_tree): a passing guard's UNMEASURED / SUMMARY lines reach the log — a bare PASS could not say "not measured here" (PMAT-3651) - #3653

Closed
noahgift wants to merge 2 commits into
mainfrom
PMAT-3651-guard-tree-surface-unmeasured
Closed

noahgift wants to merge 2 commits into
mainfrom
PMAT-3651-guard-tree-surface-unmeasured

Conversation

@noahgift

Copy link
Copy Markdown
Member

Closes #3651. Refs #3567 #3633.

guard_tree.sh recorded a passing guard as its label alone and dropped its output. Twelve guards exit 0 on UNMEASURED by design, so PASS <guard> [run] meant "measured and passed" or "not measured here". Main's guard-tree on intel-clean-room-5 (run 35563537942) and gx10-build (run 35561048727) both show only PASS scripts/check_fleet_pv_shapes_gate.sh [run] — #3567's criterion (the verdict measured inside a runner) is unobservable in any log.

What changes

File Change RED proof
scripts/guard_tree.sh surface_pass_summary: under a PASS row, every captured line whose first token is UNMEASURED or SUMMARY, indented ~, capped at 5 + (+N more …) guard_tree_test.sh row 27: surfacing deleted → 22, 23 RED; awk mutants: cap removed → 26; unanchored → 24; SUMMARY dropped → 23, 26; word boundary dropped → 24
scripts/check_fleet_pv_shapes_gate.sh a measured PASS is re-printed as SUMMARY PASS verdict=… runner=… pin=… pv=… version=…; UNMEASURED needs no SUMMARY self-test 1b asserts the row; row 5 refuses SUMMARY PASS on the UNMEASURED path (11/11)
scripts/tests/guard_tree_test.sh rows 22–27 over a 5-guard fixture: UNMEASURED surfaced (no opt-in); SUMMARY surfaced and nothing else; mid-line / prefix words not markers; silent pass → row only; cap; mutant 29 checks, 0 failed

Found while proving it — not fixed here

On lambda the fleet pv (~/.cargo/bin/pv 0.68.2, pin 0.68.2) returns rc=2 with no JSON for lint contracts --gate shapes --format json: it refuses 7 tracked evidence/parity/l0-1{,b}/*.json records as "UNMIGRATED logit-parity record". The pv built from HEAD on the same tree returns verdict=Pass, 2320 focus nodes, pc_shape=fired, 3 planted. So a converged runner (pin + fleet pv) will show this guard as ENV — and after this PR the log will say so instead of a bare PASS. Reported on #3567.

Measured

bashrs-gate PASS · pipe-into-grep-q at ceiling · hardcoded-paths +0 · apr pinned · guards-are-wired PASS · no-timing-in-required PASS · roadmap aggregate idempotent + sorted/unique/additive · fmt · deny advisories · aprender-contracts --lib 1666 passed.

🤖 Generated with Claude Code

…he log — a bare PASS could not say "not measured here" (#3651)

Refs #3651 #3567 #3633

guard_tree.sh recorded a passing guard as its label alone and dropped its
output. Twelve guards exit 0 on UNMEASURED by design, so `PASS  <guard> [run]`
meant "measured and passed" or "not measured here" and no log could tell which.
Main's guard-tree on intel-clean-room-5 (run 35563537942) and gx10-build (run
35561048727) both show only `PASS  scripts/check_fleet_pv_shapes_gate.sh
[run]`, so #3567's criterion — the verdict measured inside a runner — was
unobservable.

- guard_tree.sh: `surface_pass_summary` prints, under a PASS row, every
  captured line whose FIRST token is UNMEASURED or SUMMARY, indented `      ~ `,
  capped at 5 plus a `(+N more …)` count. UNMEASURED needs no opt-in; SUMMARY
  is how a guard puts its measured row into the log. Mid-line words and
  prefixes (`UNMEASUREDX`) are not markers.
- check_fleet_pv_shapes_gate.sh: a measured PASS is re-printed as
  `SUMMARY PASS verdict=… runner=… pin=… pv=… version=…`; UNMEASURED is
  surfaced unasked. Self-test row 1b asserts the SUMMARY row; row 5 now also
  refuses `SUMMARY PASS` on the UNMEASURED path. 11 rows pass.
- guard_tree_test.sh rows 22-27: UNMEASURED surfaced with no opt-in; SUMMARY
  surfaced and nothing else of that guard's output; mid-line and prefix words
  not surfaced; a silent pass prints only its row; 7 SUMMARY lines -> 5 + (+2
  more); and the mutant with the surfacing deleted loses 22 and 23. 29/0.
  Four more mutants of the awk, each RED: cap removed (26), marker unanchored
  (24), SUMMARY dropped (23, 26), word boundary dropped (24).

Measured while proving it, NOT fixed here: on this box the fleet pv
(~/.cargo/bin/pv 0.68.2, pin 0.68.2) returns rc=2 with no JSON on
`lint contracts --gate shapes --format json` — it refuses 7 tracked
evidence/parity/l0-1{,b}/*.json records as "UNMIGRATED logit-parity record" —
while the pv built from HEAD returns verdict=Pass, 2320 focus nodes, pc_shape
fired, 3 planted. So a converged runner (pin + fleet pv) will show this guard
as ENV, and the surfaced row is what will say so. Reported on #3567.

Gates: bashrs-gate PASS, pipe-into-grep-q at ceiling, hardcoded-paths +0, apr
pinned, guards-are-wired PASS, no-timing-in-required PASS, roadmap aggregate
idempotent + sorted/unique/additive; fmt, deny, aprender-contracts --lib 1666.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@noahgift

Copy link
Copy Markdown
Member Author

quorum-review (AD-04): three PASS — agreed (auto_merge: checked=true was_armed=false disarmed=false)

{
 "ticket": "PMAT-3651",
 "head": "09ea6b5a36f6a18a40735481f81b4d6d622e4910",
 "width": 3,
 "executor": "agy",
 "agreed": true,
 "auto_merge": {
  "checked": true,
  "was_armed": false,
  "disarmed": false,
  "note": "auto-merge not armed"
 },
 "lanes": [
  {
   "lane": 1,
   "verdict": "PASS",
   "findings": 0
  },
  {
   "lane": 2,
   "verdict": "PASS",
   "findings": 3
  },
  {
   "lane": 3,
   "verdict": "PASS",
   "findings": 2
  }
 ]
}

Lanes gemini-3.1-pro-high / gemini-3.1-pro-low / gemini-3.6-flash-high; no
transcript reads a sibling lane file.

Refs #3651

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@noahgift

Copy link
Copy Markdown
Member Author

Cross-inspection of docs/audits/quorum-PMAT-3651.json lanes (non-author: aprender-04, 05:38Z)

lane conversation status verdict findings refs to sibling lanes / $WORK duration
lane 1 06bee79b SUCCESS PASS (structured_output) 0 (0 cited, 0 with commands) 0 56 s
lane 2 37d9288a SUCCESS PASS (structured_output) 3 (3 cited, 0 with commands) 0 79 s
lane 3 0b86b8ea SUCCESS PASS (structured_output) 2 (0 cited, 2 with commands) 0 223 s

Distinct agy conversation ids: 3/3; no lane references a sibling lane or $WORK. Read from /mnt/nvme-raid0/agent-wt/gt-3651/docs/audits/quorum-PMAT-3651.json.lanes on this box. Note: guard_tree surfaces a passing guard's UNMEASURED/SUMMARY lines; with #3600 it closes #3567's observability gap; no workflow file.

Verdict line: 3/3 PASS, independent. Arming.

@noahgift
noahgift enabled auto-merge September 21, 2026 05:38
@github-actions

Copy link
Copy Markdown

§13.11 rung 1 — quorum shadow verdict

S13-SHADOW pr=3653 head=0539924489ed6d5df4ac65f9aa10a48d2b18b713 verdict=REFUSE class=Q1 arm_rc=1

Shadow mode: this records a verdict and merges nothing. A refusal
to arm is not a block (§13 adds zero rows to §7) — the pull request is
exactly as green as it was.

@noahgift

Copy link
Copy Markdown
Member Author

Disarmed by the cop (07:35Z): this PR is integrated in the 0.69 release batch #3669 (one CI run, one queue slot, roadmap.yaml resolved once), at the operator's direction to batch. Its receipt is in the batch tree unchanged. It closes as landed-in-#3669 when the batch merges. Don't push here; changes go to release/0.69-batch.

@noahgift

Copy link
Copy Markdown
Member Author

Landed in #3669 (squash a877fa056, merged 2026-09-21T10:50:29Z). This PR's receipt stands as the constituent review; the batch folded its commits verbatim. — cop

@noahgift noahgift closed this Sep 21, 2026
@noahgift noahgift mentioned this pull request Sep 21, 2026
@noahgift
noahgift deleted the PMAT-3651-guard-tree-surface-unmeasured branch September 23, 2026 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

guard_tree.sh drops a passing guard's output — an UNMEASURED exit-0 reads as PASS in every CI log, so #3567's verdict can never be observed

1 participant