runward

RW™ · V0.22.0

Docs · Decisions · ADR-0027

ADR-0027.

Adapters into competing orchestrators — the gate as a review layer they call

Date: 2026-07-16 Status: accepted Deciders: Thibault Souris (maintainer) Method: decision-loop — a fresh competitive benchmark (BMAD, OpenSpec, Spec Kit, Spec Kitty at code level) surfaced a distribution seam, challenged against the vendor-neutral and never-a-runtime invariants, durable position

Context

The benchmark confirmed runward's four exclusive grounds (rule-level gate with verified evidence, signed+sealed evidence, gated hand-over, deterministic OSCAL) and one concrete opening: BMAD's bmad-code-review exposes a review-layers extension point whose instruction may "run anything (e.g. an external reviewer via bash)". That is a first-class, documented seam by which runward's deterministic gate can run inside a competitor's review flow — beside its LLM reviewers, not against them. BMAD carries ~50k stars; being a review layer they invoke is distribution on their traction, and it sharpens the layering runward already claims (the harnesses and orchestrators enforce at the action; runward keeps the decision traced across the mission).

ADR-0012 established the gate-as-a-port with inert harness adapters (git, CI, Claude Code, GitLab, Kiro). This extends the same posture to a competing orchestrator's own extension point: another seam, same contract (the exit code), same inert-sample discipline.

Decision

Ship templates/adapters/bmad-review-layer.toml — an inert [[workflow.review_layers]] block the operator copies into BMAD's bmad-code-review customize.toml. It adds one review layer that runs npx runward check --strict via bash and reports the exit code as a finding beside BMAD's adversarial subagents. Same invariants as every adapter: runward writes nothing into BMAD, installs nothing, runs nothing on its own; the operator wires it; the gate stays the load-bearing decision the operator crosses.

Framed as a complement: BMAD's layers judge the code's craft (LLM, adversarial); runward's layer verifies deterministically that the traced decisions are accounted for with resolving evidence. The two answer different questions; running both is strictly more than either. EXPECTED_ADAPTERS 5 → 6; the adapters README documents the seam.

Alternatives discarded

  • Do not adapt into competitors (stay standalone). Leaves distribution on the table and cedes the "we integrate with your existing flow" ground; the review-layer seam is exactly where a deterministic checker belongs, and an operator already on BMAD is the ideal runward user.
  • A deep BMAD integration (a BMAD plugin/skill that embeds runward). Couples runward to one orchestrator's internals and its release cycle; the inert .toml sample keeps the coupling at the exit-code contract, swappable and neutral.
  • Privilege BMAD over the other orchestrators. Rejected on the vendor-neutral invariant: BMAD ships first because it has the documented bash seam today; OpenSpec/Spec Kit/Spec Kitty adapters follow the same pattern when their seams are as clean, and none is privileged in the copy.

Consequences

  • Positive. runward reaches operators inside the largest spec-driven orchestrator as a complement on their distribution; the layering story ("your orchestrator enforces the action, runward keeps the decision traced and its evidence verified") gets a working demonstration; the never-a-runtime line is preserved (a called reviewer, not a resident process).
  • Negative, accepted. The sample tracks BMAD's extension-point shape ({diff_output}/{spec_file} substitution, the [[workflow.review_layers]] schema); if BMAD changes it, the sample needs a refresh — bounded, since it is one inert block. A perception risk (endorsing a competitor) is outweighed by meeting operators where they are.
  • On other boundaries. templates/adapters/ gains the BMAD sample; EXPECTED_ADAPTERS, the adapters README, doctor and smoke follow; no change to the gate mechanics.

Reevaluation trigger (mandatory, dated)

Reopen if BMAD (or another orchestrator) turns its review seam into a real deterministic checker of its own (then the complement becomes redundant there — reassess), or if maintaining the sample against a competitor's schema churn costs more than the distribution returns.

Trigger set on: 2026-07-16 · Watched via: BMAD's review-layer schema across releases, and any signal of runward adoption arriving through the BMAD seam.

References

  • ADR-0012 — the gate-as-a-port and inert-adapter posture this extends to a competitor's seam.
  • ADR-0018 — the vendor-neutral, no-privileged-agent invariant.
  • BMAD bmad-code-review customize.toml [[workflow.review_layers]] — the documented extension point this adapter targets.
← All ADRs