Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .claude/agent-memory/atomic-planner/MEMORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
- [#614](project_614_store_root_leak_plan_seams.md) — AC25 net non-growth; behavior-preserving seam phase reconciles fail-before with a signature change; net48 `IsNullOrWhiteSpace` doesn't narrow (`archiveRoot!`)
- [#464 R3/R4](project_464_efc_controller_plan_seams.md) — additive-only file grows, budget a ceiling not a shrink; non-comment literal counts; a phase-N count must survive phases 1..N-1 deletions
- [#677 R1–R8](project_677_keyboard_focus_leak_plan_seams.md) — ctor param REJECTED (5 reflection-arity tests); typed harness for compile-red; internal 9-arg ctor, never ambient SetSynchronizationContext; per-file non-vacuity floors
- [#635](project_635_reflective_caller_audit_plan_seams.md) — evidence-only audit: tracked plan inflates its own sweep; scan hits its own pattern list; spec said six sites, tree has eight; pathspec breadth inflates a count
- [#680](project_680_menu_mode_plan_seams.md) — HostTests.cs 499 not 500; set-difference format gate; TRX 5-shape identifiers, `grep -a`; append-a-dated-literal discriminator; post-merge remediation: exact line arithmetic — the review's "optional" fallback was load-bearing (501 vs 500)

## Plan-structure traps
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
name: project-635-reflective-caller-audit-plan-seams
description: Issue #635 evidence-only audit plan — self-scanning gates, tracked-plan-inflates-its-own-sweep, spec-vs-tree site-count mismatch, and pathspec breadth changing a reported count
metadata:
type: project
---

Planning seams found while authoring the issue #635 residual-reflective-caller audit plan (a
Markdown-only, evidence-producing audit that modifies no `.cs` file).

**Why:** four defects were only visible by re-deriving the delegation's figures against the tree; each
would have failed at execution.

**How to apply:** on any plan whose deliverable is a repository-wide search recorded as evidence.

1. **A tracked plan file inflates its own sweep.** The plan is tracked under the docs tree and quotes
every identifier it searches for, so a `git grep` partition that includes the docs tree returns
more hits after the plan is written than the base measurement the caller supplied. Never assert
that partition's total; assert the classification identity (per-category counts sum to the printed
total, the "genuine caller" category is `0`) and record the reason the total moved.

2. **A host-identity / forbidden-token scan hits its own pattern list.** Both the scan's artifact and
the plan file quote the patterns verbatim, so a zero-hit gate over the feature folder is
unsatisfiable. Carve out exactly those two files by name filter, state the reason, and verify by
hand at planning time that they carry no real leak.

3. **Enumerate from disk, not from the index, for a late-phase folder scan.** `git ls-files` misses
the Phase 4 artifacts that are still untracked; `Get-ChildItem -Recurse -File -Name` covers both
and prints folder-relative names, so no resolved provider path (which carries the account name)
reaches the artifact. `Select-String`'s `MatchInfo.Path` is resolved and absolute — print the
enumeration variable instead.

4. **A spec's site count can disagree with the tree.** Spec AC-9 named "six variable-argument
reflection call sites"; the tree has eight against `typeof(QfcCollectionController)` (five
`GetField` plus one `GetMethod` in the test-support partial class, plus one in the navigation-digits
test file and one in the main test file). Enumerate the mechanically derived superset, note that it
names each of the spec's six individually and therefore discharges the AC, and record the
discrepancy as an evidence note rather than editing an approved spec.

5. **A git pathspec is broader than a language.** `-- 'QuickFiler/*'` reaches tracked `.csproj`,
`.csproj.bak` and `packages.config`, so a `System.Reflection` count taken that way exceeds the
first-party `.cs` count (32) that a delegation may have measured. Assert a floor plus a total
classification whose classes include a manifest-reference class, never the bare number.

Related: [[zero-hit-grep-gates-need-carveouts]], [[absolute-counts-in-shared-files-go-stale]],
[[acceptance-edits-must-be-false-before-true-after]].
1 change: 1 addition & 0 deletions .claude/agent-memory/feature-review/MEMORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@
- [489-review-residuals](project_489-review-residuals.md) — cycle-1 reaudit GO/0 blocking; RC-1 cured (RED TRX committed with test, fix next commit = provable RED-first); commit-per-phase vs single-commit plan text judged on intent; amend the referenced table when an AC delegates to it
- [493-review-residuals + msbuild-log gate adjudication](project_493-review-residuals-and-msbuild-log-gate-adjudication.md) — PASS/0 blocking; how a structurally unsatisfiable msbuild-log byte-equality gate was adjudicated without downgrading the AC
- [680-review-residuals](project_680-review-residuals.md) — closed GO c3; leak class recurred 3x (c2 committed TRX, plan draft, pass-2 QA's OWN fresh vstest output) — fresh vstest TRX is born unsanitized, require in-task sanitize; re-run host sweep every cycle
- [635-review-residuals](project_635-review-residuals.md) — GO/0 blocking; Markdown-only evidence audit; drift-invariant "total classification with one empty category" validated at a 3rd commit (2229->2337->2474, identities held); hook payload key is `output`; session-cwd mirror needed again
- [677-review-residuals](project_677-review-residuals.md) — PASS/0 blocking; compile-red RED-first equivalence; 70.7% modified-file dispositioned non-blocking (below the #230 bar); owed: analyzer HintPath-skew + SetupDisposal-debt promotions; post-677 baseline 0.852804/0.792300

## Artifact hygiene
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
name: 635-review-residuals
description: Issue #635 reflective-caller audit review — GO/0 blocking; how a Markdown-only evidence-audit branch was verified, and the drift-invariant acceptance-condition pattern worth reusing
metadata:
type: project
---

Issue #635 (`bug/issue-468-residual-reflective-caller-risk-635`, head `73bd8082`) reviewed
2026-08-29: **GO, 0 blocking, 15/15 AC PASS**. Markdown-only diff, 32 paths, `NON_MD_COUNT: 0`.

**Why:** the item is an evidence-producing audit discharging issue #468 AC-16. Its claims are negative
results, so the review risk was an acceptance condition that could not have failed — not a code defect.

**How to apply:**

- **The drift-invariant acceptance-condition pattern is validated and worth reusing.** Partition B's
hit total moved 2229 (spec base) -> 2337 (execution) -> **2474 (my review head)** purely from prose
accretion, while both acceptance identities (`CAT_D + CAT_E = TOTAL`, `CAT_G = 0`) held at all three
commits. Expressing the condition as a total classification with one empty category, never a hit
count, is what made the evidence survive. A count-based condition would have been red twice over.
- **Asserted vs non-asserted figures is the right split.** `SCOPE_FILES 683`, `AC16_SIX_EXTENSION_SCOPE
153`, `TRACKED_CS 1599`, Partition C `31` all reproduced exactly at review head, because the
Partition A pathspec excludes `docs/*` and `.claude/*` — the only two trees this branch writes into.
Drift in a deliberately non-asserted reference value is not a blocking finding.
- **Verify the non-vacuity control actually discriminates.** P1-T2 ran the identical pathspec for a
present token and returned 13 hits / 4 files, two of them (`QuickFiler/Notes/notes_interface_hierarchy`,
extensionless; `QuickFiler.csproj.bak`) unreachable by any extension-based search. That is what makes
a zero a measurement rather than an artefact.
- **Three claims had narrower supporting measurement than the claim; all held under the broader test I
ran.** (1) inventory used `Delegate.CreateDelegate`/`Activator.CreateInstance` vs the spec's bare
`CreateDelegate`/`Activator.` — bare forms also prod=0; (2) `dynamic` late binding never enumerated as
a mechanism, and it is the one class in the same family as the stated limit (runtime-assembled names)
— verified absent (1 prod comment hit, 0 in test tree); (3) assembly `ComVisible(false)` asserted to
bind every type — verified no per-type `ComVisible(true)`/`ClassInterface`/`ProgId`. Run the broader
form before accepting a narrowed pattern.
- **AC-9 six-vs-eight:** spec names six variable-arg sites, mechanical derivation yields eight (7
`GetField(` + 1 `GetMethod(`), so no six-subset is identifiable. Recording (not editing the approved
spec, not silently picking a subset) was correct; AC discharged by superset. **Owed: maintainer
amendment of the spec baseline figure at merge.**
- **The `//` ordering row is real:** `QuickFiler/Legacy/QuickFileController.cs:20` contains
`MethodBase.GetCurrentMethod()` but its first non-whitespace token is `//`, so ordered tests put it in
L3 not L1. Verified at character level.
- **cwd hazard recurred** (see [[review-worktree-differs-from-session-cwd-mirror-artifacts]]): hook
exits 0 from the review worktree but **fails from the session cwd** `TaskMaster-wt/2026-08-29T00-11`,
which lacks the feature folder. Mirrored the 3 artifacts there; both cwds then exit 0. Hook payload
key is **`output`**, not `agent_output`.
- **Coverage gate correctly not exercised:** no `artifacts/pr_context.summary.txt` -> `changedLanguages`
empty -> only the 3 path checks run. Zero changed files in every coverage language, so no coverage
artifact was emitted; emitting one would have fabricated a measurement and exposed an unrelated
repo-wide threshold.
Loading
Loading