Skip to content

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 13 Sep 14:43
· 325 commits to main since this release
v0.8.0
87f062b

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 contribute now draws tool names off PATH prior to probing, sampling only drawn tools instead of freezing and classifying the entire PATH upfront. Verdict files also record machine and containment posture (#102).

Removed

  • Deprecated Toggle: Removed the . hidden/deprecated toggle along with the underlying show_hidden configuration 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.
  • 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).
  • 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's source1 source2 ...) are correctly retained alongside primary operands.
  • 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).
  • Plus-Prefixed Flags & Complex Rows:

    • +word options and +/--name/[+-]name alternation rows now expand to explicit +name and -name entries with shared choices and values (fzf, Xvfb).
    • Multi-column table headers specifying Argument, Env-variable, and Description now 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).
  • Bullet List Wrapping:

    • Bulleted list descriptions (* NAME - VALUE) no longer split at inline dashes into multiple lines per item (e.g., rustc's --emit).

Testing & Internal Tools

  • Subcommand Diffing: xtask sweep-diff now measures and reports subcommand-count gains and losses independently from flag counts.
  • Detector Calibration: xtask detector calibrate prints NOT EVALUABLE instead of DOES NOT PASS when 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