xff v0.8.0

Historical roadmap through 2026-08-27

This is the former combined TODO and design ledger, archived after PR #683 made the last lowered
coverage-policy override unnecessary. It preserves the full implementation and decision record as it
stood at that point. For current work, see TODO.md; for other resolved investigations,
see history.md.

Remaining work

Minimum Bazel version (decided 2026-08-19)

The supported minimum is Bazel 9.1.1. Development and CI use the newer release pinned in
.bazelversion; the minimum is a support floor, not a second CI configuration. Bazel 7 is no longer
supported, and no Bazel 8 patch release is part of the support contract. Do not replace the concrete
minimum with an unspecified 8.x.y; lowering it requires an explicit decision.

The backlog of features and infrastructure not yet built. Ordered by current
intent, not hard dependency. Task numbers reference the agent task list.

Small slices in flight (task ledger)

Lint / CI / style adoption (completed audits)

find / xff features (roadmap tail)

The standard find predicate surface is complete (the access predicates
-readable / -writable / -executable, -inum / -samefile, symbolic -perm
modes, -lname / -ilname, and -fstype; all in the CHANGELOG and covered by the
engine unit test), as is the reusable markdown-table-alignment skill (#66). What
remains below is the design-forked / larger work.

Help / docs rendering (post-#126)

The generalized help model (EPIC #154) is DONE: one SOT model (help_model.h: Document ->
Section -> Content) built by help_build.cc, rendered by the plain / markdown / roff backends off a
single RenderDocument walk. The imperative RenderHelp cluster is retired; --help / --man /
--markdown all render from the model, so they cannot drift. The follow-ons below shipped as part of
it:

Nice-to-haves parked with a design leaning but not yet scheduled; promote to the roadmap above when a
concrete need appears.

Single-pass hash verification reduction (SHIPPED 2026-08-28)

--summary=hash-verification feeds the verdict of exactly one -hasheq into the same run-wide reduction
used by the other summaries, producing verified, failed, and total rows with counts and byte
totals. A failed predicate is still counted even when it makes the complete expression false; an
entry that short-circuits before -hasheq has no verdict and contributes nothing. Requiring one check
keeps each bucket unambiguous instead of silently combining unrelated algorithms or expected values.

The side channel exists only when this summary is requested and survives deferred expression replay,
while the evaluator memo keeps the hash predicate single-shot. The walk's ordered visitor remains the
single reduction writer, so parallel traversal does not introduce shared-cell races. Empty expected
values, unreadable entries, and invalid defensive fallbacks are failures, matching -hasheq's existing
truth semantics. A future sha256sum manifest reader can populate definitions for this predicate
without adding a second verification engine or a second filesystem walk.