cool-workflow 0.1.81 → 0.1.83

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 (102) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/.codex-plugin/plugin.json +4 -4
  3. package/README.md +125 -121
  4. package/apps/architecture-review/app.json +1 -1
  5. package/apps/architecture-review-fast/app.json +1 -1
  6. package/apps/end-to-end-golden-path/app.json +1 -1
  7. package/apps/pr-review-fix-ci/app.json +1 -1
  8. package/apps/release-cut/app.json +1 -1
  9. package/apps/research-synthesis/app.json +1 -1
  10. package/dist/candidate-scoring.js +20 -26
  11. package/dist/capability-core.js +80 -93
  12. package/dist/capability-registry.js +30 -3
  13. package/dist/cli.js +12 -1
  14. package/dist/commit.js +217 -204
  15. package/dist/coordinator/util.js +6 -9
  16. package/dist/dispatch.js +11 -3
  17. package/dist/doctor.js +153 -0
  18. package/dist/evidence-reasoning.js +4 -1
  19. package/dist/execution-backend/agent.js +11 -48
  20. package/dist/execution-backend.js +11 -31
  21. package/dist/gates.js +48 -0
  22. package/dist/mcp-server.js +11 -0
  23. package/dist/multi-agent/helpers.js +6 -10
  24. package/dist/multi-agent/ids.js +20 -0
  25. package/dist/multi-agent-eval.js +27 -1
  26. package/dist/multi-agent-host.js +53 -21
  27. package/dist/multi-agent-operator-ux.js +2 -1
  28. package/dist/multi-agent-trust.js +5 -5
  29. package/dist/node-projection.js +59 -0
  30. package/dist/node-snapshot.js +8 -18
  31. package/dist/orchestrator/lifecycle-operations.js +22 -1
  32. package/dist/orchestrator.js +29 -2
  33. package/dist/reclamation/hash.js +72 -0
  34. package/dist/reclamation.js +31 -112
  35. package/dist/run-registry/queue.js +6 -7
  36. package/dist/run-registry.js +35 -24
  37. package/dist/scheduler.js +112 -57
  38. package/dist/topology.js +25 -4
  39. package/dist/trust-audit.js +70 -38
  40. package/dist/validation.js +328 -0
  41. package/dist/version.js +1 -1
  42. package/dist/worker-isolation.js +163 -58
  43. package/docs/agent-delegation-drive.7.md +90 -85
  44. package/docs/agent-framework.md +33 -32
  45. package/docs/candidate-scoring.7.md +26 -24
  46. package/docs/canonical-workflow-apps.7.md +40 -40
  47. package/docs/capability-topology-registry.7.md +24 -24
  48. package/docs/cli-mcp-parity.7.md +227 -154
  49. package/docs/contract-migration-tooling.7.md +49 -41
  50. package/docs/control-plane-scheduling.7.md +45 -40
  51. package/docs/coordinator-blackboard.7.md +30 -30
  52. package/docs/dogfood-one-real-repo.7.md +44 -44
  53. package/docs/durable-state-and-locking.7.md +35 -30
  54. package/docs/end-to-end-golden-path.7.md +29 -29
  55. package/docs/error-feedback.7.md +27 -27
  56. package/docs/evidence-adoption-reasoning-chain.7.md +63 -58
  57. package/docs/execution-backends.7.md +84 -79
  58. package/docs/getting-started.md +35 -18
  59. package/docs/index.md +3 -3
  60. package/docs/mcp-app-surface.7.md +64 -64
  61. package/docs/multi-agent-cli-mcp-surface.7.md +83 -77
  62. package/docs/multi-agent-eval-replay-harness.7.md +59 -54
  63. package/docs/multi-agent-operator-ux.7.md +70 -65
  64. package/docs/multi-agent-runtime-core.7.md +39 -39
  65. package/docs/multi-agent-topologies.7.md +24 -24
  66. package/docs/multi-agent-trust-policy-audit.7.md +38 -38
  67. package/docs/node-snapshot-diff-replay.7.md +26 -21
  68. package/docs/observability-cost-accounting.7.md +50 -45
  69. package/docs/operator-ux.7.md +30 -30
  70. package/docs/pipeline-runner.7.md +31 -31
  71. package/docs/project-index.md +15 -6
  72. package/docs/real-execution-backends.7.md +47 -42
  73. package/docs/release-and-migration.7.md +43 -38
  74. package/docs/release-tooling.7.md +74 -39
  75. package/docs/routines.md +16 -16
  76. package/docs/run-registry-control-plane.7.md +120 -115
  77. package/docs/run-retention-reclamation.7.md +46 -41
  78. package/docs/sandbox-profiles.7.md +32 -32
  79. package/docs/scheduled-tasks.md +14 -14
  80. package/docs/security-trust-hardening.7.md +29 -29
  81. package/docs/source-context-profiles.7.md +28 -28
  82. package/docs/state-explosion-management.7.md +64 -59
  83. package/docs/state-node.7.md +8 -8
  84. package/docs/team-collaboration.7.md +63 -58
  85. package/docs/trust-model.md +126 -126
  86. package/docs/unix-principles.md +80 -80
  87. package/docs/vendor-manifest-loadability.7.md +20 -20
  88. package/docs/verifier-gated-commit.7.md +16 -16
  89. package/docs/web-desktop-workbench.7.md +70 -65
  90. package/docs/worker-isolation.7.md +34 -37
  91. package/docs/workflow-app-framework.7.md +38 -38
  92. package/manifest/plugin.manifest.json +4 -4
  93. package/manifest/source-context-profiles.json +1 -1
  94. package/package.json +3 -2
  95. package/scripts/canonical-apps.js +4 -4
  96. package/scripts/children/batch-delegate-child.js +58 -0
  97. package/scripts/children/http-delegate-child.js +39 -0
  98. package/scripts/dogfood-release.js +1 -1
  99. package/scripts/gen-parity-doc.js +106 -0
  100. package/scripts/golden-path.js +4 -4
  101. package/scripts/release-flow.js +181 -5
  102. package/dist/verifier-registry.js +0 -46
@@ -1,94 +1,99 @@
1
1
  # CLI ↔ MCP Parity
2
2
 
3
3
  CW v0.1.27 adds CLI ↔ MCP Parity. CW has two front doors. The CLI
4
- (`node scripts/cw.js ...`, `dist/cli.js`) serves human speed: terse, scannable
5
- text with meaningful exit codes. The MCP server (`cw_*` JSON-RPC tools) serves
6
- machine context: complete, stable, structured JSON. This release makes the two
7
- doors two renderings of one data source declared, derived, and enforced — so
8
- the same capability cannot drift between surfaces.
9
-
10
- The design follows a base-system discipline that separates mechanism from
4
+ (`node scripts/cw.js ...`, `dist/cli.js`) is built for human speed: short,
5
+ easy-to-read text with exit codes that have clear sense. The MCP server
6
+ (`cw_*` JSON-RPC tools) is built for machine context: full, fixed, ordered JSON.
7
+ This release makes the two doors two views of one body of data — named, made from
8
+ it, and kept in line — so the same capability is not able to go off in different
9
+ ways between surfaces.
10
+
11
+ The design keeps to a base-system way of work that keeps mechanism apart from
11
12
  policy:
12
13
 
