Skip to content

The pin says which voice answered - #607

Merged
felipesauer merged 1 commit into
main-v1from
the-pin-says-which-voice-answered
Sep 8, 2026
Merged

The pin says which voice answered#607
felipesauer merged 1 commit into
main-v1from
the-pin-says-which-voice-answered

Conversation

@felipesauer

Copy link
Copy Markdown
Owner

What

The guard that walks the surface asking which paths stamp a run has one way of being wrong it cannot see: a synthesised line the declaration could not answer for is refused before any action runs, and it then reads as a path that stamps nothing. The previous slice wrote a pin for exactly that, and the pin looked for the literal Usage: mnema.

Half of the premise under it was false, and it was the half that matters. The misuse voice does carry the usage line the help prints — the same text, usageOf(command) — but Usage: is added outside it, by commander's help formatter. The misuse voice indents the line with no prefix at all. Measured against the built binary:

$ mnema task
mnema task needs <title>: the task title
  mnema task [options] [command] <title>

So the pin saw the help and none of the seven codes the surface words. mnema task, mnema decision <title>, mnema link a b --rel and mnema completion powershell each came back asked: false and parserAnswered: false at once — precisely the silent misclassification the pin exists to catch.

How

  • The discriminant calls the function the writing calls. usageOf is exported with the reason on it, and theParserAnswered lives in the walk's own support module — one site, read by both files that ask.
  • It covers the parser's third answer. A code nobody worded carries no usage line at all and takes the same shape as a verb's own refusal (Refused (…): …), so it is told apart by the code's namespace, which is an identifier and not prose.
  • Both measuring sites build their row through one function. They were four copied fields, which is the shape that let the classification be wrong in two places at once without either being wrong on its own.
  • Presence is asserted before absence. The case requires the usage line to be on the stream, and only then requires Usage: not to be. An absence alone goes vacuous the day the invocation stops printing.

The rule had a second site

outside-a-project-the-surface-says-so.test.ts classifies the same three paths as answered by the parser, through a hand-kept table whose reason was three copies of a sentence nothing read — a reconciliation of names can say a path refused something else first without ever reading what it said. That reason is now the one entry in the table a guard can check, asserted in both directions: a path declared as answered by the parser has to have been, and no path that missed the project may look like one.

Reachability of the third arm was measured rather than assumed: commander declares 13 codes, seven are worded, three mean "already answered", and the remaining three (conflictingOption, error, executeSubCommandAsync) are unreachable today — .conflicts(, .error( and executableFile return zero across packages/*/src.

Mutation battery

Thirteen rows on one commit, in the foreground, reds read off the product's own ledger and each re-run alone before it counts. Every reading collected 4413 cases; caught equals in the run on all of them.

# mutation expected verdict caught
m1 the defect put back: the literal Usage: mnema again red RED 1
m2 / m3 each arm of the discriminant lost, one at a time red RED 3 / 1
m4 / m5 it says yes to everything / no to everything red RED 3 / 3
m6 the one row-builder reads the wrong stream red RED 4
m7 / m8 the second site, each half red RED 1 / 1
m9 the writing drops the line to type — proves the presence guard red RED 8
x1 DIAGNOSTIC: the writing's usageOf gains the help's prefix red RED 5
c1 CONTROL, has to light red RED 5
c2 CONTROL, has to fail to apply not-applied NOT APPLIED
c3 CONTROL, applies and has to leave zero zero ZERO 0

m1 is the row that decides the change: before this, nothing in the repository lit with that line applied. x1 is the argument for reading the product's function instead of copying its text — a reading holding a copy would light zero there.

Scope

src/ carries one change and it is visibility: usageOf went from private to exported. No verb's behaviour changed. CLAUSES_IN_THE_TREE was restated from 2421 to 2422, as its own doc instructs, because this change adds one import to the test tree.

Validation

pnpm build && pnpm lint && pnpm test over the committed tree, clean status: 281 files, 4413 cases, exit 0.

The guard that walks the surface asking which paths stamp a run has one way of
being wrong it cannot see: a synthesised line the declaration could not answer
for is refused before any action runs, and it then reads as a path that stamps
nothing. A pin was written for that, and it looked for the literal `Usage: mnema`.

Half of the premise under it is false. The misuse voice does carry the usage line
the help prints — the same text, `usageOf(command)` — but `Usage: ` is added
OUTSIDE it by commander's help formatter, and the misuse voice indents the line
with no prefix at all. Measured against the built binary, `mnema task`,
`mnema decision <title>`, `mnema link a b --rel` and `mnema completion powershell`
each came back `asked: false` AND `parserAnswered: false` at once, which is
exactly the silent misclassification the pin exists to catch. The pin saw the
help and none of the seven codes the surface words.

So the discriminant now calls the function the writing calls. `usageOf` is
exported with the reason on it, and one function in the walk's own support module
answers whether the parser spoke — off that function, so it cannot drift from the
line it looks for. It covers the parser's third answer too: a code nobody worded
carries no usage line at all and takes the same shape as a verb's own refusal, so
it is told apart by the code's namespace, which is an identifier and not prose.

Both sites that measured a path built their row from four copied fields; they now
build it through one function, which is the shape that let the classification be
wrong in two places at once.

What falsified the premise is asserted rather than only written down, and it is
asserted beside what is present: the case reads the usage line off `usageOf` and
requires it on the stream, then requires no `Usage:` there. An absence on its own
goes vacuous the day the invocation stops printing, because an empty stream
carries no prefix either.

And the rule has a second site the pin's own file did not know about.
`outside-a-project-the-surface-says-so.test.ts` classifies the same three paths as
answered by the parser, through a hand-kept table whose reason was three copies of
a sentence nothing read — a reconciliation of names can say a path refused
something else first without ever reading what it said. That reason is now the
one entry in the table a guard can check, asserted in both directions: a path
declared as answered by the parser has to have been, and no path that missed the
project may look like one.
@felipesauer
felipesauer merged commit 72f307d into main-v1 Sep 8, 2026
4 checks passed
@felipesauer
felipesauer deleted the the-pin-says-which-voice-answered branch September 8, 2026 23:18
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