runward 0.14.2 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +12 -5
  2. package/dist/cli.js +27 -2
  3. package/dist/commands/check.js +63 -21
  4. package/dist/commands/compliance.js +20 -8
  5. package/dist/commands/init.js +14 -2
  6. package/dist/commands/manifest.js +72 -0
  7. package/dist/commands/rules.js +76 -0
  8. package/dist/lib/compliance.js +40 -50
  9. package/dist/lib/conformance.js +62 -15
  10. package/dist/lib/constants.js +3 -3
  11. package/dist/lib/evidence.js +222 -0
  12. package/dist/lib/manifest-sync.js +111 -0
  13. package/dist/lib/mission.js +4 -1
  14. package/dist/lib/paths.js +3 -0
  15. package/dist/lib/regimes.js +32 -0
  16. package/dist/lib/rules.js +44 -0
  17. package/dist/lib/tools.js +16 -1
  18. package/dist/lib/verify-findings.js +24 -0
  19. package/examples/request-triage/AGENTS.md +33 -0
  20. package/examples/request-triage/code/README.md +74 -0
  21. package/examples/request-triage/code/package.json +19 -0
  22. package/examples/request-triage/code/src/adapters/hardcoded-account-registry.adapter.ts +23 -0
  23. package/examples/request-triage/code/src/adapters/in-memory-routing.adapter.ts +79 -0
  24. package/examples/request-triage/code/src/adapters/in-memory-triage-log.adapter.ts +42 -0
  25. package/examples/request-triage/code/src/adapters/keyword-model.adapter.ts +57 -0
  26. package/examples/request-triage/code/src/core/application/triage-request.usecase.ts +195 -0
  27. package/examples/request-triage/code/src/core/domain/guard.ts +121 -0
  28. package/examples/request-triage/code/src/core/domain/triage.ts +88 -0
  29. package/examples/request-triage/code/src/core/ports/account-registry.port.ts +15 -0
  30. package/examples/request-triage/code/src/core/ports/model-provider.port.ts +26 -0
  31. package/examples/request-triage/code/src/core/ports/routing.port.ts +32 -0
  32. package/examples/request-triage/code/src/core/ports/triage-log.port.ts +33 -0
  33. package/examples/request-triage/code/src/demo.ts +80 -0
  34. package/examples/request-triage/code/test/triage.test.ts +243 -0
  35. package/examples/request-triage/code/tsconfig.json +14 -0
  36. package/examples/request-triage/runward/adr/ADR-0003-port-placement-and-sovereignty.md +44 -0
  37. package/examples/request-triage/runward/architecture.md +4 -3
  38. package/examples/request-triage/runward/decision-matrix.md +1 -1
  39. package/examples/request-triage/runward/execution-topology.md +3 -3
  40. package/examples/request-triage/runward/floor.md +4 -4
  41. package/examples/request-triage/runward/handover.md +47 -0
  42. package/package.json +21 -8
  43. package/regimes/eu-ai-act@2024-1689.json +31 -0
  44. package/regimes/iso-42001@2023.json +22 -0
  45. package/regimes/nist-ai-rmf@1.0.json +19 -0
  46. package/templates/adapters/README.md +8 -0
  47. package/templates/adapters/gitlab-ci.yml +18 -0
  48. package/templates/adapters/kiro-hooks.json +12 -0
  49. package/templates/mission/architecture.md +2 -0
  50. package/templates/mission/execution-topology.md +2 -0
  51. package/templates/mission/floor.md +2 -0
  52. package/templates/mission/handover.md +52 -0
  53. package/templates/mission/threat-model.md +2 -0
  54. package/templates/rules/frontier-deterministic-boundary.md +1 -0
  55. package/templates/rules/handover-agents-charter-final.md +45 -0
  56. package/templates/rules/handover-redone-task-proof.md +46 -0
  57. package/templates/rules/handover-runbook-executable.md +50 -0
  58. package/templates/rules/handover-succession-named.md +46 -0
  59. package/templates/targets/AGENTS.md +2 -1
  60. package/templates/workflows/floor.md +1 -1
  61. package/templates/workflows/handover.md +7 -2
  62. package/templates/workflows/verify.md +2 -2
@@ -40,6 +40,8 @@ Risk is classed **by deployment, not by platform** (§15): the same platform hos
40
40
  ## Rule conformance
41
41
 
42
42
  > Account for every CRITICAL/HIGH craft rule mapped to the topology phase (`runward/rules/`, frontmatter `phases: [topology]`). `applied` needs a pointer; `deviated` needs an ADR; `n/a` needs a reason. `runward check --strict` verifies this table is complete — it checks a traced placement decision, not where you should run.
43
+ >
44
+ > Evidence can be **typed**, and typed pointers are verified deterministically at the gate: `file:PATH[:LINE][#SYMBOL]` · `test:PATH[::NAME]` · `adr:NNNN` — several per cell, separated by `;`. The gate checks resolution, non-emptiness, line count, symbol/test-name presence, and the rule's `signature:` when it declares one (ADR-0019/0020). Free prose stays valid — it is your judgment; a path it cites must simply not point at an empty file.
43
45
 
44
46
  | Rule | Status | Evidence |
45
47
  |---|---|---|
@@ -20,6 +20,8 @@
20
20
  ## Rule conformance
21
21
 
22
22
  > Account for every CRITICAL/HIGH craft rule mapped to the floor phase (`runward/rules/`, frontmatter `phases: [floor]`). Status: `applied` needs an evidence pointer (a `file:line` or a test); `deviated` needs an ADR reference; `n/a` needs a one-line reason. `runward check --strict` verifies this table is complete and well-formed — it does not judge your implementation; you do, at the gate.
23
+ >
24
+ > Evidence can be **typed**, and typed pointers are verified deterministically at the gate: `file:PATH[:LINE][#SYMBOL]` · `test:PATH[::NAME]` · `adr:NNNN` — several per cell, separated by `;`. The gate checks resolution, non-emptiness, line count, symbol/test-name presence, and the rule's `signature:` when it declares one (ADR-0019/0020). Free prose stays valid — it is your judgment; a path it cites must simply not point at an empty file.
23
25
 
24
26
  | Rule | Status | Evidence |
25
27
  |---|---|---|
@@ -0,0 +1,52 @@
1
+ # Hand-over Note
2
+
3
+ > **Usage.** Fill this note in phase 6 (`workflows/handover.md`), as the succession happens — not after. It is the kit made legible in one place: what is handed over, the proof that the receiving side can operate alone, and who owns the system now. `runward check --strict` verifies its conformance manifest; you transfer autonomy, not documents.
4
+
5
+ ## 1. The kit
6
+
7
+ One row per leave-behind. State is honest: a document nobody has exercised is `untested`, not `ready`.
8
+
9
+ | Artifact | Where | State | Exercised by the receiving side? |
10
+ |---|---|---|---|
11
+ | Recovery runbook | `runbook.md` | [ready \| untested] | [when / by whom, or not yet] |
12
+ | Agent charter (finalized) | `AGENTS.md` | [finalized at hand-over \| still the scaffold] | [—] |
13
+ | Architecture note + decision journal | `architecture.md` · `adr/` | [current \| stale] | [—] |
14
+ | Evaluation bench | [where it runs] | [ready \| untested] | [—] |
15
+ | Evidence pack | `compliance/` (regenerate on demand) | [—] | [—] |
16
+
17
+ ## 2. The redone task (the proof)
18
+
19
+ The hand-over is proven by a real task redone end to end **without the departing builder**. Record it here; point the manifest at this section.
20
+
21
+ - **Task**: [a real one from the mission's backlog — which change, run, fix or evaluation]
22
+ - **Date / doer**: [when, and who — explicitly without the builder in the loop]
23
+ - **Evidence**: [the artifact produced — a merged change, a report, a closed approval; a pointer the gate can verify]
24
+ - **Gaps found**: [every step the doer had to guess — each folded back into the runbook or charter before the gate is crossed]
25
+
26
+ ## 3. Succession
27
+
28
+ - **Owner after departure**: [named person or standing role — incidents, cost, keys, open ADR triggers]
29
+ - **Escalation path**: [who is called when the owner is not enough — security contact, sponsor, provider support]
30
+ - **Review cadence**: [when the usage registry, the ADR triggers and the evidence seal are re-read, and in which forum]
31
+ - **Credentials boundary**: [where the keys live, who rotates them; the builder's accesses revoked on — date]
32
+
33
+ ## 4. Provider-swap drill
34
+
35
+ The model is a replaceable adapter behind a port — proven, not assumed. Record the last drill: [date, from → to, what was re-run afterwards (the bench), result]. If never drilled, say so here and name the trigger that will force it.
36
+
37
+ ## Rule conformance
38
+
39
+ > Account for every CRITICAL/HIGH craft rule mapped to the handover phase (`runward/rules/`, frontmatter `phases: [handover]`). `applied` needs a pointer; `deviated` needs an ADR; `n/a` needs a reason. `runward check --strict` verifies this table is complete — it checks a traced succession, not whether the hand-over went well.
40
+ >
41
+ > Evidence can be **typed**, and typed pointers are verified deterministically at the gate: `file:PATH[:LINE][#SYMBOL]` · `test:PATH[::NAME]` · `adr:NNNN` — several per cell, separated by `;`. The gate checks resolution, non-emptiness, line count, symbol/test-name presence, and the rule's `signature:` when it declares one (ADR-0019/0020). Free prose stays valid — it is your judgment; a path it cites must simply not point at an empty file.
42
+
43
+ | Rule | Status | Evidence |
44
+ |---|---|---|
45
+ | [rule-slug] | applied \| deviated \| n/a | [pointer, ADR-id, or reason] |
46
+
47
+ ## Cross-references
48
+
49
+ - `workflows/handover.md` — the phase this note closes.
50
+ - `runbook.md` — the operational half of the kit; this note indexes, the runbook operates.
51
+ - `AGENTS.md` — the charter the next agent inherits.
52
+ - `adr/` — the open re-evaluation triggers the new owner now watches.
@@ -51,6 +51,8 @@
51
51
  ## Rule conformance
52
52
 
53
53
  > Account for every CRITICAL/HIGH craft rule mapped to the govern phase (`runward/rules/`, frontmatter `phases: [govern]`). `applied` needs a pointer; `deviated` needs an ADR; `n/a` needs a reason. `runward check --strict` verifies this table is complete — it checks a traced decision, not the quality of your governance.
54
+ >
55
+ > Evidence can be **typed**, and typed pointers are verified deterministically at the gate: `file:PATH[:LINE][#SYMBOL]` · `test:PATH[::NAME]` · `adr:NNNN` — several per cell, separated by `;`. The gate checks resolution, non-emptiness, line count, symbol/test-name presence, and the rule's `signature:` when it declares one (ADR-0019/0020). Free prose stays valid — it is your judgment; a path it cites must simply not point at an empty file.
54
56
 
55
57
  | Rule | Status | Evidence |
56
58
  |---|---|---|
@@ -3,6 +3,7 @@ title: Deterministic Boundary of the Model
3
3
  impact: CRITICAL
4
4
  asi: [ASI01]
5
5
  phases: [floor]
6
+ signature: assertGrounded|GroundingError|fail[-\s]?closed
6
7
  impactDescription: Keeps every fact, figure and decision that can be checked out of the model, so the system is verifiable and cannot hallucinate load-bearing values
7
8
  tags: [architecture, llm, frontier, grounding, safety, determinism]
8
9
  ---
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: The Agent Charter Is Finalized as the Leave-Behind
3
+ impact: HIGH
4
+ asi: [ASI10]
5
+ phases: [handover]
6
+ impactDescription: AGENTS.md leaves the mission as the standing constraint on every future agent — verification commands, judgment boundaries, never/PR rules — so the next agent inherits the discipline, not just the code
7
+ tags: [handover, agents-md, charter, governance, succession]
8
+ ---
9
+
10
+ ## The Agent Charter Is Finalized as the Leave-Behind
11
+
12
+ > **The next agent was not in the room.**
13
+ > Everything the mission learned about where agents must stop, ask, or prove is worthless if it leaves with the builder. `AGENTS.md` is where that judgment survives the succession — finalized, specific, and pointing at the gate.
14
+
15
+ During the mission, the charter accumulated defaults. At hand-over it must be **rewritten as the leave-behind**: the document a receiving team's agent reads on day one, with no builder nearby to fill the gaps. An inherited agent operating without a finalized charter is the quiet path to a rogue one (ASI10) — not through malice, but through inherited ambiguity: nothing says what it may touch, what proves its work, or when it must stop and ask a human.
16
+
17
+ **What "finalized" means, concretely:**
18
+
19
+ - **Verification commands, exact.** The charter names how work is proven here — `runward check --strict` at minimum, the behavioral proof command, the evaluation bench. An agent that cannot verify will assert.
20
+ - **Judgment boundaries, mission-specific.** Not the scaffold's generic five: the boundaries this mission actually discovered — which data classes are untouchable, which actions are approval-gated, which files no agent edits.
21
+ - **Never / PR rules.** What is never done autonomously, and what always goes through a reviewed change — stated as rules, not anecdotes.
22
+ - **The pointers resolve.** The workflows, rules and deliverables the charter cites still exist where it says — typed evidence in the manifest lets the gate verify that.
23
+
24
+ **Incorrect:**
25
+
26
+ ```markdown
27
+ | handover-agents-charter-final | applied | AGENTS.md exists since init |
28
+ ```
29
+
30
+ Existing since `init` is the opposite of the point: the scaffold is the starting text, the leave-behind is the mission's learned judgment.
31
+
32
+ **Correct:**
33
+
34
+ ```markdown
35
+ | handover-agents-charter-final | applied | file:AGENTS.md#Non-negotiable — finalized at hand-over: verification commands (check --strict + npm test + bench), the two mission-specific boundaries (registry data read-only; compliance-flagged routing always approval-gated), never/PR rules |
36
+ ```
37
+
38
+ **Checklist:**
39
+
40
+ - [ ] The charter was re-edited at hand-over, not merely left as scaffolded.
41
+ - [ ] Verification commands are exact and were run by the receiving side (see the redone task).
42
+ - [ ] Mission-specific boundaries and never/PR rules are present and dated.
43
+ - [ ] Every path the charter cites resolves — the manifest points at the charter with typed evidence.
44
+
45
+ **Where this sits in the Runward method:** ADR-0010 made `AGENTS.md` a first-class hand-over deliverable; ADR-0026 makes its finalization a gated fact. The charter is how the mission's judgment outlives the mission.
@@ -0,0 +1,46 @@
1
+ ---
2
+ title: The Redone-Task Proof
3
+ impact: CRITICAL
4
+ asi: [ASI09]
5
+ phases: [handover]
6
+ impactDescription: A hand-over is proven by a real task redone end to end without the departing builder — recorded, dated, pointed at — so autonomy is a fact, not a farewell promise
7
+ tags: [handover, succession, autonomy, proof, transmission]
8
+ ---
9
+
10
+ ## The Redone-Task Proof
11
+
12
+ > **You transfer autonomy, not documents.**
13
+ > The hand-over is proven the day the receiving side redoes a real task, end to end, without the person who built the system. Until that has happened and been recorded, the succession is a hope with a runbook attached.
14
+
15
+ A kit can be complete and dead: every document present, nobody able to act. The only observable that distinguishes a live succession from a paper one is the **redone task** — a real change, run, fix or evaluation executed by the receiving team alone, from the leave-behinds, with the builder unavailable by agreement.
16
+
17
+ **What the record must carry** (in `handover.md`, the proof record):
18
+
19
+ - **The task** — a real one from the mission's actual work, not a rehearsed demo. Fixing a routing rule, re-running the evaluation bench after a model swap, processing a suspended approval, resuming from a checkpoint: something that exercises the runbook, the code and a decision.
20
+ - **The date and the doer** — who redid it, when, explicitly without the builder in the loop.
21
+ - **The evidence** — a pointer the gate can verify (`file:`, `test:`, or the artifact the task produced). "It went fine" is not evidence; the merged change, the produced report, the closed approval is.
22
+ - **What broke, honestly** — every step where the doer had to guess is a defect in the kit. Route each one back into the runbook or the charter before the gate is crossed.
23
+
24
+ **Incorrect:**
25
+
26
+ ```markdown
27
+ | handover-redone-task-proof | applied | the team is confident and has been walked through everything twice |
28
+ ```
29
+
30
+ A walkthrough is the builder performing; the proof is the builder absent.
31
+
32
+ **Correct:**
33
+
34
+ ```markdown
35
+ | handover-redone-task-proof | applied | file:runward/handover.md#Redone-task — 2026-06-28, ops engineer re-ran the eval bench after the provider swap, alone, from runbook §4; report at code/eval/reports/2026-06-28.md; two runbook gaps found and fixed |
36
+ ```
37
+
38
+ **Checklist:**
39
+
40
+ - [ ] The task was real mission work, chosen from the backlog, not staged.
41
+ - [ ] The builder was genuinely out of the loop (agreed beforehand, verifiable).
42
+ - [ ] The record names task, date, doer, and points at the produced artifact.
43
+ - [ ] Every gap the doer hit was folded back into the runbook or charter.
44
+ - [ ] The record lives in `handover.md` where `runward check --strict` reads it.
45
+
46
+ **Where this sits in the Runward method:** phase 6 is where every other scaffold has already stopped. This rule is the difference between handing over a repository and handing over a running responsibility — and it is why the hand-over claim is gated, not narrated (ADR-0026).
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: The Runbook Is Executable, Not Descriptive
3
+ impact: HIGH
4
+ asi: [ASI08]
5
+ phases: [handover]
6
+ impactDescription: The recovery runbook carries real commands for the gestures that matter at 3 a.m. — start, observe, debug, resume, swap the provider, rerun the bench, process a suspended approval — so an incident meets procedures, not prose
7
+ tags: [handover, runbook, operations, recovery, resilience]
8
+ ---
9
+
10
+ ## The Runbook Is Executable, Not Descriptive
11
+
12
+ > **A runbook is judged at 3 a.m., by someone who was not there when the system was built.**
13
+ > Every gesture it promises must be a command that runs, a path that exists, a signal that can actually be read — not a paragraph explaining that such things are possible.
14
+
15
+ Agentic systems fail in cascades (ASI08): a provider degrades, a queue backs up, an approval hangs, and the operator's margin is measured in minutes. The runbook is the artifact that converts a cascade into a sequence of known gestures. A descriptive runbook — "the system can be restarted; logs are available" — is a cascade accelerant: it costs the reader the minutes it pretends to save.
16
+
17
+ **The seven gestures the runbook must carry, each with its real command or path:**
18
+
19
+ 1. **Start / stop** — the exact commands, including the safe-stop that drains instead of kills.
20
+ 2. **Observe** — where the structured logs and metrics are, and the one query that answers "is it healthy?".
21
+ 3. **Debug a trajectory** — how to reconstruct a full run from one request ID.
22
+ 4. **Resume from a checkpoint** — where suspended state lives and the command that rehydrates it.
23
+ 5. **Swap the model provider** — the adapter switch, the config to change, and what to re-run afterwards.
24
+ 6. **Rerun the evaluation bench** — the command, and where the report lands.
25
+ 7. **Process a suspended approval** — where it queues, who may approve, the command or UI path that releases it.
26
+
27
+ **Incorrect:**
28
+
29
+ ```markdown
30
+ ## Recovery
31
+ The system is resilient and can be restarted. Observability is in place.
32
+ ```
33
+
34
+ **Correct:**
35
+
36
+ ```markdown
37
+ ## 4. Resume from a checkpoint
38
+ Suspended runs live in var/journal/ (one file per request ID).
39
+ npm run resume -- --request <id>
40
+ Verify: the trajectory for <id> continues in the structured log within 30 s.
41
+ ```
42
+
43
+ **Checklist:**
44
+
45
+ - [ ] All seven gestures present, each with a command or concrete path — no gesture "described" without one.
46
+ - [ ] Commands were executed at least once by someone other than their author (the redone task is the natural occasion).
47
+ - [ ] The runbook names its own verification: how the reader confirms each gesture worked.
48
+ - [ ] Paths and commands are pointed at from the manifest with typed evidence, so the gate catches drift when they move.
49
+
50
+ **Where this sits in the Runward method:** the runbook is scaffolded at `init` and demanded by the hand-over workflow since day one; this rule makes its *executability* a gated fact (ADR-0026) instead of a review opinion.
@@ -0,0 +1,46 @@
1
+ ---
2
+ title: The Succession Is Named
3
+ impact: HIGH
4
+ asi: []
5
+ phases: [handover]
6
+ impactDescription: The system leaves the mission with a named owner, an escalation path and a review cadence — an unowned agentic system in production is an incident with a start date
7
+ tags: [handover, ownership, succession, governance, operations]
8
+ ---
9
+
10
+ ## The Succession Is Named
11
+
12
+ > **Systems do not stay owned by default; they become orphans by default.**
13
+ > The day the builder leaves, either a named person owns the system — its budget, its keys, its incidents, its re-evaluation triggers — or nobody does, and every ADR trigger, every drift signal, every suspended approval now fires into a void.
14
+
15
+ runward's whole discipline rests on someone reading the signals: re-evaluation triggers are *watched*, drift is *re-verified*, approvals are *processed*, the usage registry is *reviewed*. Those are verbs with a subject. Hand-over is the moment the subject changes — and the moment it silently becomes no one, unless the succession is written down where the gate can see it.
16
+
17
+ **What the record must carry** (in `handover.md`):
18
+
19
+ - **The owner** — a named person or standing role (not "the team") who owns the system after the departure: incidents, cost, keys, and the decision journal's open triggers.
20
+ - **The escalation path** — who is called when the owner is not enough: security contact, sponsor, provider support entry points.
21
+ - **The review cadence** — when the usage registry, the ADR triggers and the evidence seal are re-read (the iterate-gate rhythm surviving the builder), and in which forum.
22
+ - **The credentials boundary** — where the keys live and who may rotate them; the departing builder's accesses are revoked as part of the hand-over, and the record says so.
23
+
24
+ **Incorrect:**
25
+
26
+ ```markdown
27
+ | handover-succession-named | applied | the team owns it going forward |
28
+ ```
29
+
30
+ A team is not a subject; "going forward" is not a cadence.
31
+
32
+ **Correct:**
33
+
34
+ ```markdown
35
+ | handover-succession-named | applied | file:runward/handover.md#Succession — owner: ops lead (named); escalation: security officer, then sponsor; registry + ADR triggers reviewed monthly in the ops review; builder's accesses revoked 2026-06-30 |
36
+ ```
37
+
38
+ **Checklist:**
39
+
40
+ - [ ] One named owner (person or standing role) — for incidents, cost, keys and open ADR triggers.
41
+ - [ ] An escalation path with real names or roles, reachable.
42
+ - [ ] A written cadence for re-reading the registry, the triggers and the seal.
43
+ - [ ] The builder's credentials revoked, and the revocation recorded.
44
+ - [ ] The record lives in `handover.md`, verified by `runward check --strict`.
45
+
46
+ **Where this sits in the Runward method:** governance from day zero only matters if it survives day last. This rule is the difference between transmitting a system and abandoning it politely (ADR-0026).
@@ -12,7 +12,7 @@ This project is delivered with the Runward method: floor first, evolution on evi
12
12
 
13
13
  ## How to work
14
14
 
15
- - Apply the craft rules in `runward/rules/` while building — and confront them at the point of action, not from memory. Each rule declares where it applies (`phases:`); a build phase surfaces its CRITICAL/HIGH rules to open and account for in the deliverable's `Rule conformance` manifest: `applied` with a `file:line` or test, `deviated` with an ADR, `n/a` with a reason. When a rule and a habit conflict, the rule wins; deviating requires an ADR. `runward check --strict` verifies the manifest is complete it checks that a decision was traced, never the quality of the code; you judge that at the gate. When the gate is green, run `runward/workflows/verify.md` before crossing: an advisory, adversarial cite-vs-apply pass (ideally on a different model) that judges whether the code an `applied` row points at actually applies the rule or merely cites it. It is advisory — it never blocks the gate (ADR-0007).
15
+ - Apply the craft rules in `runward/rules/` while building — and confront them at the point of action, not from memory (`runward explain <rule>` prints a rule's why and full text). Each rule declares where it applies (`phases:`); a build phase surfaces its CRITICAL/HIGH rules to open and account for in the deliverable's `Rule conformance` manifest. `runward manifest --sync` scaffolds the missing rows; you fill the decision: `applied` with a **typed pointer the gate verifies** — `file:PATH[:LINE][#SYMBOL]`, `test:PATH[::NAME]`, `adr:NNNN` (or prose, which stays the operator's judgment) — `deviated` with an ADR, `n/a` with a real reason. A signed rule (frontmatter `signature:`) needs evidence whose content matches its signature; a pointer at an empty or vanished file fails the gate. When a rule and a habit conflict, the rule wins; deviating requires an ADR. `runward check --strict` verifies the manifest and the evidence's shape never the quality of the code; you judge that at the gate. When the gate is green, run `runward/workflows/verify.md` before crossing: an advisory, adversarial cite-vs-apply pass (ideally on a different model) that judges whether the code an `applied` row points at actually applies the rule or merely cites it, and records its findings in `runward/governance/verify-findings.md`. It is advisory — it never blocks the gate (ADR-0007). Once the operator crosses, they may seal the evidence with `runward check --freeze` (ADR-0021).
16
16
  - Consult `runward/decision-matrix.md` before adding any capability: 22 arbitrations, each with a sober default and an explicit trigger. No trigger, no change.
17
17
  - Before any structural decision, run `runward/workflows/decision-loop.md`: verify in the real code, check the sourced state of the art, challenge the source, take a durable position, lock it in an ADR — only then edit.
18
18
  - One ADR per structural decision, in `runward/adr/`, with a dated re-evaluation trigger. Use the template `runward/adr/ADR-0000-template.md`.
@@ -31,3 +31,4 @@ This project is delivered with the Runward method: floor first, evolution on evi
31
31
  | `runward/adr/` | Decision journal |
32
32
  | `runward/governance/` | Threat model, evaluation rubric, observability schema |
33
33
  | `runward/runbook.md` | Recovery runbook for the receiving team |
34
+ | `runward/handover.md` | The succession record: kit index, redone-task proof, named owner — gated at phase 6 |
@@ -21,7 +21,7 @@ Use this workflow once the architecture is fixed and building must start: "what
21
21
 
22
22
  **Start from the reference floor, not a blank page.** The starting point is the reference floor (`floor-ts/` in the Runward repository): a clonable hexagonal scaffold that already carries the pure domain, the ports, the adapters, and the middleware chain, with a principle-to-code table mapping each principle to where it lives in the code. Clone it, implement the project's concrete adapters behind the ports fixed in `architect`, and leave intact the structure that keeps the domain testable without the model. Do not reinvent the skeleton; populate it.
23
23
 
24
- **Confront the floor's craft rules at the point of building.** Before writing each piece, open the CRITICAL/HIGH rules mapped to the floor phase — `runward/rules/`, frontmatter `phases: [floor]`: the deterministic frontier guard, the model port and its keyless fallback, provider auto-detection, secrets boundary, prompt-injection defense, the hexagonal architecture and adapter pattern, the event-sourced journal, tool-scope atomicity. Do not work from their names — read them. Account for each in the `Rule conformance` manifest of the floor note: `applied` with a `file:line` or test, `deviated` with an ADR, or `n/a` with a reason. `runward check --strict` verifies that manifest is complete and well-formed (it checks that a decision was traced, never the quality of the code — you judge that at the gate).
24
+ **Confront the floor's craft rules at the point of building.** Before writing each piece, open the CRITICAL/HIGH rules mapped to the floor phase — `runward/rules/`, frontmatter `phases: [floor]`: the deterministic frontier guard, the model port and its keyless fallback, provider auto-detection, secrets boundary, prompt-injection defense, the hexagonal architecture and adapter pattern, the event-sourced journal, tool-scope atomicity. Do not work from their names — read them. Account for each in the `Rule conformance` manifest of the floor note: `applied` with a `file:line` or test, `deviated` with an ADR, or `n/a` with a reason. Prefer **typed pointers** — `file:PATH[:LINE][#SYMBOL]`, `test:PATH[::NAME]`, `adr:NNNN`, several per cell separated by `;` — the gate verifies them deterministically: resolution, non-empty content, symbol/test-name presence, and the rule's `signature:` when it declares one (ADR-0019/0020). `runward check --strict` verifies that manifest is complete and well-formed (it checks that a decision was traced and points at something real, never the quality of the code — you judge that at the gate).
25
25
 
26
26
  **Build exactly these six pieces, and nothing more.**
27
27
 
@@ -8,12 +8,13 @@ Use this workflow when a delivery approaches its end or a team must become self-
8
8
 
9
9
  - The artifacts of prior phases: architecture note, floor, ADR journal, threat model, evaluation rubric, observability schema.
10
10
  - A receiving team with time allocated for transfer sessions.
11
- - The `mission/runbook.md` template.
11
+ - The `mission/runbook.md` and `mission/handover.md` templates.
12
12
 
13
13
  ## Outputs
14
14
 
15
15
  - A handover kit (below).
16
16
  - A demonstrated proof of autonomy.
17
+ - The hand-over note (`mission/handover.md`): the kit indexed, the redone-task proof recorded, the succession named, the provider-swap drill logged — the gated deliverable of this phase.
17
18
 
18
19
  ## Procedure
19
20
 
@@ -36,11 +37,15 @@ Use this workflow when a delivery approaches its end or a team must become self-
36
37
 
37
38
  **Capitalize upward.** What repeats deserves standardizing. Escalate recurring patterns to whoever can industrialize them: an evolution trigger observed several times, an adapter rewritten identically across missions, a recurring guardrail. Feed proven arbitrations back into the decision matrix and the workflow files — the corpus hardens mission after mission. What gets capitalized is never the prototype (replaceable); it is the architecture and the method (owned).
38
39
 
39
- **Verify the Definition of Done explicitly.** The phase is done when the receiving team redoes a task alone, end to end, demonstrated a sign-off or a training session does not count. The team, without you: starts the system, observes it, debugs an incident, adds an evaluation scenario, and decides a switch by leaning on the ADRs. All of it demonstrated, not promised.
40
+ **Record the succession in the hand-over note.** Fill `mission/handover.md` as the succession happens: the kit index with honest states, the redone-task proof (task, date, doer, evidence, gaps folded back), the named owner with escalation path and review cadence, the provider-swap drill. Confront the CRITICAL/HIGH rules mapped to the handover phase (`runward/rules/`, `phases: [handover]`) and account for each in the note's `Rule conformance` manifest `runward check --strict` verifies it, down to the typed evidence pointers.
41
+
42
+ **Verify the Definition of Done explicitly.** The phase is done when the receiving team redoes a task alone, end to end, demonstrated — a sign-off or a training session does not count. The team, without you: starts the system, observes it, debugs an incident, adds an evaluation scenario, and decides a switch by leaning on the ADRs. All of it demonstrated, not promised — and recorded in the hand-over note, where the gate reads it.
40
43
 
41
44
  ## Definition of Done
42
45
 
43
46
  - Handover kit complete: assets, architecture note, ADR journal, runbook, proof in code, and the finalized `AGENTS.md` charter (the harness-neutral leave-behind).
47
+ - Hand-over note produced (`mission/handover.md`): kit indexed, redone-task proof recorded, succession named, provider-swap drill logged.
48
+ - Every handover CRITICAL/HIGH rule accounted for in the note's conformance manifest (`runward check --strict`).
44
49
  - Transfer sessions held with the team operating, not observing.
45
50
  - The team has repeated at least one real task end to end, alone — demonstrated, witnessed, recorded.
46
51
  - Recurring patterns escalated and fed back into the framework's templates.
@@ -17,12 +17,12 @@ It is **advisory**. It produces findings, never a verdict that gates. `runward c
17
17
 
18
18
  **Return a finding per row**: `confirmed` (the code applies the rule), `cited-not-applied` (the row claims applied but the code does not carry the rule), or `uncertain` (needs a human look). Deduplicate overlapping findings; group them by severity.
19
19
 
20
- **Hand the findings to the operator.** They are input to the operator's gate decision, not a gate of their own. A `cited-not-applied` finding is a prompt to fix the code (or downgrade the row to `deviated`/`n/a`) and re-run `check --strict` — never a silent override of the deterministic gate.
20
+ **Write the findings, then hand them to the operator.** Record the pass in `runward/governance/verify-findings.md`: a dated header (date, model used, manifests reviewed) and one line per `applied` row — `rule · finding · pointer · one-line reason`. A green `check --strict` surfaces this artifact's presence and freshness (stale once a gated manifest changes); it never reads a verdict out of it. The findings are input to the operator's gate decision, not a gate of their own. A `cited-not-applied` finding is a prompt to fix the code (or downgrade the row to `deviated`/`n/a`) and re-run `check --strict` — never a silent override of the deterministic gate.
21
21
 
22
22
  ## Definition of Done
23
23
 
24
24
  - Every `applied` row reviewed, with a confirmed / cited-not-applied / uncertain finding.
25
- - Findings handed to the operator; no exit code produced, no gate blocked.
25
+ - Findings written to `runward/governance/verify-findings.md` (dated) and handed to the operator; no exit code produced, no gate blocked.
26
26
  - Any `cited-not-applied` finding routed back to the code and re-checked deterministically.
27
27
 
28
28
  ## Anti-patterns