Skip to content

extract: join a usage line's bracket group only when it is flat - #157

Merged
sadigaxund merged 1 commit into
mainfrom
fix/s154-nested-brackets
Sep 13, 2026
Merged

sadigaxund merged 1 commit into
mainfrom
fix/s154-nested-brackets

Conversation

@sadigaxund

Copy link
Copy Markdown
Collaborator

S-154's multi-word join tested no flatness, so it also fused a nested bracket group, and uniq [OPTION]... [INPUT [OUTPUT]] reached the tree as one positional called INPUT OUTPUT; the join now requires one bracket pair. The sweep that admitted the rule could not see it, because sweep-diff gates on flag and subcommand counts and a positional rename moves neither.

Positionals on a full-PATH sweep of 2324 tools. Every tool that carries a space-bearing positional on main is listed; nothing else in the sweep moves.

tool group main (0047400) this branch pre-merge (0b30c15)
accessdb [MAN DATABASE] MAN DATABASE MAN DATABASE DATABASE, MAN
gdk-pixbuf-thumbnailer [INPUT FILE] [OUTPUT FILE] INPUT FILE, OUTPUT FILE INPUT FILE, OUTPUT FILE FILE, INPUT, OUTPUT
mknod [MAJOR MINOR] NAME, TYPE, MAJOR MINOR NAME, TYPE, MAJOR MINOR MAJOR, MINOR, NAME, TYPE
systemd-sysusers [CONFIGURATION FILE...] CONFIGURATION FILE CONFIGURATION FILE CONFIGURATION, FILE
systemd-tmpfiles [CONFIGURATION FILE...] CONFIGURATION FILE CONFIGURATION FILE CONFIGURATION, FILE
chroot [COMMAND [ARG]...] NEWROOT, COMMAND ARG NEWROOT, COMMAND, ARG... ARG, COMMAND, NEWROOT
env [COMMAND [ARG]...] COMMAND ARG COMMAND, ARG... ARG, COMMAND
gettext [[TEXTDOMAIN] MSGID] TEXTDOMAIN MSGID TEXTDOMAIN, MSGID MSGID, TEXTDOMAIN
grub-menulst2cfg [INFILE [OUTFILE]] INFILE OUTFILE INFILE, OUTFILE INFILE, OUTFILE
inetutils-telnet [HOST [PORT]] HOST PORT HOST, PORT HOST, PORT
mkpasswd [PASSWORD [SALT]] PASSWORD SALT PASSWORD, SALT PASSWORD, SALT
nice [COMMAND [ARG]...] COMMAND ARG COMMAND, ARG... ARG, COMMAND
parted [DEVICE [COMMAND [PARAMETERS]...]...] DEVICE COMMAND PARAMETERS DEVICE, COMMAND, PARAMETERS... COMMAND, DEVICE, PARAMETERS
patch [ORIGFILE [PATCHFILE]] ORIGFILE PATCHFILE ORIGFILE, PATCHFILE ORIGFILE, PATCHFILE
perror [ERRORCODE [ERRORCODE...]] ERRORCODE ERRORCODE ERRORCODE ERRORCODE
ptx [INPUT [OUTPUT]] INPUT..., INPUT OUTPUT INPUT..., OUTPUT INPUT, OUTPUT
split [FILE [PREFIX]] FILE PREFIX FILE, PREFIX FILE, PREFIX
sqlite3 [FILENAME [SQL]] FILENAME SQL FILENAME, SQL FILENAME, SQL
telnet [HOST [PORT]] HOST PORT HOST, PORT HOST, PORT
uniq [INPUT [OUTPUT]] INPUT OUTPUT INPUT, OUTPUT INPUT, OUTPUT

The first five groups are flat and stay joined. The other fifteen are nested and read exactly as they did before the rule shipped: for fourteen of them the whole #fp2 record is byte-identical to its pre-merge record, and sqlite3's remaining difference is nine value names S-157 gave it.

Sweep-diff against the merged sweep: 0 flag losses, 0 flag gains, 0 subcommand movement, 0 status transitions, 0 tools appeared or disappeared, field-level changes on exactly those 15 tools. All nine named controls byte-identical. The existence oracle reads 81 tools against 95. nested-bracket-group-fused-operand reads 15 tools/15 findings on the fused parser and 0/0 on this branch, ratcheted at zero.

S-154 tested no flatness, so a nested group fused too: `uniq`'s
`[INPUT [OUTPUT]]` became one positional called `INPUT OUTPUT`.
docs/shapes.md S-154. corpus/uniq/9.4, corpus/env/9.4.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@sadigaxund
sadigaxund merged commit 5a4545d into main Sep 13, 2026
17 checks passed
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