From 7b50682eace42570827fbbbac558f935cddb4e0c Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Sat, 29 Aug 2026 22:53:36 +0200 Subject: [PATCH] docs(ci-reds): record empty prune-output sweep red as U13 The head-exact review gate reached sweep with six green stages, then `skipped_directories_are_reported_with_a_reason` observed empty child stdout. The durable failure cannot say why because the row discards the child status and stderr. Record the exact signature, the structurally unrelated branch diff, and the isolated-selector and full-binary green reruns at their actual strength: intermittence only. Diagnostic hardening remains a separate lane. --- docs/active-work.md | 9 +++++++++ docs/ci-red-signatures.md | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/docs/active-work.md b/docs/active-work.md index 2f542bc..581b6dc 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -341,6 +341,15 @@ from #171 and #215. id**; they are not duplicated here, because a docs commit answering a review moves both, and a ledger line naming them is stale the moment it is written — the lesson §5b learned twice. +- **Review follow-up found U13, separately recorded.** On signed head + `756c2b8`, gate `20260829T171606Z-1087848` was 7/8: `07-sweep` + reddened only + `gate_script_acceptance::skipped_directories_are_reported_with_a_reason`. + The child command's stdout was empty, but the row discards its stderr + and status, so the mechanism is unrecoverable. The exact selector and + the full 36-test binary both passed immediately afterwards — + intermittence only. This lane changes neither the gate script nor + that acceptance binary; diagnostic hardening is a separate lane. - **Still owed, separately:** `workflow_dispatch` on `ci.yml`, and U9's discriminating control — pin test-binary concurrency to 1, then load a lone `--lib` binary — which has been named since 2026-08-09 and diff --git a/docs/ci-red-signatures.md b/docs/ci-red-signatures.md index 255767f..86859b6 100644 --- a/docs/ci-red-signatures.md +++ b/docs/ci-red-signatures.md @@ -1076,3 +1076,20 @@ discriminating control U9 named is STILL UNRUN**: pin test-binary concurrency to 1, and separately load a lone `--lib` binary. Four incidents is enough evidence that the family will keep costing review rounds until someone runs it. + +### U13 — gate prune-reporting row receives empty child stdout in `sweep` + +Recorded during PR #244 review, 2026-08-29, on signed head `756c2b8`. +The first six gate stages were green; `07-sweep` produced this one red; +`08-diff-check` remained green. + +| field | value | +| --- | --- | +| **selector** | `--test gate_script_acceptance skipped_directories_are_reported_with_a_reason` | +| **job / step** | local (Linux), `scripts/gate` step `07-sweep`, log `20260829T171606Z-1087848` | +| **required fragments** | `skipped_directories_are_reported_with_a_reason` + `the unmarked directory must be named with its reason; output was:` followed by empty output | +| **status** | **one occurrence; exact selector and the full 36-test binary both green on immediate rerun** | +| **what IS established** | the test observed empty stdout from its `scripts/gate --prune` child even though its fixture had created an unmarked lookalike which a successful prune must name. The row discards the child's stderr and success status (`let (out, _, _)`), so the durable failure cannot distinguish wrong successful output from a refused or failed child invocation | +| **what is NOT** | any mechanism. Another row in the same test binary mutates shared git-worktree metadata, but concurrent execution is only a candidate; this occurrence did not capture the child status or stderr needed to support it | +| **why this branch is excluded** | the lane changes two assertion-message strings and three docs. `scripts/gate` and `tests/gate_script_acceptance.rs` are byte-identical to the base; the `async_runtime` edit is inside its unit-test module, and the other Rust edit belongs to a different integration-test binary | +| **next occurrence** | preserve the child success status and stderr in the assertion before rerunning. A green rerun establishes intermittence only; it cannot reconstruct why stdout was empty |