13
- - one source of truth: the capability registry, not two hand-maintained lists
14
- - mechanism (shared core) is separate from policy (per-surface rendering)
15
- - one source, two renderings; no undeclared divergence
16
- - principle of least astonishment: matching names, flags, order, and defaults
17
- across surfaces
18
- - the surfaces do not interfere: human formatting never leaks into machine
19
- output, machine completeness never bloats the default human view
20
- - fail closed on drift; a surface mismatch is a release-blocking error
21
- - stable interfaces, backward compatible; old names remain aliases or wrappers
22
- - it is not done until it is documented and tested
14
+ - one true source: the capability registry, not two lists kept up by hand
15
+ - mechanism (shared core) is kept apart from policy (per-surface rendering)
16
+ - one source, two views; no undeclared divergence
17
+ - least surprise: like names, flags, order, and defaults across surfaces
18
+ - the surfaces do not get in each other's way: human formatting is never let into
19
+ machine output, machine fullness never makes the default human view too big
20
+ - fail closed on drift; a surface mismatch is an error that blocks the release
21
+ - fixed interfaces, backward compatible; old names go on as aliases or wrappers
22
+ - it is not done till it is put in the docs and tested
23
23
 
24
24
  ## Mechanism vs Policy
25
25
 
26
26
  The mechanism is the capability registry at `src/capability-registry.ts`
27
- (compiled to `dist/capability-registry.js`). It is the single source of truth.
28
- Every capability declares one shared core `entry` — the mechanism both surfaces
29
- route through — plus its CLI command, its MCP tool, the surface it lives on, and
30
- whether its payload is identical across surfaces.
27
+ (compiled to `dist/capability-registry.js`). It is the one true source. Every
28
+ capability names one shared core `entry` — the mechanism both surfaces go
29
+ through — plus its CLI command, its MCP tool, the surface it is on, and whether
30
+ its payload is the same across surfaces.
31
31
 
32
- No business logic is stranded in `cli.ts` or `mcp-server.ts`. Composite
33
- capabilities live in `src/capability-core.ts` (`planSummary`, `appRun`,
32
+ No business logic is left on its own in `cli.ts` or `mcp-server.ts`. Composite
33
+ capabilities are in `src/capability-core.ts` (`planSummary`, `appRun`,
34
34
  `sandboxChoose`, `commitEnvelope`), so both surfaces call the same core entry
35
- and differ only in how they render its result. The CLI renders for a human; the
36
- MCP tool renders for a machine; neither owns the logic.
35
+ and are different only in how they render its result. The CLI renders for a
36
+ human; the MCP tool renders for a machine; neither one owns the logic.
37
37
 
38
- A new runtime capability is added once, in the registry, against one core entry.
39
- The CLI command and the MCP tool are then two policies over that one mechanism —
40
- which is exactly what the parity gate checks.
38
+ A new runtime capability is added one time, in the registry, against one core
39
+ entry. The CLI command and the MCP tool are then two policies over that one
40
+ mechanism — which is just what the parity gate checks.
41
41
 
42
- The MCP tool list is also being collapsed toward that single source. The first
42
+ The MCP tool list is being pulled in toward that one source too. The first
43
43
  read-only inspection group (`operator.status`, `graph`, `operator.report`,
44
- worker/candidate/feedback/commit summaries, and the basic multi-agent inspection
45
- views) derives its MCP tool name and description directly from the capability
44
+ worker/candidate/feedback/commit summaries, and the simple multi-agent inspection
45
+ views) gets its MCP tool name and description straight from the capability
46
46
  registry; `mcp-server.ts` still owns the MCP input schema for those tools. This
47
- keeps the public `tools/list` output unchanged while removing one duplicate
47
+ keeps the public `tools/list` output the same while taking away one copied
48
48
  description table at a time.
49
49
 
50
50
  ## Human vs Machine Contract
51
51
 
52
- The two surfaces have different contracts and must not interfere:
52
+ The two surfaces have different contracts and must not get in each other's way:
53
53
 
54
- - CLI = human speed. The default output is terse, scannable text with meaningful
55
- exit codes. The canonical payload is available on demand via `--json` or
56
- `--format json`. Human formatting is never emitted on the machine path.
57
- - MCP = machine context. The result is always complete, stable, structured
58
- JSON. Machine completeness is never forced into the default human view.
54
+ - CLI = human speed. The default output is short, easy-to-read text with exit
55
+ codes that have clear sense. The canonical payload is there when you ask for it
56
+ with `--json` or `--format json`. Human formatting is never sent on the machine
57
+ path.
58
+ - MCP = machine context. The result is always full, fixed, ordered JSON. Machine
59
+ fullness is never pushed into the default human view.
59
60
 
60
- A capability marked `payloadIdentical` returns the same canonical JSON from
61
- `cw <cmd> --json` and from the `cw_<tool>` MCP result — whitespace and
62
- generation-moment ISO timestamps aside. The `--json` payload is the contract,
63
- and it is the same bytes the MCP tool returns. The human text view is policy
64
- layered on top; it never changes the payload.
61
+ A capability marked `payloadIdentical` gives back the same canonical JSON from
62
+ `cw <cmd> --json` and from the `cw_<tool>` MCP result — apart from whitespace and
63
+ ISO timestamps from the moment of generation. The `--json` payload is the
64
+ contract, and it is the same bytes the MCP tool gives back. The human text view
65
+ is policy put on top; it never changes the payload.
65
66
 
66
67
  ## The Parity Matrix
67
68
 
68
- The matrix below is derived from the live registry — one row per capability,
69
+ The matrix below is made from the live registry — one row per capability,
69
70
  showing its CLI command, MCP tool, shared core entry, surface, and payload
70
- relationship. `identical` means `cw <cmd> --json` equals the `cw_<tool>`
71
- payload; `projected` means a declared, reasoned divergence; `cli-only` marks a
72
- surface-specific capability with a recorded reason. The matrix is
73
- machine-complete by design: 132 capabilities, 129 MCP tools.
74
-
71
+ relationship. `identical` means `cw <cmd> --json` is equal to the `cw_<tool>`
72
+ payload; `projected` means a declared divergence with a reason; `cli-only` marks
73
+ a surface-specific capability with a recorded reason. The matrix is
74
+ <!-- gen:parity:count -->
75
+ machine-complete by design: 190 capabilities, 184 MCP tools.
76
+ <!-- /gen:parity:count -->
77
+
78
+ <!-- gen:parity:table -->
75
79
  | Capability | CLI command | MCP tool | Core entry | Surface | Payload |
76
80
  | --- | --- | --- | --- | --- | --- |
77
81
  | `help` | `cw help` | `—` | `formatHelp` | cli-only | cli-only |
78
82
  | `list` | `cw list` | `cw_list` | `listWorkflows` | both | identical |
83
+ | `doctor` | `cw doctor` | `—` | `runDoctor` | cli-only | cli-only |
79
84
  | `init` | `cw init` | `cw_init` | `init` | both | identical |
80
85
  | `plan` | `cw plan` | `cw_plan` | `planSummary` | both | identical |
81
- | `status` | `cw status --json` | `cw_status` | `status` | both | identical |
86
+ | `status` | `cw status` | `cw_status` | `status` | both | identical |
82
87
  | `next` | `cw next` | `cw_next` | `next` | both | identical |
83
88
  | `dispatch` | `cw dispatch` | `cw_dispatch` | `dispatch` | both | identical |
