Both visions, one gated path.
The doctrine governs two visions behind the same ports: what the system does, and where it runs. runward carried only the first. It now carries both, in one gated path. Deterministic, never a runtime: it traces the placement decision, it deploys nothing.
Topology was an orphan
The doctrine's section 15, the shared building blocks, existed in runward only as a shared-bricks.md template: scaffolded, but produced by no workflow and verified by no gate. runward faithfully reproduced the doctrine's own defect: infrastructure relegated to the end, decoupled from the port-by-port flow. On the ground, an architect could not link the two visions inside runward, because the applicative side was a gated path end-to-end while the infra side was an isolated note beside it.
The port is the bridge
The doctrine is clear: deployment topology is an adapter decision, made behind a stable contract. A service is just an adapter that has migrated into its own process; the domain does not change. So the port is the bridge between the two visions. A new deliverable, execution-topology.md, makes it legible: per port, its adapter, its location family, the class of data crossing it, its sovereignty, its ADR and its re-evaluation trigger. Plus a usage registry, because risk is classified per deployment, not per platform.
A first-class gate
execution-topology.md becomes a gated deliverable with its own conformance phase, topology, symmetric with architect, floor and govern. runward check --strict now verifies four deterministic rules: each port's placement, sovereignty by class of data, the trace-export decision, and the presence of the usage registry. Each proves a traced decision, never a real infra state.
A deliberate choice for a finished product, no workaround: gate the decision where it lives, don't fold it elsewhere. And the invariant holds. "Never a runtime" does not mean "ignore topology": the topology decision is a decision, and a traced decision is exactly what the gate verifies.
Decided before the code (ADR-0017), grounded in the doctrine, proven by the test suite. runward's own method, applied to runward.
Install: npx runward init
Release v0.12.0 on GitHub · CHANGELOG
← All news