Skip to content

document shape: diagnostics, headingless tables, plus-sigil rows and env-var columns - #151

Merged
sadigaxund merged 11 commits into
mainfrom
r10/document-shape
Sep 13, 2026
Merged

sadigaxund merged 11 commits into
mainfrom
r10/document-shape

Conversation

@sadigaxund

@sadigaxund sadigaxund commented Sep 13, 2026 •

Copy link
Copy Markdown
Collaborator

A document's own shape is read before its rows are: a leading option-rejection diagnostic, a headingless table duplicated into the root description, a group label that only repeats the node's description, a +word or +/-name option row and a header-declared three-column table each reach the tree correctly now. These were five seed-7 items whose common cause was the document boundary rather than any option row, plus the three Xvfb defects and the + column placement the maintainer's round 10 visual check reported.

Round 11 additions: a +/-name expansion no longer collides with an ordinary row documenting the same spelling, so -render keeps one row with its four choices and +render keeps its own; +extension and -extension read the same name value column; the colon-introduced list of run-time-toggleable extensions becomes that placeholder's 19 choices on both halves; and a + spelling longer than one character renders in the long column beside -render instead of the short column at column 0, leaving fzf's one-character +i and +s where they belong.

Fleet sweep against the 0b30c15 baseline, 2269 tools matched, 0 appeared, 0 disappeared: 10 flags gained across 2 tools (Xvfb 69 to 77, fzf 63 to 65), 0 subcommand losses, 0 subcommand gains, 49 tools field-level. 84 flags are counted as lost across 42 tools, every one a qemu-*-static going 26 to 24: those two entities per tool are fabricated duplicates with no description and no unique spelling, verified five ways, so no spelling, description or value name is lost anywhere. Xvfb reads 77 rather than 78 because the one entity removed is the duplicate -render the collision fabricated. The S-145 widening this branch needed also recovers a value name on five further tools, each checked against that tool's own text: jdb -dbgtrace [flags], jrunscript -encoding <encoding>, llvm-libtool-darwin-18 -arch_only <arch_type>, llvm-lipo-18 -arch <value>, screen -wipe [match]. All nine named controls are byte-identical on the first capture, docker and git included.

sadigaxund and others added 11 commits September 12, 2026 16:30
…ysis

fuser, Xvfb and nfsidmap print one diagnostic line then their real
document; it no longer fuses into the root description or a usage
label. New corpus fixtures: fuser, Xvfb (partial, still xfail).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…offsets

[S-166] A header row naming Argument/Env-variable/Description columns is
read at those offsets instead of one column gap, so the env-variable cell
becomes the flag's own env_var cross-reference (spec §4.5) instead of
gluing onto the description. -cpu and -dfilter keep their own value name
now, and the prose paragraph below the table ("The following lines are
equivalent:") no longer fabricates a second -E row and group, fixing all
42 qemu-*-static tools (mandible qemu-riscv64-static).

The TUI now renders a flag's own env_var as an "env: FOO" line next to
values:, since it carried no rendering before this shape existed
(docs/design.md §9.3 rule 8).

corpus/qemu-arm64-static/audit-seed2/expected.snap moved for the same
reason: it already exhibited this shape and was already green, so
re-blessing it after the fix is the ordinary case, not a promotion.
Every flag on it keeps its own spelling, value_name and description;
each row's env_var is new. New fixture corpus/qemu-riscv64-static/8.2.2.

New detector header-declared-env-column (xtask/src/coverage/round10.rs),
family() None: the seed-7 audit labels qemu-riscv64-static "incomplete"
and describes this exact shape, but no DEFECT_FAMILIES entry names it and
the entry carries no derived family label.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The `+` sigil gate reads a whole letter-led run as the spelling, so a
`+bs` or `+i` row becomes an option instead of ending its block.
docs/shapes.md S-095, S-163.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A headingless table no longer duplicates into the root description
(S-165), which let `+word` and `+/-name`/`[+-]name` alternation rows
reach a column-0 table (S-163). A root flag group equal to the node's
own description is refused as a second copy of it (S-164).

Xvfb: 69 to 78 flags, fzf: 63 to 65. fc-scan, fc-validate, grub-macbless
and lto-dump stop showing their description sentence twice.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Changelog, atlas, detector registry and the round-10 footer keep both sides.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ension value column, and its choice list

+/-render's expansion no longer collides with the ordinary -render row;
+word and -word now read the same value column and share one colon-
introduced choice list (new S-168) instead of folding it into a description.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…count

S-168 ships as a gated exception (1 tool at tree level, 26 raw-shape
upper bound), not because it cleared the bar. S-145's placeholder-gap
widening moves 6 tools on its own sweep evidence, named with the
one partial recovery (llvm-lipo-18) and the -render duplicate's own
fencing gap recorded.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Keep-both in CHANGELOG, docs/shapes.md (numeric order), the detector registry
and xtask/src/coverage/round10.rs. S-155's choices rule moves inside S-163's
new push_flag_entity, S-162's prefix strip inside S-150's seed_usage_scan. The
two Xvfb fixtures become one: audit-seed10's contract folds into audit-seed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… tests

Merging S-163's alternation rows beside S-155's argparse gate took
emit_flags_block to eight arguments; RowRouting carries the three row facts.
usage.rs reached 804 code lines, so its label and program-name predicates
move to usage_label.rs. Xvfb gains 24 value names, fc-scan drops a group
label that repeated its own description.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The merged usage.rs reached 804 code lines, over the 800 ceiling. A usage
label and the tool's own name at a synopsis head are the same question the
heading predicates already answer, so they move to heading.rs rather than
into a new file no ratio baseline covers.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@sadigaxund
sadigaxund merged commit f663135 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