84
89
  | `result` | `cw result` | `cw_result` | `recordResult` | both | identical |
85
90
  | `commit` | `cw commit` | `cw_commit` | `commit` | both | projected |
86
- | `commit.summary` | `cw commit summary --json` | `cw_commit_summary` | `summarizeCommitRecords` | both | identical |
87
- | `report` | `cw report --json` | `cw_report` | `report` | both | identical |
88
- | `graph` | `cw graph --json` | `cw_operator_graph` | `operatorGraph` | both | identical |
91
+ | `commit.summary` | `cw commit summary` | `cw_commit_summary` | `summarizeCommitRecords` | both | identical |
92
+ | `report` | `cw report` | `cw_report` | `report` | both | identical |
93
+ | `graph` | `cw graph` | `cw_operator_graph` | `operatorGraph` | both | identical |
89
94
  | `loop` | `cw loop` | `—` | `scheduler.create` | cli-only | cli-only |
90
- | `operator.status` | `cw operator status --json` | `cw_operator_status` | `operatorStatus` | both | identical |
91
- | `operator.report` | `cw operator report --json` | `cw_operator_report` | `operatorReport` | both | identical |
95
+ | `operator.status` | `cw operator status` | `cw_operator_status` | `operatorStatus` | both | identical |
96
+ | `operator.report` | `cw operator report` | `cw_operator_report` | `operatorReport` | both | identical |
92
97
  | `app.list` | `cw app list` | `cw_app_list` | `listApps` | both | identical |
93
98
  | `app.show` | `cw app show` | `cw_app_show` | `showApp` | both | identical |
94
99
  | `app.validate` | `cw app validate` | `cw_app_validate` | `validateApp` | both | identical |
@@ -99,29 +104,36 @@ machine-complete by design: 132 capabilities, 129 MCP tools.
99
104
  | `contract.show` | `cw contract show` | `cw_contract_show` | `showContract` | both | identical |
100
105
  | `node.list` | `cw node list` | `cw_node_list` | `listNodes` | both | identical |
101
106
  | `node.show` | `cw node show` | `cw_node_show` | `showNode` | both | identical |
102
- | `node.graph` | `cw node graph --json` | `cw_node_graph` | `graphNodes` | both | identical |
107
+ | `node.graph` | `cw node graph` | `cw_node_graph` | `graphNodes` | both | identical |
108
+ | `node.snapshot` | `cw node snapshot` | `cw_node_snapshot` | `nodeSnapshot` | both | identical |
109
+ | `node.diff` | `cw node diff` | `cw_node_diff` | `nodeDiff` | both | identical |
110
+ | `node.replay` | `cw node replay` | `cw_node_replay` | `nodeReplay` | both | identical |
111
+ | `node.replay.verify` | `cw node verify` | `cw_node_replay_verify` | `nodeReplayVerify` | both | identical |
112
+ | `migration.list` | `cw migration list` | `cw_migration_list` | `migrationList` | both | identical |
113
+ | `migration.check` | `cw migration check` | `cw_migration_check` | `migrationCheck` | both | identical |
114
+ | `migration.prove` | `cw migration prove` | `cw_migration_prove` | `migrationProve` | both | identical |
103
115
  | `topology.list` | `cw topology list` | `cw_topology_list` | `listTopologies` | both | identical |
104
116
  | `topology.show` | `cw topology show` | `cw_topology_show` | `showTopology` | both | identical |
105
117
  | `topology.validate` | `cw topology validate` | `cw_topology_validate` | `validateTopology` | both | identical |
106
118
  | `topology.apply` | `cw topology apply` | `cw_topology_apply` | `applyTopology` | both | identical |
107
- | `topology.summary` | `cw topology summary --json` | `cw_topology_summary` | `topologySummary` | both | identical |
108
- | `topology.graph` | `cw topology graph --json` | `cw_topology_graph` | `topologyGraph` | both | identical |
109
- | `summary.refresh` | `cw summary refresh --json` | `cw_summary_refresh` | `summaryRefresh` | both | identical |
110
- | `summary.show` | `cw summary show --json` | `cw_summary_show` | `summaryShow` | both | identical |
119
+ | `topology.summary` | `cw topology summary` | `cw_topology_summary` | `topologySummary` | both | identical |
120
+ | `topology.graph` | `cw topology graph` | `cw_topology_graph` | `topologyGraph` | both | identical |
121
+ | `summary.refresh` | `cw summary refresh` | `cw_summary_refresh` | `summaryRefresh` | both | identical |
122
+ | `summary.show` | `cw summary show` | `cw_summary_show` | `summaryShow` | both | identical |
111
123
  | `multi-agent.run` | `cw multi-agent run` | `cw_multi_agent_run` | `hostMultiAgentRun` | both | identical |
112
- | `multi-agent.status` | `cw multi-agent status --json` | `cw_multi_agent_status` | `hostMultiAgentStatus` | both | identical |
124
+ | `multi-agent.status` | `cw multi-agent status` | `cw_multi_agent_status` | `hostMultiAgentStatus` | both | identical |
113
125
  | `multi-agent.step` | `cw multi-agent step` | `cw_multi_agent_step` | `hostMultiAgentStep` | both | identical |
114
126
  | `multi-agent.blackboard` | `cw multi-agent blackboard` | `cw_multi_agent_blackboard` | `hostMultiAgentBlackboard` | both | identical |
115
127
  | `multi-agent.score` | `cw multi-agent score` | `cw_multi_agent_score` | `hostMultiAgentScore` | both | identical |
116
128
  | `multi-agent.select` | `cw multi-agent select` | `cw_multi_agent_select` | `hostMultiAgentSelect` | both | identical |
117
- | `multi-agent.summary` | `cw multi-agent summary --json` | `cw_multi_agent_summary` | `multiAgentSummary` | both | identical |
118
- | `multi-agent.summarize` | `cw multi-agent summarize --json` | `cw_multi_agent_summarize` | `multiAgentSummarize` | both | identical |
119
- | `multi-agent.graph` | `cw multi-agent graph --json` | `cw_multi_agent_graph` | `multiAgentOperatorGraph` | both | identical |
120
- | `multi-agent.graph.compact` | `cw multi-agent graph --json` | `cw_multi_agent_graph_compact` | `multiAgentGraphView` | both | identical |
121
- | `multi-agent.dependencies` | `cw multi-agent dependencies --json` | `cw_multi_agent_dependencies` | `multiAgentDependencies` | both | identical |
122
- | `multi-agent.failures` | `cw multi-agent failures --json` | `cw_multi_agent_failures` | `multiAgentFailures` | both | identical |
123
- | `multi-agent.evidence` | `cw multi-agent evidence --json` | `cw_multi_agent_evidence` | `multiAgentEvidence` | both | identical |
124
- | `multi-agent.reasoning` | `cw multi-agent reasoning --json` | `cw_evidence_reasoning` | `multiAgentReasoning` | both | identical |
129
+ | `multi-agent.summary` | `cw multi-agent summary` | `cw_multi_agent_summary` | `multiAgentSummary` | both | identical |
130
+ | `multi-agent.summarize` | `cw multi-agent summarize` | `cw_multi_agent_summarize` | `multiAgentSummarize` | both | identical |
131
+ | `multi-agent.graph` | `cw multi-agent graph` | `cw_multi_agent_graph` | `multiAgentOperatorGraph` | both | identical |
132
+ | `multi-agent.graph.compact` | `cw multi-agent graph` | `cw_multi_agent_graph_compact` | `multiAgentGraphView` | both | identical |
133
+ | `multi-agent.dependencies` | `cw multi-agent dependencies` | `cw_multi_agent_dependencies` | `multiAgentDependencies` | both | identical |
134
+ | `multi-agent.failures` | `cw multi-agent failures` | `cw_multi_agent_failures` | `multiAgentFailures` | both | identical |
135
+ | `multi-agent.evidence` | `cw multi-agent evidence` | `cw_multi_agent_evidence` | `multiAgentEvidence` | both | identical |
136
+ | `multi-agent.reasoning` | `cw multi-agent reasoning` | `cw_evidence_reasoning` | `multiAgentReasoning` | both | identical |
125
137
  | `multi-agent.reasoning.refresh` | `cw multi-agent reasoning` | `cw_evidence_reasoning_refresh` | `multiAgentReasoningRefresh` | both | identical |
