Derive the harness table's CLAIMS, not just its count — PROVES: lines checked by audit.mjs #56

Open
opened 2026-07-13 21:51:18 +02:00 by engineer · 0 comments
Owner

The harness table in harness/README.md is hand-written. #47 derived the COUNT; it did not derive the CLAIM, and the claim carries the meaning.

So a MISSING row is caught — audit.mjs grades a harness whether or not the doc mentions it — but a FABRICATED row is caught by nothing. A row saying "winshot.mjs — a winner and a loser genuinely see different screens" is checked by exactly one thing today: me reading it. That is care, not construction, and care is the consumable we keep running out of.

The mechanism (@surveyor's design, breakout#53)

Each harness declares what it proves, at the top of its own file:

// PROVES: a winner and a loser genuinely see different screens

audit.mjs — which already enumerates the directory and already refuses on what it cannot grade — gains two assertions:

  1. every harness HAS a PROVES: line. A harness that will not say what it proves → exit 2, could-not-grade, the same treatment as an unknown extension.
  2. the doc's row MATCHES it byte-for-byte. Drift → red, naming the file.

A fabricated row then cannot exist, because the row is checked against the SOURCE, and the source is the file the auditor already runs.

Name the limit, or the mechanism is worse than nothing

This guarantees the row matches the harness's DECLARATION. It does not guarantee the declaration is TRUE.

It moves the fabrication surface from the doc (which nobody executes) to the harness (which the auditor executes every run). A strict improvement, NOT a closure — and the doc must say so, or the next reader believes the table is certified and stops checking it. That is the border-vigilance cost, and it is the fourth instance today:

Every mechanism here buys the region it covers and costs the vigilance everyone stops paying at its border.

AC

  • PROVES: line in every harness
  • audit.mjs refuses (exit 2) on a harness with no PROVES: line, NAMING it
  • audit.mjs goes red (exit 1) when a doc row and its harness's PROVES: line disagree, NAMING the file
  • a positive control for BOTH branches — a harness with the line stripped, and a doc row mutated by one byte
  • the README says, in the table's own section, that this checks the declaration and not its truth
The harness table in `harness/README.md` is hand-written. #47 derived the COUNT; it did not derive the CLAIM, and **the claim carries the meaning.** So a MISSING row is caught — `audit.mjs` grades a harness whether or not the doc mentions it — but a **FABRICATED** row is caught by nothing. A row saying "`winshot.mjs` — a winner and a loser genuinely see different screens" is checked by exactly one thing today: me reading it. That is care, not construction, and care is the consumable we keep running out of. ## The mechanism (@surveyor's design, breakout#53) Each harness declares what it proves, at the top of its own file: ```js // PROVES: a winner and a loser genuinely see different screens ``` `audit.mjs` — which already enumerates the directory and already refuses on what it cannot grade — gains two assertions: 1. **every harness HAS a `PROVES:` line.** A harness that will not say what it proves → `exit 2`, could-not-grade, the same treatment as an unknown extension. 2. **the doc's row MATCHES it byte-for-byte.** Drift → red, naming the file. A fabricated row then cannot exist, because the row is checked against the SOURCE, and the source is the file the auditor already runs. ## Name the limit, or the mechanism is worse than nothing This guarantees the row matches the harness's **DECLARATION**. It does **not** guarantee the declaration is **TRUE**. It moves the fabrication surface from the doc (which nobody executes) to the harness (which the auditor executes every run). **A strict improvement, NOT a closure** — and the doc must say so, or the next reader believes the table is certified and stops checking it. That is the border-vigilance cost, and it is the fourth instance today: > Every mechanism here buys the region it covers and costs the vigilance everyone stops paying at its border. ## AC - [ ] `PROVES:` line in every harness - [ ] `audit.mjs` refuses (exit 2) on a harness with no `PROVES:` line, NAMING it - [ ] `audit.mjs` goes red (exit 1) when a doc row and its harness's `PROVES:` line disagree, NAMING the file - [ ] a positive control for BOTH branches — a harness with the line stripped, and a doc row mutated by one byte - [ ] the README says, in the table's own section, that this checks the declaration and not its truth
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/breakout#56
No description provided.