Repository navigation
v0.8.0
Release Notes - Version 0.8.0
Summary
This update brings extensive improvements to the help-text parsing engine, significantly hardening how single-dash long options, positional arguments, choice alternations, and command tables are handled across diverse tools like mksquashfs, Xvfb, rustc, nix, and qemu. It also refines the xtask contributor auditing workflow and removes the legacy deprecated-flag visibility toggle in favor of consistent inline tagging.
Install
Homebrew (macOS or Linux)
brew install as-foss/mandible/mandible
Fedora / EPEL (COPR repository)
sudo dnf copr enable as-foss/mandible
sudo dnf install mandible
Nix
nix run github:AS-FOSS/mandible
Cargo
cargo binstall mandible
cargo install mandible
Debian and Ubuntu: the signed apt repository carries every released version for amd64 and arm64, with setup instructions.
Or download a binary below. Verify with the accompanying .sha256.
Changed
- Contributor Auditing:
cargo xtask audit contributenow draws tool names offPATHprior to probing, sampling only drawn tools instead of freezing and classifying the entirePATHupfront. Verdict files also record machine and containment posture (#102).
Removed
- Deprecated Toggle: Removed the
.hidden/deprecated toggle along with the underlyingshow_hiddenconfiguration state. Deprecated flags now consistently display a(deprecated)tag.
Fixed
Parsing Engine & Usage Synopsis
-
Single-Dash Long Options & Case Sensitivity:
- Single-dash long options with uppercase letters or mixed casing (e.g.,
g++'s-Xassembler,mksquashfs's-noI,-Xstrategy) retain their full names and case rather than truncating to single-letter flags. - Preserved tab-separated and bare-word value placeholders on single-dash long options in tables lacking
--flags (e.g.,mksquashfs,sqfstar,Xvfb). - Single-dash long options inside usage line brackets (e.g.,
lshw's-format,fuser's-SIGNAL) retain full spellings instead of splitting into short flags with fabricated values.
- Single-dash long options with uppercase letters or mixed casing (e.g.,
-
Choices, Alternations & Values:
- Delimited value alternations (e.g.,
--compression=(xz|none|auto),{c,java,ruby,tcl}) now attach as explicit flag choices instead of opaque placeholders (e.g.,grub-mkimage,rustc). - Glued bracket-optional groups on required angle placeholders (e.g.,
-L's[<KIND>=]<PATH>and--emit's<TYPE>[=<FILE>]) are preserved intact (rustc). - Value specs with swallowed trailing commas (e.g.,
-p, --pcts) no longer hide subsequent flag aliases (biolatpcts-bpfcc). - Colon-introduced choice lists directly beneath placeholder rows map cleanly as flag choices (
Xvfb). - Repeated flags across invocation forms now collapse into a single placeholder with unioned choice lists (e.g.,
lvcreate's--type).
- Delimited value alternations (e.g.,
-
Positionals & Bracket Parsing:
- Nested bracket groups in usage lines no longer incorrectly fuse words into a single operand name (e.g.,
uniq,env), while flat groups (e.g.,mknod) remain unified. - Bracketed multi-word ALL-CAPS operands (e.g.,
gdk-pixbuf-thumbnailer,mknod) parse to exact positional counts rather than splitting per word. - Numbered positional sequences (e.g.,
file1 [file2 ...]) collapse into single repeatable positionals (apt-sortpkgs,apt-mark). - Positionals preceding required operands (e.g.,
mksquashfs'ssource1 source2 ...) are correctly retained alongside primary operands.
- Nested bracket groups in usage lines no longer incorrectly fuse words into a single operand name (e.g.,
-
Subcommands & Command Tables:
- Recovered command tables sitting directly under root usage synopses as subcommands with dedicated flags/operands rather than root flag groups (e.g.,
dmsetup,dmstats). - Parsing lowdown man-page formatted help outputs now extracts subcommands and flags correctly (recovering 30 subcommands and 9 flags for
nix). - Command tables using short-alias-comma rows (
i, install) no longer drop tables or invent subcommands from wrapped descriptions (pnpm). - Usage lines with bracketed optional-abbreviation suffixes (e.g.,
v[ersion]) now parse as distinct subcommands with alias tracking (lldb-server).
- Recovered command tables sitting directly under root usage synopses as subcommands with dedicated flags/operands rather than root flag groups (e.g.,
-
Plus-Prefixed Flags & Complex Rows:
+wordoptions and+/--name/[+-]namealternation rows now expand to explicit+nameand-nameentries with shared choices and values (fzf,Xvfb).- Multi-column table headers specifying
Argument,Env-variable, andDescriptionnow parse at exact column offsets without fabricating flags from prose (qemu-*-static).
-
Layout & Noise Cleanup:
- Trailing usage labels alone on a line no longer swallow underlying option blocks (
fdisk,pkcheck,dmsetup,npm). - Option-rejection diagnostics emitted by probed tools are filtered out of root descriptions (
fuser,nfsidmap). - Suppressed redundant root flag groups and headingless tables that duplicated the tool's primary description (
fc-scan,Xvfb). - Subcommands showing prefixed program names inside usage lines now render cleanly under the tool's own name (
gcc-ranlib-13,perlthanks).
- Trailing usage labels alone on a line no longer swallow underlying option blocks (
-
Bullet List Wrapping:
- Bulleted list descriptions (
* NAME - VALUE) no longer split at inline dashes into multiple lines per item (e.g.,rustc's--emit).
- Bulleted list descriptions (
Testing & Internal Tools
- Subcommand Diffing:
xtask sweep-diffnow measures and reports subcommand-count gains and losses independently from flag counts. - Detector Calibration:
xtask detector calibrateprintsNOT EVALUABLEinstead ofDOES NOT PASSwhen evaluating detector families with zero seed samples.
Contributors
- @Stiven-Gjekaj — #139 test(tui): state the glyph set instead of reading it from the locale
- @2gn — reported #138 lix (nix) renders incorrectly