126
138
  | `multi-agent.run.create` | `cw multi-agent run` | `cw_multi_agent_run_create` | `createMultiAgentRun` | both | identical |
127
139
  | `multi-agent.run.transition` | `cw multi-agent run` | `cw_multi_agent_run_transition` | `transitionMultiAgentRun` | both | identical |
@@ -136,14 +148,14 @@ machine-complete by design: 132 capabilities, 129 MCP tools.
136
148
  | `multi-agent.fanout.show` | `cw multi-agent fanout` | `cw_multi_agent_fanout_show` | `showAgentFanout` | both | identical |
137
149
  | `multi-agent.fanin.collect` | `cw multi-agent fanin` | `cw_multi_agent_fanin_collect` | `collectAgentFanin` | both | identical |
138
150
  | `multi-agent.fanin.show` | `cw multi-agent fanin` | `cw_multi_agent_fanin_show` | `showAgentFanin` | both | identical |
139
- | `eval.snapshot` | `cw eval snapshot --json` | `cw_eval_snapshot` | `evalSnapshot` | both | identical |
140
- | `eval.replay` | `cw eval replay --json` | `cw_eval_replay` | `evalReplay` | both | identical |
141
- | `eval.compare` | `cw eval compare --json` | `cw_eval_compare` | `evalCompare` | both | identical |
142
- | `eval.score` | `cw eval score --json` | `cw_eval_score` | `evalScore` | both | identical |
143
- | `eval.gate` | `cw eval gate --json` | `cw_eval_gate` | `evalGate` | both | identical |
144
- | `eval.report` | `cw eval report --json` | `cw_eval_report` | `evalReport` | both | identical |
151
+ | `eval.snapshot` | `cw eval snapshot` | `cw_eval_snapshot` | `evalSnapshot` | both | identical |
152
+ | `eval.replay` | `cw eval replay` | `cw_eval_replay` | `evalReplay` | both | identical |
153
+ | `eval.compare` | `cw eval compare` | `cw_eval_compare` | `evalCompare` | both | identical |
154
+ | `eval.score` | `cw eval score` | `cw_eval_score` | `evalScore` | both | identical |
155
+ | `eval.gate` | `cw eval gate` | `cw_eval_gate` | `evalGate` | both | identical |
156
+ | `eval.report` | `cw eval report` | `cw_eval_report` | `evalReport` | both | identical |
145
157
  | `blackboard.summary` | `cw blackboard summary` | `cw_blackboard_summary` | `blackboardSummary` | both | identical |
146
- | `blackboard.summarize` | `cw blackboard summarize --json` | `cw_blackboard_summarize` | `blackboardSummarize` | both | identical |
158
+ | `blackboard.summarize` | `cw blackboard summarize` | `cw_blackboard_summarize` | `blackboardSummarize` | both | identical |
147
159
  | `blackboard.graph` | `cw blackboard graph` | `cw_blackboard_graph` | `blackboardGraph` | both | identical |
148
160
  | `blackboard.resolve` | `cw blackboard resolve` | `cw_blackboard_resolve` | `resolveRunBlackboard` | both | identical |
149
161
  | `blackboard.topic.create` | `cw blackboard topic create` | `cw_blackboard_topic_create` | `createBlackboardTopic` | both | identical |
@@ -156,13 +168,14 @@ machine-complete by design: 132 capabilities, 129 MCP tools.
156
168
  | `coordinator.summary` | `cw coordinator summary` | `cw_coordinator_summary` | `coordinatorSummary` | both | identical |
157
169
  | `coordinator.decision` | `cw coordinator decision` | `cw_coordinator_decision` | `recordCoordinatorDecision` | both | identical |
158
170
  | `audit.summary` | `cw audit summary` | `cw_audit_summary` | `auditSummary` | both | identical |
171
+ | `audit.verify` | `cw audit verify` | `cw_audit_verify` | `auditVerify` | both | identical |
159
172
  | `audit.worker` | `cw audit worker` | `cw_audit_worker` | `workerAudit` | both | identical |
160
173
  | `audit.provenance` | `cw audit provenance` | `cw_audit_provenance` | `evidenceProvenance` | both | identical |
161
- | `audit.multi-agent` | `cw audit multi-agent --json` | `cw_audit_multi_agent` | `auditMultiAgent` | both | identical |
162
- | `audit.policy` | `cw audit policy --json` | `cw_audit_policy` | `auditPolicy` | both | identical |
163
- | `audit.role` | `cw audit role --json` | `cw_audit_role` | `auditRole` | both | identical |
164
- | `audit.blackboard` | `cw audit blackboard --json` | `cw_audit_blackboard` | `auditBlackboard` | both | identical |
165
- | `audit.judge` | `cw audit judge --json` | `cw_audit_judge` | `auditJudge` | both | identical |
174
+ | `audit.multi-agent` | `cw audit multi-agent` | `cw_audit_multi_agent` | `auditMultiAgent` | both | identical |
175
+ | `audit.policy` | `cw audit policy` | `cw_audit_policy` | `auditPolicy` | both | identical |
176
+ | `audit.role` | `cw audit role` | `cw_audit_role` | `auditRole` | both | identical |
177
+ | `audit.blackboard` | `cw audit blackboard` | `cw_audit_blackboard` | `auditBlackboard` | both | identical |
178
+ | `audit.judge` | `cw audit judge` | `cw_audit_judge` | `auditJudge` | both | identical |
166
179
  | `audit.attest` | `cw audit attest` | `cw_audit_attest` | `recordAuditAttestation` | both | identical |
167
180
  | `audit.decision` | `cw audit decision` | `cw_audit_decision` | `recordAuditDecision` | both | identical |
168
181
  | `sandbox.list` | `cw sandbox list` | `cw_sandbox_list` | `listSandboxProfiles` | both | identical |
@@ -170,8 +183,13 @@ machine-complete by design: 132 capabilities, 129 MCP tools.
170
183
  | `sandbox.validate` | `cw sandbox validate` | `cw_sandbox_validate` | `validateSandboxProfile` | both | identical |
171
184
  | `sandbox.choose` | `cw sandbox choose` | `cw_sandbox_choose` | `sandboxChoose` | both | identical |
172
185
  | `sandbox.resolve` | `cw sandbox resolve` | `cw_sandbox_resolve` | `sandboxChoose` | both | identical |
