The pin says which voice answered - #607
Merged
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)— butUsage: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:So the pin saw the help and none of the seven codes the surface words.
mnema task,mnema decision <title>,mnema link a b --relandmnema completion powershelleach came backasked: falseandparserAnswered: falseat once — precisely the silent misclassification the pin exists to catch.How
usageOfis exported with the reason on it, andtheParserAnsweredlives in the walk's own support module — one site, read by both files that ask.Refused (…): …), so it is told apart by the code's namespace, which is an identifier and not prose.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.tsclassifies 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(andexecutableFilereturn zero acrosspackages/*/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;
caughtequalsin the runon all of them.Usage: mnemaagainusageOfgains the help's prefixm1is the row that decides the change: before this, nothing in the repository lit with that line applied.x1is 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:usageOfwent from private to exported. No verb's behaviour changed.CLAUSES_IN_THE_TREEwas 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 testover the committed tree, clean status: 281 files, 4413 cases, exit 0.