subcommands: optional-suffix usage words, one unioned choice list per merged spelling - #152
Merged
Merged
Conversation
…pelling A same-spelling merge collects every form's literal value into one choice list and keeps one placeholder, replacing the value-name union. docs/shapes.md S-147. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…mand A usage form opening `g[dbserver]` names the subcommand `gdbserver` and keeps its source spelling as the display name. docs/shapes.md S-167. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Same-spelling entities still collapse to one merged flag; only that one flag's value_name/choices resolution changed. A new leading-value recognizer's own duplicate-value allowance is now scoped to its own recoveries only, so ssh-keygen, fc-validate, iptables-apply, ip6tables-apply and pod2man revert to their pre-fbf1822 trees. docs/shapes.md S-147. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A command table's multi-word pattern rows collapse to one node per leading word, each row's pattern appended to that node's usage list, admitted only at the block's own name column. New contract field must_not_contain_subcommands pins round 8's nine fabricated names. docs/shapes.md S-141. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
emit.rs crossed the comment-to-code ratio ceiling at 0.503. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The column-identity guard held on fail2ban-client and fabricated six nodes on xauth, gprofng and claude, so the rule is reverted and the fixture keeps its xfail. S-167 stays. docs/shapes.md S-141 records all three refusals. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The rule shipped with a CHANGELOG line and no entry in the shape atlas. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Names and displays gdbserver/version/platform by their full word, keeping the short prefix as an alias instead of the bracketed source spelling. A new abbrev_probe_attested bit admits only this recognizer's nodes to §6 rule 0's probe gate, so each child now fills its own flags; the thirteen- program list still wins unconditionally, proved by two new exec_policy tests. docs/design.md §6/§16 and docs/shapes.md S-167 updated. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
usage_optional_word_table's tree_attests checked the removed display_name instead of the repaired name+aliases shape, so it read the fix as unfixed (0 to 2 tools). audit::signatures::is_attestation_gated_stub checked only heading_attested, so it still counted an abbrev_probe_attested node as un-probable after the gate widened to admit it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The existence oracle read S-167's own repaired names as fabrications: gdbserver never occurs as a contiguous substring, only g[dbserver] does. docs/design.md rule 7 now permits exactly one reconstruction, bracket deletion with nothing else changed, and xtask/src/existence.rs's tool_name_prefixed_row_words computes and admits it at the same already-attested position, widened to also recognize the tool's own full-path spelling a live probe actually captures. Break-it check: four tests turn red with the reconstruction disabled. Re-measured against the real binaries: existence_fabrication_tools and exist both read 0. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Keep-both in CHANGELOG, docs/shapes.md (S-167 between S-166 and S-168) and the detector registry. usage_optional_word.rs follows the two name predicates that moved to heading.rs, and emit_heading_block's stanza-head recovery becomes recover_stanza_head_flags to stay under the 150-line ceiling. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.
A usage form's leading word with a bracketed abbreviation suffix becomes a subcommand named by its full word, with the short prefix kept as an alias, and a flag documented once per invocation form renders as one row with one unioned choice list. S-141's command-pattern name rule was built a third time and is refused a third time, because a full-
PATHsweep-diff caught it fabricating six command nodes on xauth, gprofng and claude.Round 11 additions:
mandible lldb-servernow showsversion,gdbserverandplatformrather thanv[ersion],g[dbserver]andp[latform], and each child is probed with its own full word, sogdbserverfills with its own ten flags. A third attestation bit admits only this shape to the §6 rule 0 probe gate, leavingheading_attested's meaning intact andinvocation_attestedstill declined; rule 0's thirteen-program list is checked first and wins unconditionally, fenced by two new exec-policy tests. §7 Tier B rule 7 gains one narrow reconstruction, since these names occur in the raw text only asg[dbserver]: a name also satisfies the literal-occurrence rule when it is a raw token with its bracket characters deleted and nothing else changed. The existence oracle learned that same reconstruction, which returnsexistence_fabrication_toolsto its baseline 56 over exactly the same 55 flagged tools, so no genuine fabrication anywhere was excused.Fleet sweep against the 0b30c15 baseline, 2269 tools matched, 0 appeared, 0 disappeared: 0 flag losses, 18 flags gained across 4 tools (lvcreate 146 to 156, lvconvert 139 to 145, lvchange 73 to 74, jpackage 50 to 51, all stanza-head values recovered from the tool's own text), 0 subcommand losses, 6 subcommands gained across 2 tools (lldb-server and lldb-server-18, each gaining
gdbserver,platformandversion), 4 tools field-level. All nine named controls are byte-identical on the first capture.