186
+ | `backend.list` | `cw backend list` | `cw_backend_list` | `listBackends` | both | identical |
187
+ | `backend.show` | `cw backend show` | `cw_backend_show` | `showBackend` | both | identical |
188
+ | `backend.probe` | `cw backend probe` | `cw_backend_probe` | `probeBackend` | both | identical |
189
+ | `backend.agent.config.show` | `cw backend agent config` | `cw_backend_agent_config_show` | `backendAgentConfigShow` | both | identical |
190
+ | `backend.agent.config.set` | `cw backend agent config` | `cw_backend_agent_config_set` | `backendAgentConfigSet` | both | projected |
173
191
  | `worker.list` | `cw worker list` | `cw_worker_list` | `listWorkers` | both | identical |
174
- | `worker.summary` | `cw worker summary --json` | `cw_worker_summary` | `summarizeWorkerRecords` | both | identical |
192
+ | `worker.summary` | `cw worker summary` | `cw_worker_summary` | `summarizeWorkerRecords` | both | identical |
175
193
  | `worker.show` | `cw worker show` | `cw_worker_show` | `showWorker` | both | identical |
176
194
  | `worker.manifest` | `cw worker manifest` | `cw_worker_manifest` | `showWorkerManifest` | both | identical |
177
195
  | `worker.output` | `cw worker output` | `cw_worker_output` | `recordWorkerOutput` | both | identical |
@@ -184,11 +202,11 @@ machine-complete by design: 132 capabilities, 129 MCP tools.
184
202
  | `candidate.rank` | `cw candidate rank` | `cw_candidate_rank` | `rankCandidates` | both | identical |
185
203
  | `candidate.select` | `cw candidate select` | `cw_candidate_select` | `selectCandidate` | both | identical |
186
204
  | `candidate.reject` | `cw candidate reject` | `cw_candidate_reject` | `rejectCandidate` | both | identical |
187
- | `candidate.summary` | `cw candidate summary --json` | `cw_candidate_summary` | `summarizeCandidateOperatorRecords` | both | identical |
205
+ | `candidate.summary` | `cw candidate summary` | `cw_candidate_summary` | `summarizeCandidateOperatorRecords` | both | identical |
188
206
  | `feedback.list` | `cw feedback list` | `cw_feedback_list` | `listFeedback` | both | identical |
189
207
  | `feedback.show` | `cw feedback show` | `cw_feedback_show` | `showFeedback` | both | identical |
190
208
  | `feedback.collect` | `cw feedback collect` | `cw_feedback_collect` | `collectFeedback` | both | identical |
191
- | `feedback.summary` | `cw feedback summary --json` | `cw_feedback_summary` | `summarizeFeedbackRecords` | both | identical |
209
+ | `feedback.summary` | `cw feedback summary` | `cw_feedback_summary` | `summarizeFeedbackRecords` | both | identical |
192
210
  | `feedback.task` | `cw feedback task` | `cw_feedback_task` | `createFeedbackTask` | both | identical |
193
211
  | `feedback.resolve` | `cw feedback resolve` | `cw_feedback_resolve` | `resolveFeedback` | both | identical |
194
212
  | `schedule.create` | `cw schedule create` | `cw_schedule_create` | `scheduler.create` | both | identical |
@@ -206,106 +224,156 @@ machine-complete by design: 132 capabilities, 129 MCP tools.
206
224
  | `routine.delete` | `cw routine delete` | `cw_routine_delete` | `triggers.delete` | both | identical |
207
225
  | `routine.fire` | `cw routine fire` | `cw_routine_fire` | `triggers.fire` | both | identical |
208
226
  | `routine.events` | `cw routine events` | `cw_routine_events` | `triggers.events` | both | identical |
209
-
210
- v0.1.27 closed the historical gaps. It added MCP peers `cw_init`, `cw_next`,
227
+ | `registry.refresh` | `cw registry refresh` | `cw_registry_refresh` | `runRegistry.refresh` | both | identical |
228
+ | `registry.show` | `cw registry show` | `cw_registry_show` | `runRegistry.show` | both | identical |
229
+ | `run.search` | `cw run search` | `cw_run_search` | `runRegistry.search` | both | identical |
230
+ | `run.list` | `cw run list` | `cw_run_list` | `runRegistry.list` | both | identical |
231
+ | `run.show` | `cw run show` | `cw_run_show` | `runRegistry.showRun` | both | identical |
232
+ | `run.resume` | `cw run resume` | `cw_run_resume` | `runRegistry.resume` | both | identical |
233
+ | `run.archive` | `cw run archive` | `cw_run_archive` | `runRegistry.archive` | both | identical |
234
+ | `run.rerun` | `cw run rerun` | `cw_run_rerun` | `runRegistry.rerun` | both | identical |
235
+ | `run.export` | `cw run export` | `cw_run_export` | `runExportArchive` | both | identical |
236
+ | `run.import` | `cw run import` | `cw_run_import` | `runImportArchive` | both | identical |
237
+ | `run.verify-import` | `cw run verify-import` | `cw_run_verify_import` | `runVerifyImport` | both | identical |
238
+ | `run.inspect-archive` | `cw run inspect-archive` | `cw_run_inspect_archive` | `runInspectArchive` | both | identical |
239
+ | `run.drive` | `cw run drive` | `cw_run_drive` | `runDrivePreview` | both | identical |
240
+ | `run.drive.step` | `cw run drive` | `cw_run_drive_step` | `runDrive` | both | projected |
241
+ | `quickstart` | `cw quickstart` | `—` | `quickstart` | cli-only | cli-only |
242
+ | `queue.add` | `cw queue add` | `cw_queue_add` | `runRegistry.queueAdd` | both | identical |
243
+ | `queue.list` | `cw queue list` | `cw_queue_list` | `runRegistry.queueList` | both | identical |
244
+ | `queue.drain` | `cw queue drain` | `cw_queue_drain` | `runRegistry.queueDrain` | both | identical |
245
+ | `queue.show` | `cw queue show` | `cw_queue_show` | `runRegistry.queueShow` | both | identical |
246
+ | `sched.plan` | `cw sched plan` | `cw_sched_plan` | `schedPlan` | both | identical |
247
+ | `sched.lease` | `cw sched lease` | `cw_sched_lease` | `schedLease` | both | identical |
248
+ | `sched.release` | `cw sched release` | `cw_sched_release` | `schedRelease` | both | identical |
249
+ | `sched.complete` | `cw sched complete` | `cw_sched_complete` | `schedComplete` | both | identical |
250
+ | `sched.reclaim` | `cw sched reclaim` | `cw_sched_reclaim` | `schedReclaim` | both | identical |
251
+ | `sched.reset` | `cw sched reset` | `cw_sched_reset` | `schedReset` | both | identical |
252
+ | `sched.policy.show` | `cw sched policy` | `cw_sched_policy_show` | `schedPolicyShow` | both | identical |
253
+ | `sched.policy.set` | `cw sched policy` | `cw_sched_policy_set` | `schedPolicySet` | both | identical |
254
+ | `gc.plan` | `cw gc plan` | `cw_gc_plan` | `gcPlan` | both | identical |
255
+ | `gc.run` | `cw gc run` | `cw_gc_run` | `gcRun` | both | projected |
256
+ | `gc.verify` | `cw gc verify` | `cw_gc_verify` | `gcVerify` | both | identical |
257
+ | `telemetry.verify` | `cw telemetry verify` | `cw_telemetry_verify` | `telemetryVerify` | both | identical |
258
+ | `demo.tamper` | `cw demo tamper` | `—` | `demoTamper` | cli-only | cli-only |
259
+ | `history` | `cw history` | `cw_history` | `runRegistry.history` | both | identical |
260
+ | `workbench.view` | `cw workbench view` | `cw_workbench_view` | `buildWorkbenchRunView` | both | identical |
261
+ | `workbench.serve` | `cw workbench serve` | `cw_workbench_serve` | `buildWorkbenchServeDescriptor` | both | projected |
262
+ | `metrics.show` | `cw metrics show` | `cw_metrics_show` | `metricsShow` | both | identical |
263
+ | `metrics.summary` | `cw metrics summary` | `cw_metrics_summary` | `metricsSummary` | both | identical |
264
+ | `approve` | `cw approve` | `cw_approve` | `collaborationApprove` | both | identical |
265
+ | `reject` | `cw reject` | `cw_reject` | `collaborationReject` | both | identical |
266
+ | `comment.add` | `cw comment add` | `cw_comment_add` | `collaborationComment` | both | identical |
267
+ | `comment.list` | `cw comment list` | `cw_comment_list` | `collaborationCommentList` | both | identical |
268
+ | `handoff` | `cw handoff` | `cw_handoff` | `collaborationHandoff` | both | identical |
269
+ | `review.status` | `cw review status` | `cw_review_status` | `reviewStatus` | both | identical |
270
+ | `review.policy` | `cw review policy` | `cw_review_policy` | `reviewPolicy` | both | identical |
271
+ <!-- /gen:parity:table -->
272
+
273
+ v0.1.27 closed the old gaps. It added MCP peers `cw_init`, `cw_next`,
211
274
  `cw_state_check`, `cw_contract_show`, `cw_node_list`, `cw_node_show`, and
212
275
  `cw_node_graph`; and CLI peers `app run`, `operator status`, `operator report`,
213
- `sandbox choose`, `sandbox resolve`, and `report --json`. Everything else is on
276
+ `sandbox choose`, `sandbox resolve`, and `report --json`. All the rest is on
214
277
  both surfaces.
215
278
 
216
279
  ## Surface-Specific Capabilities
217
280
 
218
- A capability may live on one surface only, but never silently — it must carry a
219
- recorded reason in the registry. Three capabilities are CLI-only:
281
+ A capability may be on one surface only, but never without word of it — it must
282
+ carry a recorded reason in the registry.
220
283
 
221
- - `help` — human help text. MCP hosts enumerate capabilities via `tools/list`,
222
- not a help command.
223
- - `loop` — a convenience alias of `schedule create` with `kind=loop`. MCP hosts
224
- use `cw_schedule_create` with `kind=loop`.
225
- - `schedule daemon` — a long-running desktop daemon process, not a
226
- request/response tool. MCP hosts drive ticks via `cw_schedule_due` and
227
- `cw_schedule_run_now`.
284
+ <!-- gen:parity:cliOnly -->
285
+ Six capabilities are CLI-only:
228
286
 
229
- One capability is intentionally payload-divergent (`projected`):
287
+ - `help` Human help text. MCP hosts enumerate capabilities via tools/list, not a help command.
288
+ - `doctor` — Environment diagnostics are inherently local to the CLI host — Node version, $PATH, $CW_HOME/cwd writability. An MCP client diagnosing the server process's environment is not meaningful; agents already receive the same readiness facts in their typed results (e.g. status: blocked, agentConfigured). Inspired by `brew doctor`.
289
+ - `loop` — Convenience alias of `schedule create` with kind=loop. MCP hosts use cw_schedule_create with kind=loop.
290
+ - `schedule daemon` — Long-running desktop daemon process, not a request/response tool. MCP hosts drive ticks via cw_schedule_due + cw_schedule_run_now.
291
+ - `quickstart` — CLI UX convenience layer (newcomer first value in one command) over the existing run.drive.step + report verbs; it spawns nothing new and delegates worker execution to the operator's agent backend. MCP hosts compose the same outcome from cw_run_drive_step + cw_report. `audit-run` is a CLI-only alias of the same wrapper.
292
+ - `demo tamper` — Human-facing demonstration (operator/newcomer onboarding); the underlying integrity check is exposed programmatically as the both-surface telemetry.verify. No agent or MCP client needs to invoke a demo.
293
+ <!-- /gen:parity:cliOnly -->
230
294
 
231
- - `commit` — both surfaces route through the single core entry `runner.commit`.
232
- The CLI emits the raw `StateCommitResult` for scripting (`commit.id`,
233
- `commit.evidence`, `commit.gate`, `commit.acceptanceRationale`); `cw_commit`
234
- emits the operator commit envelope (`commitId`, `verifierGated`, `checkpoint`,
235
- `evidenceCount`, `snapshotPath`, `nextActions`, plus the raw result under
236
- `commit`). This is a declared projection via `capability-core.commitEnvelope`,
237
- not drift.
295
+ <!-- gen:parity:projected -->
296
+ Five capabilities are payload-divergent on purpose (`projected`):
297
+
298
+ - `commit` — Both surfaces route through the single core entry runner.commit. The CLI emits the raw StateCommitResult for scripting (commit.id, commit.evidence, commit.gate, commit.acceptanceRationale); cw_commit emits the operator commit envelope (commitId, verifierGated, checkpoint, evidenceCount, snapshotPath, nextActions, plus the raw result under `commit`). Declared projection via capability-core.commitEnvelope, not drift.
299
+ - `backend.agent.config.set` Mutating: persists $CW_HOME/agent-config.json (secret-stripped) before returning the effective config; both surfaces perform the same write — it is a surface-mutating verb, not a read probe.
300
+ - `run.drive.step` Mutating: advances the run by spawning the external agent per worker and recording attested output — not a read probe. CLI (--drive/--step) and MCP route through the same drive() core.
301
+ - `gc.run` — Mutating: frees disk and appends a tombstone; both surfaces perform the identical transaction but the payload reports now-derived bytesFreed/tombstone.
302
+ - `workbench.serve` — Both surfaces route through the single core entry buildWorkbenchServeDescriptor and return the IDENTICAL serve descriptor under `cw workbench serve --json`/`--once` and `cw_workbench_serve`. They diverge only in side effect, not payload: the CLI's default `cw workbench serve` (no --once) additionally STARTS the blocking localhost host (like `schedule daemon`), which an MCP stdio host cannot do, so cw_workbench_serve only ever returns the descriptor. Declared divergence, not drift.
303
+ <!-- /gen:parity:projected -->
238
304
 
239
305
  ## Fail-Closed Rules
240
306
 
241
- The parity gate fails closed. Any of the following is a release-blocking error:
307
+ The parity gate fails closed. Any of the things below is an error that blocks the
308
+ release:
242
309
 
243
- - a capability present on one surface but missing from the other
310
+ - a capability on one surface but not on the other
244
311
  - an MCP tool that is live but not declared in the registry
245
312
  - a CLI command or token that is live but not declared in the registry
246
313
  - a surface-specific or payload-divergent capability with no recorded `reason`
247
314
  - a payload divergence on a capability marked `payloadIdentical` — that is,
