Wiki · Design
Rift Forge capability matrix
Shelf
Design

Rift Forge capability matrix

Decision record for WI-031. Evidence is pinned to the refreshed local candidate (candidate/0.1.0 at 4a51848cfc9a2acbcdeddcd028418572406e2950, refreshed 2026-08-15). Source paths below describe the candidate checkout only; they are not paths that a consumer repo must provide. A row marked adopt is implemented through a rungs module or engine contract; defer and reject are deliberate portability decisions, not missing work.

Candidate decisions

Candidate evidence (path / commit)Portable rungs surfaceRunning costDecisionReason and boundary
.github/scripts/land.mjs, lib/item-status.mjs / f9f26580backlog’s git-status-reconcile remains the one-directional branch/status checkA git branch read per check; a hypothetical merge requires a land operationdeferThe shared predicate is valuable only when a tool owns merge preparation and a scratch ref. Rungs has no land service or compare-and-swap contract, so adding a preflight flag would imply an integration protocol it cannot execute. A future adapter may call the same predicate at its boundary.
.github/scripts/check-finding-closure.mjs / f9f26580findings module v1.1.0; self-declared-closure engine and gateOne markdown scan; no code or network accessadoptThe question is repository-agnostic: does an open finding’s own detail section declare itself fixed? The engine accepts headings, id shape, verdict phrases, and a reasoned closure-ok: exception, so it does not copy Rift Forge’s file layout or F-### assumptions into the CLI.
.github/scripts/gen-dataset-coverage.mjs / 8107be2dNo current module; candidate-specific generator adapterRequires a generated dataset schema plus live work-item status lookup on each generationdefer“Owner is a live work item or durable channel” is a good source rule, but rungs does not own generated triage rows or a channel registry. Representing it as a generic id gate would silently overclaim what is checked.
PROJECT-STATE.md and CLAUDE.md / 2eddf18finstructions core-size budget and path-scoped .ai/rules/A second record to maintain and a read when historical context is neededdeferOn-demand history is a useful operating convention, not a universal file contract. Rungs already supplies a size budget and scoped rules; a future history module can add a named record once a stable format and migration boundary exist.
docs/engineering/gates.md / f9f26580.ai/gates.toml registry plus rungs check outputA generated index adds a producer, freshness gate, and merge-driver policydeferThe registry is already the machine-readable source and the CLI reports every gate. Adding a second generated catalogue now would duplicate authority. Revisit when a consumer-facing index has a distinct query need and a declared generator boundary.
.github/scripts/worktrees.mjs / 10549f2aconcurrency module’s git-state gate and worktree report contractRead-only worktree enumeration; escalation policy needs owners and a thresholddeferReporting age and dirty state is portable; automatically nagging or pruning is not. Rungs deliberately never removes another owner’s checkout, and it has no owner directory or notification channel. Keep the operational guidance in the concurrency module until that boundary exists.

Adopted contract

findings-self-declared-closure is intentionally narrower than a “finding is fixed” detector:

  • it reads the Open, Closed, and Detail regions of the configured findings register;
  • it checks only an open finding’s own detail section for configured, verdict-shaped fixed phrases;
  • a verdict about another finding is ignored;
  • <!-- closure-ok: <reason> --> permits a partial mitigation while the observation remains open;
  • it never runs product code, resolves work-item status, or decides whether the claimed fix is true.

The engine has positive, negative, partial-fix, and cross-citation coverage in test/core.test.js. The module gate also carries both-direction self-test fixtures in modules/findings/gates/findings.toml.

Deferred adapter boundary

The deferred rows are not promises that rungs will grow a Rift Forge-shaped land script, dataset generator, or notification system. If a future module adds one, it must first define the external adapter contract (inputs, owned state, failure attribution, and cost), then add a new work item and tests. Until then, the current modules describe only the facts they can observe locally.