Skip to content

RAC v0.19.0 — the "kitchen sink" release

Latest

Choose a tag to compare

@tcballard tcballard released this 15 Jun 08:07
· 337 commits to main since this release

Everything since the last time the changelog was dated lands at once. Over this stretch RAC stopped being a requirements linter and became a place your product knowledge lives - browsable, addressable, graph-checked, and enforceable in CI. This release collects the whole arc into one formal cut.

pip install --upgrade requirements-as-code

Why "kitchen sink"

The changelog hadn't carried a dated release since v0.7.3. The work didn't stop, I just focused on building so it just piled into one long Unreleased block while the shape of the tool changed underneath it. Rather than pretend each piece shipped on its own quiet day, this release names the pile for what it is and dates it. The (vX.Y.Z) marker on each changelog line still tells you exactly where a capability landed.

A place to look

The Explorer is an interactive terminal UI over your corpus — artifacts in a sidebar by title (not opaque IDs), validation status as chips (✓ Valid, ! Warning, ✗ Error), and a / command palette instead of a persistent command bar.

pip install "requirements-as-code[explorer]"
rac explorer

Identity that survives a rename

Artifacts now carry canonical YAML frontmatter - a schema_version, a system-assigned opaque id (RAC-01JY4M8X2QZ7), and a type - minted by rac new and stable across renames, moves, and type changes. Your human-readable references keep resolving through legacy aliases, so nothing breaks on the way in.

rac find "telemetry"     # search by id, title, filename, or path
rac resolve RAC-…        # id → type, title, path (duplicates reported, never guessed)
rac migrate metadata .   # adopt canonical identity, idempotent and byte-preserving

The corpus is a graph now

rac relationships --validate stopped being a reference checker and became a graph checker. It reports a ## Related <Type> link that resolves to the wrong artifact type, a section an artifact's type doesn't even support (instead of silently dropping it), a cycle in supersedes, and anything live still pointing at a retired artifact.

rac relationships . --validate

One screen of repository intelligence

rac portfolio gives you counts by type, validity, completeness, relationship coverage, an attention list, and a health score — the whole repository at a glance. rac review turns that into a prioritized worklist (invalid first, then broken relationships, then advisory), and rac watchkeeper reviews what changed in product knowledge between two repository states.

rac portfolio
rac review .

Standards, checked - not just structure

Validation now lints requirement quality against the standards RAC cites: BCP-14 keyword discipline (only uppercase MUST/SHALL/SHOULD/MAY are normative), ISO 29148 singularity, and EARS clause shape - all deterministic, no AI in the core. New to a legacy repo? A validation section in .rac/config.yaml downgrades any finding to a warning, repository-wide, so you can keep CI green and tighten the gate over time.

It travels

The corpus exports as a deterministic JSON payload, a self-contained HTML Portal you can hand to anyone, an OKF v0.1 bundle (RAC repos are conformant Open Knowledge Format bundles), and SARIF 2.1.0 for GitHub Code Scanning.

rac export . --html      # self-contained portal
rac export . --okf       # OKF v0.1 bundle
rac validate . --sarif   # SARIF for code scanning

It meets you in CI

A composite GitHub Action runs rac validate --sarif and annotates pull requests inline through Code Scanning and errors fail the check, warnings annotate without failing. A second action brings rac watchkeeper to PRs. Both are thin wrappers over the CLI (ADR-058): no logic lives in the action that doesn't live in the tool.

Roadmaps can be done

The headline for v0.19.0 itself: a roadmap whose scope has shipped can declare ## Status: Achieved — a validated live terminal state (ADR-061). The intent was delivered, so the roadmap reads as done, but it isn't treated as retired, and inbound references to it still resolve.

Already in your hands

This release also carries the "count me in" telemetry from v0.10.6 (rac telemetry on — three anonymous facts, nothing without consent) and the bundled Claude Code skills and git hooks (rac skill, rac hook).

Upgrading

pip install --upgrade requirements-as-code
uv tool upgrade requirements-as-code

Everything is additive. Existing commands, JSON contracts, and exit codes work as before; the new identity frontmatter is optional and recognized artifacts without it are still fully supported. If you've been on v0.10.6, this is the catch-up release — most of the arc above is new to you in one step.