248
- `cw <cmd> --json` and `cw_<tool>` returning different canonical JSON
315
+ `cw <cmd> --json` and `cw_<tool>` giving back different canonical JSON
249
316
 
250
- There is no "fix it later" path. A surface mismatch blocks the release until the
251
- registry, the surfaces, and the recorded reasons agree.
317
+ There is no "fix it later" path. A surface mismatch blocks the release till the
318
+ registry, the surfaces, and the recorded reasons are in agreement.
252
319
 
253
320
  ## Enforcement & Smoke Coverage
254
321
 
255
322
  Parity is checked by `scripts/parity-check.js --check`, run by
256
- `npm run parity:check` and wired into `npm run release:check`. The check loads
257
- the registry, enumerates the live CLI commands and MCP tools, and fails closed on
258
- any of the rules above.
259
-
260
- `test/cli-mcp-parity-smoke.js` proves the contract end to end. It verifies
261
- registry ⇄ CLI ⇄ MCP coverage (every declared capability resolves on its
262
- declared surfaces and nothing live is undeclared), confirms `--json` output
263
- equals the MCP payload for every `payloadIdentical` capability, confirms the
264
- declared `commit` projection, and confirms fail-closed behavior by injecting
265
- drift — a removed peer, an undeclared tool, a reasonless exception, a mutated
266
- payload — and asserting the gate rejects each one. It is included in `npm test`
267
- and `npm run release:check`.
268
-
269
- In CW, parity is not a convention; it is a derived, declared, and enforced
270
- property of the build. It is not done until it is documented and tested.
323
+ `npm run parity:check` and joined into `npm run release:check`. The check loads
324
+ the registry, lists the live CLI commands and MCP tools, and fails closed on any
325
+ of the rules above.
326
+
327
+ `test/cli-mcp-parity-smoke.js` proves the contract from end to end. It checks
328
+ registry ⇄ CLI ⇄ MCP coverage (every declared capability is found on its declared
329
+ surfaces and nothing live is undeclared), makes sure `--json` output is equal to
330
+ the MCP payload for every `payloadIdentical` capability, makes sure of the
331
+ declared `commit` projection, and makes sure of fail-closed behavior by putting in
332
+ drift — a peer taken away, an undeclared tool, an exception with no reason, a
333
+ changed payload — and checking that the gate says no to each one. It is part of
334
+ `npm test` and `npm run release:check`.
335
+
336
+ In CW, parity is not a custom; it is a built, declared, and kept property of the
337
+ build. It is not done till it is put in the docs and tested.
271
338
 
272
339
  ## Run Registry / Control Plane (v0.1.28)
273
340
 
274
341
  v0.1.28 adds 13 control-plane capabilities — `registry refresh|show`, `run
275
342
  search|list|show|resume|archive|rerun`, `queue add|list|drain|show`, and
276
- `history` — declared once in the capability registry and validated by the same
343
+ `history` — declared one time in the capability registry and checked by the same
277
344
  fail-closed parity gate, so each `cw <cmd> --json` is schema-identical to its
278
345
  `cw_<tool>`. See [run-registry-control-plane.7.md](run-registry-control-plane.7.md).
279
346
 
280
347
  ## Execution Backends (v0.1.29)
281
348
 
282
349
  v0.1.29 lifts execution into a pluggable driver layer: one narrow `ExecutionBackend`
283
- contract with interchangeable `node`/`bun`/`shell`/`container`/`remote`/`ci`
284
- drivers, selected by `--backend` (parallel to `--sandbox`) and inspected via
350
+ contract with `node`/`bun`/`shell`/`container`/`remote`/`ci` drivers you can swap,
351
+ picked by `--backend` (parallel to `--sandbox`) and looked at through
285
352
  `backend list|show|probe`. The result/evidence envelope is schema-identical across
286
353
  backends; the backend id + sandbox attestation are recorded as provenance, so this
287
- surface is unchanged regardless of which backend executed a run. See
354
+ surface is the same no matter which backend ran a run. See
288
355
  [execution-backends.7.md](execution-backends.7.md).
289
356
  ## Web / Desktop Workbench (v0.1.30)
290
357
 
291
358
  v0.1.30 adds the Web / Desktop Workbench: a read-only, localhost-only human
292
359
  console that renders this surface (and the other four operator panels — run
293
360
  graph, blackboard, worker logs, candidate compare, audit timeline) for any run,
294
- reading the SAME capability `--json` payloads. It is a THIRD FRONT DOOR alongside
361
+ reading the SAME capability `--json` payloads. It is a THIRD FRONT DOOR next to
295
362
  the CLI and MCP that holds no authoritative state and forks no schema: each panel
296
- equals its `cw <cmd> --json` payload byte-for-byte (parity-gated), and refresh
297
- re-derives everything from disk. See
363
+ is equal to its `cw <cmd> --json` payload byte-for-byte (parity-gated), and
364
+ refresh makes everything again from disk. See
298
365
  [web-desktop-workbench.7.md](web-desktop-workbench.7.md).
299
366
 
300
367
  ## Observability + Cost Accounting (v0.1.31)
301
368
 
302
369
  v0.1.31 adds Observability + Cost Accounting: `metrics show`/`metrics summary`
303
- derive durations, failure/verifier/acceptance rates (with sample counts and
304
- fail-closed `n/a`), and host-attested token/cost from existing durable run state
305
- — no metrics database, no collector daemon, no hidden counter. Usage is additive
306
- and optional (absent ⇒ `unreported`, never 0); cost is `attested` (attested usage
307
- × a recorded pricing policy) or clearly `estimated`, with pricing as policy. Both
308
- verbs are parity-gated and render read-only in the v0.1.30 Workbench. See
370
+ work out durations, failure/verifier/acceptance rates (with sample counts and
371
+ fail-closed `n/a`), and host-attested token/cost from run state already kept on
372
+ disk — no metrics database, no collector daemon, no hidden counter. Usage is added
373
+ on and optional (when not there ⇒ `unreported`, never 0); cost is `attested`
374
+ (attested usage × a recorded pricing policy) or clearly `estimated`, with pricing
375
+ as policy. Both verbs are parity-gated and render read-only in the v0.1.30
376
+ Workbench. See
309
377
  [observability-cost-accounting.7.md](observability-cost-accounting.7.md).
310
378
 
311
379
 
@@ -313,25 +381,25 @@ verbs are parity-gated and render read-only in the v0.1.30 Workbench. See
313
381
 
314
382
  v0.1.32 adds Team Collaboration: a host-attested actor and append-only
315
383
  approvals/rejections/comments/handoffs provenance-linked to a durable target,
316
- plus a review gate that STACKS ON the verifier gate — required approvals from
384
+ plus a review gate that STACKS ON the verifier gate — needed approvals from
317
385
  authorized roles, enforced inside `resolveCommitGate` AFTER the verifier checks
318
- and never instead of them, failing closed on quorum/authority/self-approval and
319
- recording who approved the very artifact that shipped. Policy (required approvals,
320
- authorized roles, self-approval) is data, default off (pre-v0.1.32 behavior
321
- unchanged). The verbs are parity-gated and render read-only in the v0.1.30
322
- Workbench. See [Team Collaboration](team-collaboration.7.md).
386
+ and never in place of them, failing closed on quorum/authority/self-approval and
387
+ recording who said yes to the very artifact that shipped. Policy (needed
388
+ approvals, authorized roles, self-approval) is data, default off (pre-v0.1.32
389
+ behavior unchanged). The verbs are parity-gated and render read-only in the
390
+ v0.1.30 Workbench. See [Team Collaboration](team-collaboration.7.md).
323
391
 
