Skip to content

A waiver costs something, because it is visible where the owner looks - #90

Merged
Tradebaas merged 2 commits into
mainfrom
feat/floor-report
Aug 26, 2026
Merged

A waiver costs something, because it is visible where the owner looks#90
Tradebaas merged 2 commits into
mainfrom
feat/floor-report

Conversation

@Tradebaas

Copy link
Copy Markdown
Owner

What changed and why

The gate from S-02 passes a class that is answered with a live command and a class that is waived
in exactly the same way, and that is the right call: a waiver is a stated, reasoned choice, and
failing a build over one would push projects to lie in the table instead of using the form
honestly. The cost is that waiving became free, because nothing counted waivers anywhere the owner
actually looks.

The floor is now derived once, in checks/check-stack.mjs where the contract is already parsed,
and rendered from that one derivation in two places: the enforcement line under node checks/check.mjs,
and its own line on the board directly under the gates. Neither reads the table itself, so a waiver
cannot appear in one and not the other.

Three things worth the reviewer's attention:

  • The wording states its own limit, in the summary rather than behind the fold. Proven means a
    workflow runs the command the stack file names. Nothing here has looked at what that command
    asserts. A folded board still has to say so, or 6 of 6 reads as an audit nobody performed.
  • A class whose command no workflow runs counts as open, never as waived. The gate already
    refuses both; counting a dead command as a stated choice would launder a hole into a decision,
    which is the one thing this line exists to prevent.
  • A project with no stack file reports nothing at all, rather than a floor of zero. Not started
    is not failing, which is the rule the empty copy follows everywhere else.

The second commit is a review-stage refactor kept out of the implementing diff: a one-line
pass-through (floorFor) with a single caller, which docs/standards/GLOBAL.md names directly.

Verified by

  • The real repo, in the terminal. node checks/check.mjs prints
    floor: docs/standards/node.md proves 4 of the 6 risk classes with a command CI runs, and waives 2.
    followed by the two waiver reasons quoted from node.md. Checked against the table by hand: 4
    command rows, builds and dependencies waived as not applicable.
  • The real board, rendered. node checks/progress.mjs --page puts the floor line directly under
    the gates line, carrying the same 4 of 6 and the same two reasons, naming checks/check-stack.mjs
    as the reader and linking docs/standards/node.md. .strip has no CSS rule and .line is a
    stacking block, so the third line needed no layout measurement.
  • Red first, then proven to bite. The tests were written before the code and failed on the
    missing export. Each new layer was then mutation-tested: dropping the limit sentence from the
    board summary fails 2 tests, rendering the line when no stack exists fails 1, and counting an
    unwired command as proven fails the derivation suite. None of them pass vacuously.
  • The seam, by comparison rather than assertion. One test renders the board line and formats the
    terminal line from the same floor object and asserts both carry the same count and every waiver
    with its reason, the way the printed board was proved against the served one in S-05.
  • A fresh copy. node checks/drill.mjs --require-walk green. The clearing step now reads the
    floor before it deletes node.md (so the later assertion cannot pass by the report being silent
    all along) and asserts it reads nothing after.
  • All sixteen suites green, check.test.mjs 69 to 76 and board-strip.test.mjs 7 to 14.
  • One regression found and fixed during the work, by the existing gate suite: sharing the parse
    between the gate and the report first starved the design detector's half of its workflow lines
    whenever no stack file existed. check-stack.test.mjs failed on it; the two facts are now read
    separately.

Not verified here: whether any command a stack file names is a good check. That is deliberate
and is the limit the line states about itself.

The gate that reads the floor table treats an answered class and a waived one the same way, which
is correct: a waiver is a stated, reasoned choice, and refusing to build over one would push
projects to lie in the table rather than use the form honestly. That is also what makes waiving
the cheap default, because until now nothing counted them anywhere the owner looks.

The floor is now derived once, in the file that already parses the contract, and reported in two
places from that one derivation: the enforcement line under checks/check.mjs, and its own line on
the board directly under the gates. Neither renders the table itself, so a waiver cannot show up
in one and not the other. The suite proves that by comparing the two outputs rather than asserting
each, the way the printed board was proved against the served one.

The wording carries its own limit, in the summary rather than behind the fold. Proven means a
workflow runs the command the stack file names, and nothing in this framework has looked at what
that command asserts. A folded board still has to say so, or the number alone reads as an audit
nobody performed.

A class whose command no workflow runs is counted as open, never as a waiver. The gate already
refuses both, and counting a dead command as a stated choice would launder a hole into a decision -
the one thing this line exists to prevent.

A project with no stack file reports nothing at all. Not started is not a floor of zero: it has not
been asked the six questions yet. The drill asserts both halves in a fresh copy, reading the floor
before the clearing takes the stack file away and finding nothing after it.

The gate and the report now share one read of the contract, because two parses of one table is
exactly the drift this story exists to prevent. Splitting that read also fixed a live defect it
introduced on the way: the design detector's half of the gate needs the workflow lines whether or
not a stack file exists, and briefly stopped getting them. The stack suite caught it.

Seven comments across four files still described a board of two lines under the shelves. This diff
makes that false, so they say the lines instead.

Groundwork reads 4 of 6 on its own floor, with builds and dependencies waived and their reasons
quoted from node.md.

Traces-to: SC-5
… the one above it

Review of the previous commit found a pass-through: floorFor(root) was one line forwarding to
formatFloor(floorReport(root)) and had exactly one caller. GLOBAL.md names that shape directly -
no layers that only forward to the next layer - and removing it makes the call site read like its
neighbour, which has always composed formatReport(enforcementReport(root)) in the open.

Traces-to: SC-5
@Tradebaas
Tradebaas merged commit be283ca into main Aug 26, 2026
8 checks passed
@Tradebaas
Tradebaas deleted the feat/floor-report branch August 26, 2026 09:10
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.

1 participant