docs(todo): TRIM close-out audit — CONCERNS, 5 veto findings closed - #77
Merged
Conversation
…tched practice The Plan Index footer still described the convention used by plans 001-007: docs commit on a shared `TRIM` integration branch, each implementation branching off it. That was dropped at TRIM-008 and the note was never updated. Plans 008 and 009 branched off `main` and PR'd to `main` (#75, #76), carrying docs and implementation in one PR, for two reasons: CI's `pull_request` trigger only watches `main`, so a PR into `TRIM` got no build at all; and holding docs on a long-lived branch is what let TRIM-005's falsified diagnosis sit unverified. The `TRIM` branch itself is now gone -- merged via PR #74 on 2026-08-13, then deleted 2026-08-14 after confirming it held 0 commits not in `main`. It was stale, not pending; nothing was lost with it. Corrected now because the close-out audit reads this section for container integrity, and a stale convention note is exactly the kind of thing it would flag -- or worse, believe. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ngs closed
Whole-arc Step 7 gate. Verdict CONCERNS; every veto-tier finding re-derived at
the keyboard before being accepted, and all held.
V1 Two integration tests failed. The auditor was asked to challenge the "known
flake" label rather than accept it, and did -- tracing the relay path to a
git log that stops at v1.4.0, the mechanism to Task.Run/Task.Yield against a
2s poll, and the condition to two concurrent TFM hosts running while MSBuild
still compiled the Blazor examples. Closed by re-run: 561+561, 0 failed.
The arc does not close on an unexplained red.
V2 The AC6 carve-out was dishonest in the one place a generator editor reads
first. InterfaceFactoryRenderer.cs:260 still said "the trimmer removes the
entire body" -- exactly what H1 measured insufficient for async. That leg
emits the guard inline (zero Core methods) and still names {ImplName}Factory.
todo.md claimed the retraction landed in "all three" places; it landed in
five and missed this sixth. Fifth occurrence in this arc of building a doc
list from an inventory instead of grepping the artifacts.
V3 AC4's release step had no enumerated obligations. Nine artifacts describe
v1.7.0 behaviour while the package is 1.6.1 -- two in undated present tense
on the published site, so a current consumer is told their [Execute] bodies
are protected by a holder that ships in no installable version. And the
synchronous-throw behaviour change lives only in a Done plan's prose, under a
`fix:` commit that release-note scanning would render as a patch bug-fix.
Both now carried by new row 22.
V4 Deferred item 4's own trigger fired inside the arc and the row was never
updated -- it still read "not introduced by this arc" after TRIM-009 changed
the guard's shape AND its observable semantics. Now QUEUED.
V5 TRIM-008 was Done with 9 of 10 acceptance bullets unticked. All satisfied;
all now ticked.
Callouts fixed inline: a gate header contradicting its own code two lines below,
a stale release-hold row, an absolute CONTRACT line where one leg is the
exception, and AC5's self-cancelling wording. Two new rows queued (22, 23);
item 11 widened. Row 23 is another check that cannot go red -- inside the very
test class this arc has called a flake for five weeks, which makes item 10's
frequency an undercount by construction.
AC1-AC3 and AC6 verified closed. AC4/AC5 correctly still open: what remains is
the v1.7.0 cut.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Runs the whole-arc close-out audit (Step 7) for the TRIM todo and closes every veto-tier finding. Documentation and container only — no generator behaviour changes, and no source change beyond one corrected comment.
Verdict: CONCERNS — 5 veto-tier, 10 callout-tier. Every checkable finding was independently re-derived at the keyboard before being accepted; all held. Record:
reviews/closeout-audit.md.The finding that mattered most
V2 — the AC6 carve-out was dishonest in the one place a generator editor reads first.
InterfaceFactoryRenderer.cs:260still asserted "the trimmer removes the entire body" — precisely the claim TRIM-009's H1 measured insufficient forasync. That leg emits its guard inline (zeroCoremethods in its emitted output) and still names{ImplName}Factoryin its registrar attribute, so it keeps the exact shape TRIM-009 proved leaks.todo.mdclaimed the retraction had landed in "all three" places. It had landed in five and missed this sixth — the only one inside the generator.This is the fifth occurrence in this arc of building a doc list from an inventory instead of grepping the artifacts. It is now recorded as a pattern rather than a one-off, because restating the lesson has demonstrably not fixed it.
Other veto-tier findings
git logstopping at v1.4.0 (before the arc began), identified theTask.Run/Task.Yieldmechanism against a 2s poll deadline, noted both failures burned exactly[2 s], and observed two concurrent TFM hosts running while MSBuild still compiled the Blazor WASM examples. Closed by re-run: 561+561, 0 failed, both TFMs. The arc does not close on an unexplained red.v1.7.0behaviour while the package is1.6.1, two of them in undated present tense on the published Jekyll site — so a current consumer is told their[Execute]bodies are protected by a holder that ships in no installable version. The container tracked the inverse exposure (docs behind code) exhaustively and this one not at all. Also: TRIM-009's synchronous-throw behaviour change lives only in a Done plan's prose, under afix:-prefixed commit thatCLAUDE.md's commit-scanning release process would render as a patch bug-fix. Both now carried by new deferred row 22.Donewith 9 of 10 acceptance bullets unticked. All were satisfied (the auditor traced each); all now ticked.Callouts
Fixed inline: a gate header still reading
ClassAsyncBody_MARKER"expected PRESENT" while the code two lines below asserts its absence; a stale release-hold row;FactoryAttributes.cs's bolded CONTRACT stated absolutely where one leg is the exception; and AC5's self-cancelling wording, which demanded consumer proof and then made itself non-binding in its own parenthetical.Queued as new rows: row 23 — two
FactoryEventRelayTeststests pass vacuously under exactly the condition that reddens their siblings (they wait onInvocationCount == 1, then assert onlyAssert.Empty). Another check that cannot go red, inside the very class this arc has called a flake for five weeks — which makes item 10's "~3 of 8 runs" an undercount by construction. Item 11 widened: TRIM-009 routed its Step 7B to a row whose rationale doesn't cover a behavioural change.What the audit verified
The auditor's fairest observation, worth keeping: earlier plans are honest but structurally weaker than the recent two — TRIM-001/002/007 ran real negative controls that were never archived, so a later reader cannot reproduce them the way
009-evidence/allows.Also in this PR
The arc's branching note still described the convention used by plans 001–007 (a shared
TRIMintegration branch). That was dropped at TRIM-008 and never updated — corrected, with the reason recorded: CI'spull_requesttrigger only watchesmain, so a PR intoTRIMgot no build at all, and holding docs on a long-lived branch is what let TRIM-005's falsified diagnosis sit unverified for a month. TheTRIMbranch itself has been deleted after confirming it held 0 commits not inmain.Verification
Docs and container only.
build-main.log0 errors; unit 614+614; integration 561+561 on re-run; Design 86+86; trimming gate exit 0; harness exit 0. Evidence archived underreviews/closeout-evidence/.What remains after this merges
AC4 and AC5 are correctly still open. The remainder is the release itself: bump
src/Directory.Build.propsto1.7.0, authordocs/release-notes/v1.7.0.mdincluding the synchronous-throw behaviour change with migration guidance (row 22 — commit-prefix scanning will not surface it), update the release-notes index, tagv1.7.0, let CI publish. AC4 closes there; AC5 is discharged by the release, with consumer rollout tracked in zTreatment PCB-003.🤖 Generated with Claude Code