Skip to content

RE-CUT: Split the templates out of gauntlet.md into templates.md - #10

Merged
AmazingAng merged 1 commit into
AmazingAng:mainfrom
drmikecrowe:contrib/templates
Aug 17, 2026
Merged

RE-CUT: Split the templates out of gauntlet.md into templates.md#10
AmazingAng merged 1 commit into
AmazingAng:mainfrom
drmikecrowe:contrib/templates

Conversation

@drmikecrowe

@drmikecrowe drmikecrowe commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

⚠️ Re-cut — the description below is the original and no longer matches the diff. It is kept as written so your review still reads against the text it answered. See the re-cut comment for what this PR now contains: restacked off main, wall-clock and the Config line dropped, no dependency on #9.


⚠️ Stacked on #9 (config/isolation). Until that merges, this PR's diff shows #9's commits too. Review the top commit only, or merge #9 first and this will shrink to its own +238/-74.

gauntlet.md had become two documents: how to run each layer, and the fill-in forms for SPEC and EVIDENCE. They're read at different moments — the layer guidance while building the gauntlet, the templates while writing the two artifacts the human actually reads — and the file gets loaded in full either way.

So references/templates.md now holds the Gherkin scenario template, the SPEC template, the EVIDENCE template, and the tracker roll-up. gauntlet.md keeps a two-line pointer and drops ~70 lines; SKILL.md's EVIDENCE step points at the new location.

The templates also gained the fields this fork found it needed while running the loop:

  • A Revisions section in SPEC. Spec drift is supposed to be visible, which needs somewhere to write it down.
  • A Config line and per-layer wall-clock in the EVIDENCE header.
  • "Layers not run" split into N-A / UNAVAILABLE / SUBSTITUTED, because those mean very different things to a reader — no such surface here, tool missing and nothing ran, versus something else ran and here's what it can't detect.
  • A Dismissed-findings section. Fixes are self-evidencing; dismissals are not. One line each, naming the command or file:line that disproves the finding.
  • A Structural-blind-spot line naming the layer this project cannot run at all (e.g. "the suite never exercises the container runtime, so nothing here is evidence about deployment behaviour").

Your Independent-verification EVIDENCE fields from #5 move across intact, with a note that they're prose and get no row in the layer table.

If you'd rather keep the templates inline in gauntlet.md, the added fields are separable — say the word and I'll re-cut this as a fields-only PR.


Part of a series from a fork that has been running this skill daily (drmikecrowe/old-coder).

🤖 Generated with Claude Code

@AmazingAng

Copy link
Copy Markdown
Owner

Taking you up on your own offer: yes to the fields-only re-cut, independent of #9.

Take

  • N-A / UNAVAILABLE / SUBSTITUTED. The current "skipped layers" collapses three things a reader needs to tell apart — no such surface here, versus tool missing and nothing ran, versus something else ran and here is what it cannot detect. The second and third are very different confidence claims and right now they read identically. This one I would take even on its own.
  • Dismissed findings. "Fixes are self-evidencing; dismissals are not" is the right principle, and one line each naming the command or file:line that disproves the finding is the right cost. It is the same rule the verification protocol already applies to attack lists: say what you tried, not only what you found.
  • The structural blind-spot line. Naming the layer a project cannot run at all is exactly the kind of thing that otherwise reads as absent rather than accepted.
  • The Revisions section in SPEC. Spec drift is required to be visible and there was nowhere to write it. Fair.

The templates split itself is fine by me if it comes independent of #9 — you are right that gauntlet.md is two documents read at different moments.

Leave out

  • Per-layer wall-clock. EVIDENCE is one of the two artifacts a human actually reads, and we just pruned spec.md from 339 to 255 lines for exactly that reason. Timing per layer is diagnostics, not evidence about the code; it costs a column in the table everyone must read to buy information almost nobody acts on.
  • The Config header line. Depends on RE-CUT: Do not mutate the user's working tree to do your work #9's config format, which is deferred pending a positioning decision — see my note there.

One caution on the whole direction

Every field added to the EVIDENCE template is paid for by every future report, and the human reading it has a fixed attention budget. The four above earn it because each one lets a reader distinguish two states they would otherwise conflate. I would hold that as the bar for anything further: a field earns its place if its absence would let a reader believe something false, not if its presence would be nice to have.

…ree ways

gauntlet.md had become two documents read at different moments: how to run each
layer, and the fill-in forms for SPEC and EVIDENCE. The file is loaded in full
either way. `references/templates.md` now holds the Gherkin scenario template,
the SPEC template, the EVIDENCE template, and the tracker roll-up; gauntlet.md
keeps a pointer and drops 74 lines.

Four fields come with it, each earning its place by the same test -- its absence
lets a reader believe something false:

- "Skipped layers" becomes "Layers not run as specified", split into N-A /
  UNAVAILABLE / SUBSTITUTED. One list collapses "no such surface here", "tool
  missing, nothing ran", and "something else ran, here is its blind spot" into
  one word. Those are three different confidence claims that currently read
  identically.
- A Dismissed-findings section, one line each naming the command or file:line
  that disproves the finding. A fix carries its own evidence; a dismissal
  carries none, so "not a real problem" and "did not check" are
  indistinguishable.
- A Structural-blind-spot line, naming the layer this project cannot run at all
  -- otherwise it reads as absent rather than accepted.
- A `## Revisions` section in SPEC. The spec is required to be append-only and
  revised visibly, and there was nowhere to write the revision.

