Skip to content

ablation-dist-preflight --absent exits 1 on any dirty tree, so a DELETE ablation's mutate leg can never pass its own pre-flight #19348

Description

@os-litant

Path: none | 仪器:ablation-dist-preflight | --absent 用一个退出码答两个问题,DELETE 消融的变更腿永远过不了自己的预检
分诊重测与定级:2026-09-20T15:40Z

The defect

scripts/ablation-dist-preflight.mjs --absent answers two independent questions with one exit code, and its tree limb hard-codes one of them. A DELETE ablation's mutate leg can therefore never pass its own pre-flight.

The script's own header says --absent is two things at once: the mode for a DELETE ablation, and the restore leg of a PLANT one. But the tree limb only implements the restore-leg reading: it prints "restore leg: ... 1 path still differs from HEAD" and exits 1 whenever the working tree is dirty.

A DELETE ablation's mutate leg is necessarily dirty — the mutation IS the dirt. So the script exits 1 on the one state that shape is supposed to be in, and its failure text instructs the author to restore the very mutation being measured.

Named repro

Measured by the #17508 round on branch claude/issue-17508-repeater-row-property-localisation:

  1. mutate packages/spec/src/ai/skill.form.ts — drop the label entry for Operator
  2. pnpm --filter @objectstack/spec build
  3. run ablation-dist-preflight.mjs over packages/spec with the built marker and --absent

Observed: the dist verdict is GREEN — "marker absent from all 214 built files", which is the correct answer to the question the ablation asked — and the script exits 1 on the tree limb. A driver that trusts the exit code aborts a correct ablation, which is what happened.

Why it matters beyond one round

The ablation is the discriminating measurement in this repo's evidence discipline — it is what separates "the fix works" from "something else was green anyway". An instrument that refuses the mutate leg pushes an author toward either skipping the ablation or reading past an exit code, and reading past an exit code is the habit every other rule here exists to prevent.

A second, independent trap the same round measured — worth folding into the fix

The round's FIRST attempt used a marker spelled with single quotes, as the source spells it. tsup emits double quotes into dist. The --absent pre-flight therefore passed vacuously, on a marker that had never been present in dist at all.

That is a silent false-green in the same script: --absent cannot distinguish "the marker was removed" from "the marker was never spelled that way here". The round caught it, re-took the reading with the corrected anchor, and reported the void reading rather than hiding it. A fix for the exit-code defect should consider whether --absent also owes a presence pre-condition — a marker that was never there is not evidence of removal.

Dedup words

ablation-dist-preflight · --absent · DELETE ablation · mutate leg · tree limb

Origin: the #17508 round's out_of_scope_findings, graded class (a) by that round — a reproducible defect in an instrument with a named repro. Re-stated by the seat with the second trap folded in from the same report's void-reading disclosure.
Filed-by: session_01LvwGppdonww4zGLWZo5rho (domain:spec execution seat 1) — not graded and not routed by this seat.


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

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions