runward 0.14.1 → 0.14.2

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.
@@ -166,4 +166,13 @@ export async function checkCommand(opts) {
166
166
  console.log("\n" + status.warning(`${parts.join(" · ")}. No phase closes without its artifact — and, under --strict, without its CRITICAL/HIGH rules accounted for.`));
167
167
  process.exitCode = 1;
168
168
  }
169
+ // Transmission surface: name the next gesture, so the operating agent can hand the human a decision.
170
+ console.log(section("Next"));
171
+ if (gaps === 0 && strictGaps === 0 && hookFailed === 0) {
172
+ console.log(` Assemble the evidence pack with ${c.primary("runward compliance <regime>")} ${c.darkGray("(iso-42001 · nist-ai-rmf · eu-ai-act), or")} ${c.primary("runward status")} ${c.darkGray("for a handover snapshot.")}`);
173
+ }
174
+ else {
175
+ console.log(` Fill the deliverable(s) named above, then re-run ${c.primary("runward check")}. ${c.primary("runward status")} ${c.darkGray("names exactly what is open at the current gate.")}`);
176
+ }
177
+ console.log();
169
178
  }
@@ -5,7 +5,7 @@ import { TEMPLATES, MISSION_LAYOUT, VERSION, WORKFLOWS } from "../lib/paths.js";
5
5
  import { EXPECTED_RULES, EXPECTED_MAPPED, EXPECTED_ADAPTERS } from "../lib/constants.js";
6
6
  import { expectedRules } from "../lib/conformance.js";
7
7
  import { findMissionRoot } from "../lib/mission.js";
8
- import { createHeader, section, status } from "../lib/styles.js";
8
+ import { c, createHeader, section, status } from "../lib/styles.js";
9
9
  /**
10
10
  * Environment and installation checks.
11
11
  * Exit codes: 0 = all good, 1 = warnings, 2 = critical failure.
@@ -80,5 +80,10 @@ export async function doctorCommand() {
80
80
  }
81
81
  else
82
82
  console.log(" " + status.success("all checks passed"));
83
+ // Transmission surface: name the next gesture.
84
+ console.log(section("Next"));
85
+ console.log(" " + (root
86
+ ? `Run ${c.primary("runward check")} to see which gate this mission is at.`
87
+ : `Run ${c.primary("runward init")} to scaffold a mission, then ${c.primary("runward check")} to see where you stand.`));
83
88
  console.log();
84
89
  }
@@ -45,5 +45,9 @@ export async function updateCommand(opts) {
45
45
  }
46
46
  console.log(section("Summary"));
47
47
  console.log(` ${status.success(`${same} up to date`)} ${added ? status.info(`${added} added`) + " " : ""}${drifted ? status.warning(`${drifted} drifted${opts.force ? " (overwritten)" : ""}`) : ""}`);
48
- console.log(c.darkGray("\n Mission state (framing, architecture, ADRs, governance) is never touched by update.\n"));
48
+ console.log(c.darkGray("\n Mission state (framing, architecture, ADRs, governance) is never touched by update."));
49
+ // Transmission surface: name the next gesture.
50
+ console.log(section("Next"));
51
+ console.log(` Re-run ${c.primary("runward check")} to re-verify the gate against the refreshed rules and workflows.`);
52
+ console.log();
49
53
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runward",
3
- "version": "0.14.1",
3
+ "version": "0.14.2",
4
4
  "description": "After the spec: ship and run. A delivery framework for agentic systems — floor first, evolution on evidence, governance from day zero, handover with proof.",
5
5
  "keywords": [
6
6
  "agentic",
@@ -1,89 +0,0 @@
1
- # EU AI Act — Annex IV technical documentation — assessment-readiness draft
2
-
3
- > **Draft, incomplete — not a conformity assessment.** Assembled by `runward compliance eu-ai-act` on 2026-07-13,
4
- > deterministically from ratified engineering artifacts (no model call). High-risk obligations bind from
5
- > **2 August 2026** (Annex III). This populates Annex IV Point 2 (design & validation) and the design-rationale
6
- > history; it does **not** satisfy art. 12 runtime logging, and it is not a signed declaration of conformity.
7
- > Verify against the Official Journal text before filing.
8
-
9
- ## Annex IV coverage map
10
-
11
- | Annex IV point | runward supplies | Required from the provider |
12
- |---|---|---|
13
- | 1. General description | UI, HW/SW/firmware notes | intended purpose, provider, versioning, distribution |
14
- | 2. Elements & development | **architecture, validation procedures + metrics, cybersecurity (manifest + rubric + threat model); design choices, alternatives, assumptions, pre-determined changes = the ADR journal** | third-party sourcing/licensing, sign-off on test logs |
15
- | 3. Monitoring & control | accuracy characterization, input-data specs, oversight tooling | fundamental-rights / discrimination risk sourcing |
16
- | 4. Performance metrics | metric-choice justification (rubric) | — |
17
- | 5. Risk management (art. 9) | technical inputs (threat model, testing) | **risk acceptance / RMS governance** |
18
- | 6. Lifecycle changes | engineering change record (ADR journal) | release/change-management governance |
19
- | 7. Harmonised standards | technical notes | **standards selection** (compliance strategy) |
20
- | 8. Declaration of conformity | — | **signed legal act (art. 47)** |
21
- | 9. Post-market monitoring | telemetry/logging backbone | **post-market monitoring plan (art. 72)** |
22
-
23
- ## Point 2 — design decisions (ADR journal, near-verbatim to the Annex IV requirement)
24
-
25
- | ADR | Status |
26
- |---|---|
27
- | ADR-0001: single orchestrator, sequential triage (`ADR-0001-single-orchestrator.md`) | accepted |
28
- | ADR-0002: deterministic guard on model-extracted fields (`ADR-0002-deterministic-guard-on-extracted-fields.md`) | accepted |
29
-
30
- ## Agentic-risk coverage (OWASP ASI → Point 2 cybersecurity / Point 5 risk)
31
-
32
- | ASI | Risk | Rules addressing it |
33
- |---|---|---|
34
- | ASI01 | Agent Goal Hijack | `frontier-deterministic-boundary`, `hexa-move-deterministic-out`, `security-prompt-injection` |
35
- | ASI02 | Tool Misuse & Exploitation | `checklist-pre-production-security`, `hexa-move-deterministic-out`, `resilience-fail-open`, `security-code-execution-sandbox`, `security-tool-change-reapproval`, `tools-registry-pattern`, `tools-scope-atomicity` |
36
- | ASI03 | Identity & Privilege Abuse | `checklist-pre-production-security`, `config-secrets-boundary`, `tools-registry-pattern` |
37
- | ASI04 | Agentic Supply Chain Vulnerabilities | `contracts-governance`, `resilience-multi-provider-fallback`, `security-mcp-server-pinning`, `security-tool-change-reapproval` |
38
- | ASI05 | Unexpected Code Execution | `security-code-execution-sandbox` |
39
- | ASI06 | Memory & Context Poisoning | `checklist-pre-production-security`, `data-memory-provenance`, `patterns-memory-router-tiered`, `security-prompt-injection`, `state-event-sourcing` |
40
- | ASI07 | Insecure Inter-Agent Communication | `contracts-governance` |
41
- | ASI08 | Cascading Failures | `async-job-guardrails`, `checklist-pre-production-resilience`, `eval-loop`, `resilience-fail-open`, `resilience-multi-provider-fallback`, `resilience-retry-backoff`, `scaling-distributed-rate-limiting` |
42
- | ASI09 | Human-Agent Trust Exploitation | `security-human-agent-trust` |
43
- | ASI10 | Rogue Agents | `config-secrets-boundary`, `scaling-distributed-rate-limiting`, `security-mcp-server-pinning` |
44
-
45
- ## Control-implementation status (feeds Point 2 validation)
46
-
47
- | Rule | Status | Evidence | Phase |
48
- |---|---|---|---|
49
- | `contracts-governance` | applied | §3 TriageRecord v1.0 — versioned, additive, tolerant reader, fail-closed; contracts/ | Architect |
50
- | `hexa-architecture` | applied | §2 pure triage domain, four ports; code/src/core/ | Architect |
51
- | `hexa-adapter-pattern` | applied | §3 every dependency behind a port; code/src/adapters/ | Architect |
52
- | `hexa-typescript-native` | n/a | language deliberately left open at this note (§5); locked at floor kickoff (ADR-0003 pending) | Architect |
53
- | `process-adr-and-journal` | applied | adr/ADR-0001, adr/ADR-0002 — dated decisions with reevaluation triggers | Architect |
54
- | `security-mcp-server-pinning` | n/a | the floor consumes no MCP or external tool server; tools are in-process and deterministic | Architect |
55
- | `topology-port-placement-mapped` | applied | §2 map — all four ports placed; the two non-in-app placements (ModelPort → managed vendor runtime under an approved deployment, RoutingPort → existing ticketing infra) are recorded in architecture.md §2 and the legacy-integration note | Topology |
56
- | `topology-sovereignty-by-data-class` | applied | §2 map — a data class and a sovereignty level per port; request text is bound to the approved model deployment (residency), the TriageRecord is kept internal | Topology |
57
- | `topology-trace-export-decision` | n/a | the floor exports no execution traces to a third party; observability is in-app structured logs per governance/observability-schema.md | Topology |
58
- | `topology-usage-registry-present` | applied | §3 usage registry — the single prod deployment with its risk class, data classes, action scopes and owner | Topology |
59
- | `frontier-deterministic-boundary` | applied | code/src/core/domain/guard.ts — every action-bearing field recomputed/verified (ADR-0002), fail-closed | Floor |
60
- | `hexa-move-deterministic-out` | applied | code/src/core/domain/guard.ts + keyword classifier — classification and validation are deterministic | Floor |
61
- | `config-secrets-boundary` | n/a | the illustrative floor runs the deterministic keyword classifier; no provider secret is read in this example code | Floor |
62
- | `provider-llm-auto-detection` | n/a | only the deterministic keyword adapter ships here; no real provider to auto-detect | Floor |
63
- | `security-prompt-injection` | applied | threat-model §3 + ADR-0002 — model-proposed values never act; request text is data, not instruction | Floor |
64
- | `hexa-architecture` | applied | code/src/core/ pure domain behind four ports | Floor |
65
- | `hexa-adapter-pattern` | applied | code/src/adapters/ — mailbox/web, keyword-model, routing, log behind ports | Floor |
66
- | `provider-no-crash-missing-env` | applied | code/src/adapters/keyword-model.adapter.ts — deterministic fallback runs with no key | Floor |
67
- | `state-event-sourcing` | applied | code/src/adapters/in-memory-triage-log.adapter.ts — append-only, keyed by request ID | Floor |
68
- | `tools-scope-atomicity` | applied | architecture §2 middleware chain + approval on RoutingPort for compliance records | Floor |
69
- | `eval-loop` | applied | evaluation-rubric.md — abstention scenarios, guard-escalation rate watched off the hot path | Govern |
70
- | `security-prompt-injection` | applied | §3 guardrails — untrusted request text is data; deterministic guard before RoutingPort (ADR-0002) | Govern |
71
- | `config-secrets-boundary` | n/a | the illustrative floor reads no provider secret (deterministic keyword classifier) | Govern |
72
- | `resilience-fail-open` | applied | §3 — sensitive routing fails closed; the guard rejects on doubt (ADR-0002) | Govern |
73
- | `resilience-multi-provider-fallback` | n/a | single deterministic classifier; no second provider in this floor | Govern |
74
- | `resilience-retry-backoff` | n/a | in-memory adapters; no external call to retry in the shipped floor | Govern |
75
- | `async-job-guardrails` | n/a | synchronous request triage; no background jobs at the floor | Govern |
76
- | `security-mcp-server-pinning` | n/a | no MCP or external tool server consumed at the floor | Govern |
77
- | `security-tool-change-reapproval` | n/a | tools are in-process and deterministic; no signed external tool to re-approve | Govern |
78
- | `data-memory-provenance` | n/a | no persistent memory; each request is triaged independently (named deferral) | Govern |
79
- | `security-code-execution-sandbox` | n/a | the floor runs no model-generated or tool-invoked code; the classifier is deterministic in-process code and RoutingPort calls a typed ticketing API, not code | Govern |
80
- | `security-human-agent-trust` | applied | §3 — each TriageRecord field carries a provenance marker (computed / verified / model-proposed); RoutingPort approval on a compliance-flagged record shows provenance before the human decides (ADR-0002) | Govern |
81
-
82
- ## Required from the provider (runward cannot produce this)
83
-
84
- - **Point 1** general description (intended purpose, provider, versioning) · **Point 5** RMS governance & risk acceptance (art. 9).
85
- - **Point 7** harmonised-standards selection · **Point 8** the signed **EU declaration of conformity** (art. 47) · **Point 9** the **post-market monitoring plan** (art. 72).
86
- - **Art. 12 runtime event logs** — produced by the running system, not by runward.
87
-
88
- _Engineering framing, not legal advice; Annex IV wording moves — confirm against the Official Journal (Reg. (EU) 2024/1689) before filing._
89
-
@@ -1,209 +0,0 @@
1
- {
2
- "component-definition": {
3
- "uuid": "748fac1c-a21c-5282-8140-b77323a0e7da",
4
- "metadata": {
5
- "title": "runward — agentic-security control evidence (request-triage)",
6
- "last-modified": "2026-07-13T00:00:00Z",
7
- "version": "2026-07-13",
8
- "oscal-version": "1.1.2",
9
- "remarks": "Assessment-readiness DRAFT, assembled deterministically by runward from ratified engineering artifacts (rule to OWASP ASI mapping, conformance manifest, ADR journal). Supporting evidence only — NOT a compliance claim, NOT a certification, NOT a conformity assessment. Applicability, risk acceptance and management sign-off are the operator's."
10
- },
11
- "components": [
12
- {
13
- "uuid": "78f7623e-fce0-5c98-a040-96a5f5a97e1f",
14
- "type": "software",
15
- "title": "request-triage",
16
- "description": "The agentic system governed by this runward mission.",
17
- "control-implementations": [
18
- {
19
- "uuid": "f8f94d50-a2a4-575a-a0cb-d993e50693ca",
20
- "source": "https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026/",
21
- "description": "OWASP Top 10 for Agentic Applications (ASI01–ASI10) coverage, derived from the mission's craft-rule mapping and conformance manifest.",
22
- "implemented-requirements": [
23
- {
24
- "uuid": "10e10f8e-4f67-5a34-94df-7efaa113769f",
25
- "control-id": "asi-01",
26
- "description": "ASI01 Agent Goal Hijack. Addressed by rules: frontier-deterministic-boundary, hexa-move-deterministic-out, security-prompt-injection.",
27
- "props": [
28
- {
29
- "name": "implementation-status",
30
- "value": "implemented"
31
- }
32
- ],
33
- "links": [
34
- {
35
- "href": "./iso-42001-readiness.md",
36
- "rel": "reference",
37
- "text": "runward assessment-readiness draft"
38
- }
39
- ]
40
- },
41
- {
42
- "uuid": "bb043f31-d856-50d7-8e07-6f7ab9b517e4",
43
- "control-id": "asi-02",
44
- "description": "ASI02 Tool Misuse & Exploitation. Addressed by rules: checklist-pre-production-security, hexa-move-deterministic-out, resilience-fail-open, security-code-execution-sandbox, security-tool-change-reapproval, tools-registry-pattern, tools-scope-atomicity.",
45
- "props": [
46
- {
47
- "name": "implementation-status",
48
- "value": "partial"
49
- }
50
- ],
51
- "links": [
52
- {
53
- "href": "./iso-42001-readiness.md",
54
- "rel": "reference",
55
- "text": "runward assessment-readiness draft"
56
- }
57
- ]
58
- },
59
- {
60
- "uuid": "bfb244c6-c14d-54d8-b2a7-9efc5fa9b8aa",
61
- "control-id": "asi-03",
62
- "description": "ASI03 Identity & Privilege Abuse. Addressed by rules: checklist-pre-production-security, config-secrets-boundary, tools-registry-pattern.",
63
- "props": [
64
- {
65
- "name": "implementation-status",
66
- "value": "partial"
67
- }
68
- ],
69
- "links": [
70
- {
71
- "href": "./iso-42001-readiness.md",
72
- "rel": "reference",
73
- "text": "runward assessment-readiness draft"
74
- }
75
- ]
76
- },
77
- {
78
- "uuid": "ba1a82be-4b49-5b9f-a017-2d9a1c7ba34a",
79
- "control-id": "asi-04",
80
- "description": "ASI04 Agentic Supply Chain Vulnerabilities. Addressed by rules: contracts-governance, resilience-multi-provider-fallback, security-mcp-server-pinning, security-tool-change-reapproval.",
81
- "props": [
82
- {
83
- "name": "implementation-status",
84
- "value": "partial"
85
- }
86
- ],
87
- "links": [
88
- {
89
- "href": "./iso-42001-readiness.md",
90
- "rel": "reference",
91
- "text": "runward assessment-readiness draft"
92
- }
93
- ]
94
- },
95
- {
96
- "uuid": "c3876a6c-d8fe-51ca-b1f6-cff5da50c134",
97
- "control-id": "asi-05",
98
- "description": "ASI05 Unexpected Code Execution. Addressed by rules: security-code-execution-sandbox.",
99
- "props": [
100
- {
101
- "name": "implementation-status",
102
- "value": "partial"
103
- }
104
- ],
105
- "links": [
106
- {
107
- "href": "./iso-42001-readiness.md",
108
- "rel": "reference",
109
- "text": "runward assessment-readiness draft"
110
- }
111
- ]
112
- },
113
- {
114
- "uuid": "02c247e9-35be-5009-bc90-406e39c97f01",
115
- "control-id": "asi-06",
116
- "description": "ASI06 Memory & Context Poisoning. Addressed by rules: checklist-pre-production-security, data-memory-provenance, patterns-memory-router-tiered, security-prompt-injection, state-event-sourcing.",
117
- "props": [
118
- {
119
- "name": "implementation-status",
120
- "value": "partial"
121
- }
122
- ],
123
- "links": [
124
- {
125
- "href": "./iso-42001-readiness.md",
126
- "rel": "reference",
127
- "text": "runward assessment-readiness draft"
128
- }
129
- ]
130
- },
131
- {
132
- "uuid": "d1714857-8222-50ed-8fe4-4c106d904621",
133
- "control-id": "asi-07",
134
- "description": "ASI07 Insecure Inter-Agent Communication. Addressed by rules: contracts-governance.",
135
- "props": [
136
- {
137
- "name": "implementation-status",
138
- "value": "implemented"
139
- }
140
- ],
141
- "links": [
142
- {
143
- "href": "./iso-42001-readiness.md",
144
- "rel": "reference",
145
- "text": "runward assessment-readiness draft"
146
- }
147
- ]
148
- },
149
- {
150
- "uuid": "eb4325d7-8950-5078-b536-30a62da4006b",
151
- "control-id": "asi-08",
152
- "description": "ASI08 Cascading Failures. Addressed by rules: async-job-guardrails, checklist-pre-production-resilience, eval-loop, resilience-fail-open, resilience-multi-provider-fallback, resilience-retry-backoff, scaling-distributed-rate-limiting.",
153
- "props": [
154
- {
155
- "name": "implementation-status",
156
- "value": "partial"
157
- }
158
- ],
159
- "links": [
160
- {
161
- "href": "./iso-42001-readiness.md",
162
- "rel": "reference",
163
- "text": "runward assessment-readiness draft"
164
- }
165
- ]
166
- },
167
- {
168
- "uuid": "56e6885a-fd37-599f-b5dc-5cfd4c6cf582",
169
- "control-id": "asi-09",
170
- "description": "ASI09 Human-Agent Trust Exploitation. Addressed by rules: security-human-agent-trust.",
171
- "props": [
172
- {
173
- "name": "implementation-status",
174
- "value": "implemented"
175
- }
176
- ],
177
- "links": [
178
- {
179
- "href": "./iso-42001-readiness.md",
180
- "rel": "reference",
181
- "text": "runward assessment-readiness draft"
182
- }
183
- ]
184
- },
185
- {
186
- "uuid": "7a1bdaf4-ea39-5b53-b2a6-2b90660c38be",
187
- "control-id": "asi-10",
188
- "description": "ASI10 Rogue Agents. Addressed by rules: config-secrets-boundary, scaling-distributed-rate-limiting, security-mcp-server-pinning.",
189
- "props": [
190
- {
191
- "name": "implementation-status",
192
- "value": "partial"
193
- }
194
- ],
195
- "links": [
196
- {
197
- "href": "./iso-42001-readiness.md",
198
- "rel": "reference",
199
- "text": "runward assessment-readiness draft"
200
- }
201
- ]
202
- }
203
- ]
204
- }
205
- ]
206
- }
207
- ]
208
- }
209
- }