324
392
  ## Release Tooling (v0.1.33)
325
393
 
326
- the per-tag mechanical surfaces (version bump across 17 surfaces, feature scaffold, and the forward-reference docs) become deterministic scripts, with a de-duplicated release gate. See release-tooling(7).
394
+ the per-tag mechanical surfaces (version bump across 17 surfaces, feature scaffold, and the forward-reference docs) become deterministic scripts, with a release gate that has no copies. See release-tooling(7).
327
395
 
328
396
  ## Real Execution Backend Integrations (v0.1.34)
329
397
 
330
- container/remote/ci backends really execute (docker/podman run, remote/CI POST-and-poll) under the sandbox contract, with byte-stable evidence vs node and fail-closed refusal when a runtime/endpoint is unavailable. See real-execution-backends(7).
398
+ container/remote/ci backends really run (docker/podman run, remote/CI POST-and-poll) under the sandbox contract, with byte-stable evidence vs node and fail-closed refusal when a runtime/endpoint is not there to use. See real-execution-backends(7).
331
399
 
332
400
  ## Node Snapshot / Diff / Replay (v0.1.35)
333
401
 
334
- per-node snapshot, structural diff, and isolated deterministic replay over StateNode, reusing the v0.1.23 eval harness; fail-closed on source drift (valid|stale|absent). See node-snapshot-diff-replay(7).
402
+ per-node snapshot, structural diff, and on-its-own deterministic replay over StateNode, using again the v0.1.23 eval harness; fail-closed on source drift (valid|stale|absent). See node-snapshot-diff-replay(7).
335
403
 
336
404
  ## Contract Migration Tooling (v0.1.36)
337
405
 
@@ -343,23 +411,23 @@ priority + concurrency limits + lease lifecycle + retry/backoff + fail-closed pa
343
411
 
344
412
  ## Agent Delegation Drive (v0.1.38)
345
413
 
346
- spawn an external agent process per worker, capture result.md + attestation, auto-drive plan->dispatch->fulfill->accept->commit
414
+ start up an outside agent process per worker, take in result.md + attestation, auto-drive plan->dispatch->fulfill->accept->commit
347
415
 
348
416
  ## Run Retention & Provable Reclamation (v0.1.39)
349
417
 
350
- tiered, append-only, cryptographically-verifiable run reclamation: seal the audit skeleton, free the reconstructable bulk, prove it
418
+ tiered, append-only, cryptographically-verifiable run reclamation: seal the audit skeleton, free the bulk that can be built again, prove it
351
419
 
352
420
  ## Durable State & Locking (v0.1.40)
353
421
 
354
- atomic temp->rename writes + fsync-durability for authoritative stores; portable stale-stealing file lock serializing the cross-process read-modify-write stores
422
+ atomic temp->rename writes + fsync-durability for authoritative stores; portable stale-stealing file lock putting in order the cross-process read-modify-write stores
355
423
 
356
424
  ## Self-Audit Hardening & Pure-Router Decomposition (v0.1.41)
357
425
 
358
- evidence grounding + durable audit append + symlink-hardened containment + deterministic worker ids + recursive redaction; BackendRegistry self-describing drivers (no per-id switches); orchestrator god-object decomposed into per-domain operation modules (pure loadRun->delegate router)
426
+ evidence grounding + durable audit append + symlink-hardened containment + deterministic worker ids + recursive redaction; BackendRegistry self-describing drivers (no per-id switches); orchestrator god-object broken up into per-domain operation modules (pure loadRun->delegate router)
359
427
 
360
428
  ## Robust Result Ingest (v0.1.42)
361
429
 
362
- capture findings/evidence from any reasonable agent shape (alt keys + prose), CW derives grounded evidence itself, warn on empty capture — closes the v0.1.41 live-drive 'accepted with 0 captured' failure
430
+ take in findings/evidence from any agent shape that makes sense (alt keys + prose), CW works out grounded evidence itself, give a warning on empty capture — closes the v0.1.41 live-drive 'accepted with 0 captured' failure
363
431
 
364
432
  ## No-False-Green Gate & Launch Prep (v0.1.43)
365
433
 
@@ -367,7 +435,7 @@ Hard gate blocking empty-capture verifier-gated commits, plus quickstart and lau
367
435
 
368
436
  ## Release-Gate Determinism & Agents Vendor (v0.1.44)
369
437
 
370
- Release-readiness checks now validate the committed blob (`git show HEAD:<path>`) instead of the mutable working tree — eliminating false-red/false-green from concurrent working-tree writes (iCloud/Spotlight/editor). Adds the `agents` vendor manifest target: a generated `.agents/plugins/cool-workflow/` adapter giving any non-Claude AI agent one common interface to CW.
438
+ Release-readiness checks now check the committed blob (`git show HEAD:<path>`) in place of the mutable working tree — doing away with false-red/false-green from concurrent working-tree writes (iCloud/Spotlight/editor). Adds the `agents` vendor manifest target: a generated `.agents/plugins/cool-workflow/` adapter giving any non-Claude AI agent one common interface to CW.
371
439
 
372
440
  ## P1-P2 Fixes & CI Content Surfaces (v0.1.49)
373
441
 
@@ -384,8 +452,13 @@ Migration DAG with reversible edges (v0.1.45), capability auto-discovery (v0.1.4
384
452
 
385
453
  ## Fast Architecture Review (v0.1.80)
386
454
 
387
- Adds the opt-in fast architecture-review lane: scoped JSONL source contexts, diff-aware exports, reusable Map and Assess results, measurable wrapper metrics, actionable background full-review handoff, and userland model policy flags for routing fast/strong workers without changing the full review contract.
455
+ Adds the opt-in fast architecture-review lane: scoped JSONL source contexts, diff-aware exports, Map and Assess results you can use again, wrapper metrics you can measure, a background full-review handoff you can act on, and userland model policy flags for routing fast/strong workers without changing the full review contract.
388
456
 
389
457
  ## Re-Prove Verbs on Both Surfaces (v0.1.81)
390
458
 
391
- v0.1.81 grows the parity surface with two new both-surface, fail-closed verbs declared once in the capability registry: `cw audit verify` / `cw_audit_verify` re-proves the trust-audit chain and exits non-zero on any unverified or corrupt chain, and `cw run inspect-archive` / `cw_run_inspect_archive` is a read-only archive integrity check. Each `cw <cmd> --json` is schema-identical to its `cw_<tool>` and validated by the same parity gate.
459
+ v0.1.81 grows the parity surface with two new both-surface, fail-closed verbs declared one time in the capability registry: `cw audit verify` / `cw_audit_verify` proves the trust-audit chain again and exits non-zero on any unverified or corrupt chain, and `cw run inspect-archive` / `cw_run_inspect_archive` is a read-only archive integrity check. Each `cw <cmd> --json` is schema-identical to its `cw_<tool>` and checked by the same parity gate.
460
+ _No changes in v0.1.82._
461
+
462
+ ## Hardening and Onboarding (v0.1.83)
463
+
464
+ Loaders fail closed on corrupt state; store writes are made safe under more than one writer; a new cw doctor checks your setup; help lists every command; and the docs are put into Basic English.