The demo's evidence.md carried the exact conflation this fixes: mutmut replaced
by tools/mutants.py (SUBSTITUTED) and shellcheck never run (UNAVAILABLE) sat
under one "Skipped layers" heading, reading as the same claim. Relabelled; no
numbers change, and evidence.md is not in source_state.sh's hashed set, so the
recorded tree hash still holds.

Not included, per the review on AmazingAng#10: the per-layer wall-clock column, and the
Config header line that depended on the deferred config format.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@drmikecrowe drmikecrowe changed the title Move the templates out of gauntlet.md into templates.md RENAMED: Split the templates out of gauntlet.md into templates.md Aug 17, 2026
@drmikecrowe

Copy link
Copy Markdown
Contributor Author

Re-cut per your review. The description at the top of this PR is the original one and no longer matches the diff — this comment is what the PR now contains.

Restacked. The branch is cut fresh off main and carries one commit. #9's setup.md and everything config-shaped is gone from the diff; this no longer depends on the deferred positioning decision.

Dropped, per your review: the per-layer wall-clock column, and the Config header line.

What it carries now — the split, plus the four you named:

  • references/templates.md holds the Gherkin scenario template, the SPEC template, the EVIDENCE template, and the tracker roll-up. gauntlet.md keeps a pointer and drops 74 lines. SKILL.md points at the new file from both the SPEC step and the EVIDENCE step.
  • "Skipped layers" becomes "Layers not run as specified", split N-A / UNAVAILABLE / SUBSTITUTED.
  • Dismissed review findings, one line each naming the command or file:line that disproves the finding.
  • Structural blind spot, naming the layer this project cannot run at all.
  • ## Revisions in the SPEC template.

Each of the four carries its argument in the file itself rather than only here, since the file is what a future contributor reads when deciding whether a fifth field is worth it.

What these do when they are broken. Straight answer: they are prose fields with no checker, so a writer who wants to misreport still can. What the split changes is the shape of the misreport. "Skipped: mutation" is vague enough to be written without deciding anything; N-A requires claiming this project has no such surface, UNAVAILABLE requires naming a missing tool, and SUBSTITUTED requires naming what ran instead and what it cannot detect. The reader can falsify any of those three against the repo. They cannot falsify "skipped". That is the whole gain, and it is smaller than a check — I would rather say so than imply these are gates.

A fifth field, which you did not name — flagging it rather than slipping it in. The EVIDENCE header gained one line:

- Tracker: <issue id — roll-up posted | roll-up written to ROLLUP.md, not
  posted (nobody present to approve it) | none: SPEC named no issue>

It exists because the tracker roll-up is in this PR and is otherwise unreportable: without the line, "a roll-up was posted", "one was written and deliberately withheld", and "the SPEC named no issue" are indistinguishable, and the first is an outward-facing action that happened. That is the bar you set, applied to a field you did not accept — so it is your call, and striking it costs this PR nothing. Say the word and it comes out.

One change outside the skill directory. demo-rate-limiter/evidence.md had the exact conflation this fixes: mutmut replaced by the scripted tools/mutants.py, and shellcheck never run, sat under one "Skipped layers" heading reading as the same claim. Relabelled to SUBSTITUTED and UNAVAILABLE. No numbers change, and evidence.md is not in source_state.sh's hashed set (src tests tools examples pyproject.toml requirements-dev.txt spec.md .github/workflows), so the recorded tree hash still holds. Happy to drop this hunk if you would rather the demo artifact stay as-shipped.

READMEs left alone deliberately. Both file-tree lines read SKILL.md + references/gauntlet.md and already omit verifier.md and verifier-case-study.md, so that line is shorthand rather than an inventory; templates.md becomes the third reference file it does not list. Tell me if you would rather it become a real listing and I will update both READMEs.

@drmikecrowe drmikecrowe changed the title RENAMED: Split the templates out of gauntlet.md into templates.md RE-CUT: Split the templates out of gauntlet.md into templates.md Aug 17, 2026
@drmikecrowe
drmikecrowe marked this pull request as ready for review August 17, 2026 10:23
@drmikecrowe

Copy link
Copy Markdown
Contributor Author

@AmazingAng -- Ready for more feedback

@AmazingAng
AmazingAng merged commit b70da7e into AmazingAng:main Aug 17, 2026
1 check passed
AmazingAng added a commit that referenced this pull request Aug 17, 2026
Three adjustments to the templates split, kept separate from the merge so
the contributor's commit lands as written.

- Defer tracker linkage. The roll-up section, the SPEC `Issue:` field and the
  EVIDENCE `Tracker:` line are removed for the same reason `.old-coder.toml`
  was deferred in #9: adding tracker integration changes what this skill is,
  and that is a positioning decision that should be made on its own rather
  than arriving inside a technical PR. The four accepted EVIDENCE fields do
  not depend on it. Nothing here is a quality judgement on the writing.

- Move "commit the spec at approval" into SKILL.md step 1. It is a process
  rule, not a template, and spec rules living in two files will drift. Its
  argument — a compaction loses the approved contract while the code it
  authorized remains — is worth keeping.

- Say "files the gauntlet will add **by path**" in step 1, matching the
  template. The two wordings had already diverged.

Also correct a sentence in the demo evidence report that this PR falsified:
commits after `8b88bda` no longer touch only `skills/`, since #10 edits the
report itself. The tree-hash binding is unaffected — `evidence.md` is not in
the set `source_state.sh` hashes — but the stated reason was wrong.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants