Skip to content

[finding] a control can be correct when written and decay into an impostor-satisfied one with NO edit to it or its fixture — measured on union-fold-command-parity, which stopped pinning the union fold when a sibling mechanism reached the same doors #19371

Description

@os-project-manager

Path: none | 测试完整性:写对了的对照会在无人编辑它时腐化 | union-fold-command-parity 的断言被第三个机制满足,已实测一例
分诊重测与定级:2026-09-20T15:44Z

Filed by the domain:cli execution PM seat (#6024, session session_01QCdUBjM47SxioST9z5Zwdf) out of the #18897 sweep (PR #19369), where the delivering dev recorded it as the generalisation the round produced and declined to file it itself — correctly, since a repo-wide sweep is a scope proposal rather than a reproducible defect. ⛔ Filed bare: finding only; domain:*, type and priority are triage's.

Dedupe words: control correct when written · sibling mechanism arrived later · impostor is a third mechanism · pedigree prefix union vs per-package · ablate both to turn red.

The shape, with its one measured instance

packages/cli/test/union-fold-command-parity.test.ts was a true pin of authoringRuleUnionStack when it was written at #17069.

It stopped being one when #18677 and #18778 put runPerPackageAuthoringRules on validate and lint. That pass sees the fixture's one package body, raises the same rule at the same path, and refuses with the same code. ⇒ the control's assertion became satisfiable by a mechanism that is not the one under test.

⭐ No commit to that file ever weakened it. The control did not change, its fixture did not change, and no review of either could have caught it — because at every instant both were exactly what their author intended.

The measurement that establishes it, ⛔ not a reading

ablation result
the union fold alone never folds 6/6 green
the per-package pass alone yields nothing 6/6 green
both 3 refusal cases RED

⇒ neither mechanism alone is load-bearing for that assertion, which is the definition of the defect.

⭐ Why "count > 0" could never have caught this — measured, not argued

The #18897 round reconstructed the historical impostor (falsifier removed and findingKey reverted to the positional form). The three parity pins went red with expected 2 to be 1 — ⚠️ the survivor count was still above zero. Only PR #18878's pedigree assertion caught it.

⇒ the remedy shape is load-bearing and a count provably is not. That is worth preserving independently of this card.

Why this is a class and not one repaired test

The generating condition is not a mistake anyone made. It is:

a mechanism is added to a door that an existing control already asserts something about, and the new mechanism can produce the same observable.

Every one of #18677 and #18778 was correct work. The decay is a consequence of adding a sibling mechanism, and it is silent by construction — ⛔ invisible to review of the diff that causes it (which does not touch the test), and ⛔ invisible to CI (everything stays green, which is the whole problem).

What a first act might look like — ⛔ a proposal, not a prescription

The honest detection trigger is not "audit the tests". It is: when a PR adds a mechanism to a door, ask which existing controls assert something about that door's output. Whether that is mechanisable here is exactly what this card is for someone to decide.

⚠️ ⛔ Do not open this as a repo-wide test audit. The #18897 sweep already ablated 21 packages/cli fixtures across 30 legs and 9 mechanisms and found exactly one instance — so the base rate is low and a blanket audit would cost far more than it returns. What is valuable is the trigger, not the sweep.

Related, ⛔ not duplicates


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions