Skip to content

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 19 Sep 22:02
· 108 commits to main since this release
Immutable release. Only release title and notes can be modified.
v0.7.0
0bcb461
  • Add informational paired benchmark history with raw measurements, variability, and explicit baselines.

  • Allow serialized coverage backfill from an existing completed CI run without rerunning tests.

  • Publish successful coverage despite unrelated CI failures, and show post-merge before
    pre-merge within each PR in the two-phase coverage view.

  • Show one coverage result per PR, replacing pre-merge with exact-commit post-merge coverage
    when available; show both phases separately without repeated main runs or attempts.

  • Refresh coverage overview ordering on PR merge, closure, or reopening without waiting for another CI run.

  • Run Python tooling tests and resource benchmarks through explicit Aspect Bazel targets and a
    hermetic Python 3.13 interpreter; keep pre-commit focused on fast checks.

  • Suggest similar registered flags, primaries, topics, and aliases for misspelled help selectors.

  • Order coverage reports by actual PR merge and tag timestamps, without standalone main rows.
    Omit closed, unmerged PRs from the overview while retaining their reports.

  • Rank fuzzy flag suggestions and show up to three candidates for misspelled options.

  • Avoid redundant help spacing in console, Markdown, and man-page output while preserving
    intentional blank lines in code examples.

  • Default help and width-controlled comparison summaries to --width=auto:110. Support custom
    automatic caps of at least 40 columns and persistent INI preferences, with explicit CLI overrides.

  • Retain detailed coverage reports by CI run and attempt, with a published history index and
    correct ordering for PRs merged through an aggregation branch.

  • Clarify safety provenance names and enforce ASCII source text while preserving Unicode output.
    Standardize multiline struct initializer formatting, including generated license registrations.

  • Add a read-only benchmark harness for runtime logical content-read accounting on real files.

  • Derive shared expression behavior and help relationships from registry capabilities.
    Treat every explicit archive mode consistently when archive support is unavailable.

  • Escape control bytes in human-readable tables and tree labels, keeping unusual filenames
    on one display line and preserving newline distinctions in Markdown.

  • Distinguish aggregate summary rows with is_total in JSONL and quote ambiguous data labels
    in text tables, preserving real groups named total.

  • Use grouped scope headers in console comparison summaries and compact scope rows when the table
    exceeds --width. Preserve Unicode graphemes, numeric values, and machine-output accounting.

  • Label console summary groupings and report omitted groups under --top, including
    machine-readable group counts in truncated JSONL tables.

  • Export ordinary and comparison summaries as CSV/TSV with one shared schema and explicit row identity.

  • Group archive members correctly with --summary=hash, using the active filesystem and
    configured hash algorithm and encoding consistently with {hash}.

  • Identify every JSONL summary row by request, grouping, and scope, retaining template text
    and comparison roots so repeated and mixed summaries can be separated reliably.

  • Extend --explain with effective worker limits, retained-state notes, active content-reading
    fields, and advisory expression costs without running the search or executing actions.

  • Reject invalid field templates before traversal or actions, including configured summaries and
    comparison runs. Printf field escapes share quoted-placeholder parsing with ordinary templates.

  • Explain inactive CLI modifiers for grep, diff, hash, shard, archive, and reduction output using the effective
    configuration; dormant configured defaults remain quiet and valid.

  • Resolve the current behavior values shown by --explain from the complete configuration,
    including named selections and explicit files, instead of only command-line flags.

  • Show named-profile availability, declared behavior, skip and validation reasons, and physical
    flag origins in configuration inspection, with small configuration recipes.

  • Show effective safety decisions in --explain, including mandatory and profile origins,
    active modes, per-file categories, and expanded directory roots.

  • Make default help a compact command and task guide, with direct routes to the complete
    flag inventory and detailed reference; wrap the help title to the requested width.
    Structure comparison guidance and keep safety tables readable with labeled rows on narrow terminals.

  • Suggest close registered option and predicate spellings in usage errors, and explain when a
    short global must be moved before the roots; command arguments remain literal.

  • Explain comparison exit status for automation, including summary output, output selection,
    filtered populations, and error precedence.

  • Keep comparison summaries and listings physical when shard flags are present, preventing
    mixed sets from being assigned wholly to their representative's comparison category.

  • Apply shard grouping once to each collected summary/histogram population, preserving collection
    placement and eliminating logical-set plus physical-member double counting.

  • Explain physical files versus logical shard sets with tested examples covering classification,
    actions, collection placement, reductions, duplicates, and comparison.

  • Resolve archive filename sniffing from the final traversal mode, so a later all-mode selection
    restores the filename gate after any-mode flags or named configuration selections.

  • Add an order-and-limits guide covering actions, collections, summaries, packing,
    parallel traversal, and comparison populations.

  • Add executable archive-safety recipes for inspection, new archives, member deletion,
    and writing reports only beneath a declared output root.

  • Reject zero, negative, malformed, and overflowing histogram widths before traversal or actions,
    including settings selected from configuration files.

  • Render Markdown histograms as bucket/value tables and reject unsupported histogram formats
    before traversal or actions, instead of silently emitting text bars.

  • Comparison status and built-in grep output support JSONL records, including grep context and
    counts. Non-UTF-8 values use lossless tagged base64 objects. Unsupported comparison formats
    fail before traversal or expression actions.

  • Reject duplicate normalized archive destinations before creating output. --pack-duplicates=first
    keeps the first collected input; dry-run validates the same member plan.
    Named roots (--root=NAME=PATH) give inputs distinct archive directories.

  • Avoid duplicate comparison tables when combining --compare=summary with bare --summary,
    while retaining scoped totals and explicitly requested grouping tables.

  • Lead the README with binary installation and common tasks before the detailed feature matrices.

  • Correct the release archive description: lean and full executables have separate archives,
    each with its own matching debug symbols.

  • Add regression coverage for Markdown table alignment after newline and pipe normalization.

  • Reject malformed, negative, or overflowing buffer limits before traversal and actions,
    including limits selected from configuration files.

  • Validate capture references in field consumers, including printf, grep templates, directory
    execution, and columns; escaped literal references no longer hide unused captures.
    Directory captures preserve implicit output consistently with ordinary captures.

  • Correct binary-content help to state the exact 8,000-byte NUL sniff window.

Install

Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.

Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.

Install on Linux x86_64:

XFF_VERSION=v0.7.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"

# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"

# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"

Install on macOS:

XFF_VERSION=v0.7.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"

# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"

# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"

Release resources