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.
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +4 -4
- package/README.md +125 -121
- package/apps/architecture-review/app.json +1 -1
- package/apps/architecture-review-fast/app.json +1 -1
- package/apps/end-to-end-golden-path/app.json +1 -1
- package/apps/pr-review-fix-ci/app.json +1 -1
- package/apps/release-cut/app.json +1 -1
- package/apps/research-synthesis/app.json +1 -1
- package/dist/candidate-scoring.js +20 -26
- package/dist/capability-core.js +80 -93
- package/dist/capability-registry.js +30 -3
- package/dist/cli.js +12 -1
- package/dist/commit.js +217 -204
- package/dist/coordinator/util.js +6 -9
- package/dist/dispatch.js +11 -3
- package/dist/doctor.js +153 -0
- package/dist/evidence-reasoning.js +4 -1
- package/dist/execution-backend/agent.js +11 -48
- package/dist/execution-backend.js +11 -31
- package/dist/gates.js +48 -0
- package/dist/mcp-server.js +11 -0
- package/dist/multi-agent/helpers.js +6 -10
- package/dist/multi-agent/ids.js +20 -0
- package/dist/multi-agent-eval.js +27 -1
- package/dist/multi-agent-host.js +53 -21
- package/dist/multi-agent-operator-ux.js +2 -1
- package/dist/multi-agent-trust.js +5 -5
- package/dist/node-projection.js +59 -0
- package/dist/node-snapshot.js +8 -18
- package/dist/orchestrator/lifecycle-operations.js +22 -1
- package/dist/orchestrator.js +29 -2
- package/dist/reclamation/hash.js +72 -0
- package/dist/reclamation.js +31 -112
- package/dist/run-registry/queue.js +6 -7
- package/dist/run-registry.js +35 -24
- package/dist/scheduler.js +112 -57
- package/dist/topology.js +25 -4
- package/dist/trust-audit.js +70 -38
- package/dist/validation.js +328 -0
- package/dist/version.js +1 -1
- package/dist/worker-isolation.js +163 -58
- package/docs/agent-delegation-drive.7.md +90 -85
- package/docs/agent-framework.md +33 -32
- package/docs/candidate-scoring.7.md +26 -24
- package/docs/canonical-workflow-apps.7.md +40 -40
- package/docs/capability-topology-registry.7.md +24 -24
- package/docs/cli-mcp-parity.7.md +227 -154
- package/docs/contract-migration-tooling.7.md +49 -41
- package/docs/control-plane-scheduling.7.md +45 -40
- package/docs/coordinator-blackboard.7.md +30 -30
- package/docs/dogfood-one-real-repo.7.md +44 -44
- package/docs/durable-state-and-locking.7.md +35 -30
- package/docs/end-to-end-golden-path.7.md +29 -29
- package/docs/error-feedback.7.md +27 -27
- package/docs/evidence-adoption-reasoning-chain.7.md +63 -58
- package/docs/execution-backends.7.md +84 -79
- package/docs/getting-started.md +35 -18
- package/docs/index.md +3 -3
- package/docs/mcp-app-surface.7.md +64 -64
- package/docs/multi-agent-cli-mcp-surface.7.md +83 -77
- package/docs/multi-agent-eval-replay-harness.7.md +59 -54
- package/docs/multi-agent-operator-ux.7.md +70 -65
- package/docs/multi-agent-runtime-core.7.md +39 -39
- package/docs/multi-agent-topologies.7.md +24 -24
- package/docs/multi-agent-trust-policy-audit.7.md +38 -38
- package/docs/node-snapshot-diff-replay.7.md +26 -21
- package/docs/observability-cost-accounting.7.md +50 -45
- package/docs/operator-ux.7.md +30 -30
- package/docs/pipeline-runner.7.md +31 -31
- package/docs/project-index.md +15 -6
- package/docs/real-execution-backends.7.md +47 -42
- package/docs/release-and-migration.7.md +43 -38
- package/docs/release-tooling.7.md +74 -39
- package/docs/routines.md +16 -16
- package/docs/run-registry-control-plane.7.md +120 -115
- package/docs/run-retention-reclamation.7.md +46 -41
- package/docs/sandbox-profiles.7.md +32 -32
- package/docs/scheduled-tasks.md +14 -14
- package/docs/security-trust-hardening.7.md +29 -29
- package/docs/source-context-profiles.7.md +28 -28
- package/docs/state-explosion-management.7.md +64 -59
- package/docs/state-node.7.md +8 -8
- package/docs/team-collaboration.7.md +63 -58
- package/docs/trust-model.md +126 -126
- package/docs/unix-principles.md +80 -80
- package/docs/vendor-manifest-loadability.7.md +20 -20
- package/docs/verifier-gated-commit.7.md +16 -16
- package/docs/web-desktop-workbench.7.md +70 -65
- package/docs/worker-isolation.7.md +34 -37
- package/docs/workflow-app-framework.7.md +38 -38
- package/manifest/plugin.manifest.json +4 -4
- package/manifest/source-context-profiles.json +1 -1
- package/package.json +3 -2
- package/scripts/canonical-apps.js +4 -4
- package/scripts/children/batch-delegate-child.js +58 -0
- package/scripts/children/http-delegate-child.js +39 -0
- package/scripts/dogfood-release.js +1 -1
- package/scripts/gen-parity-doc.js +106 -0
- package/scripts/golden-path.js +4 -4
- package/scripts/release-flow.js +181 -5
- package/dist/verifier-registry.js +0 -46
package/docs/cli-mcp-parity.7.md
CHANGED
|
@@ -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`)
|
|
5
|
-
text with
|
|
6
|
-
machine context:
|
|
7
|
-
doors two
|
|
8
|
-
the same capability
|
|
9
|
-
|
|
10
|
-
|
|
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
|
|
14
|
-
- mechanism (shared core) is
|
|
15
|
-
- one source, two
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
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
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
33
|
-
capabilities
|
|
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
|
|
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
|
|
39
|
-
The CLI command and the MCP tool are then two policies over that one
|
|
40
|
-
which is
|
|
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
|
|
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
|
|
45
|
-
views)
|
|
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
|
|
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
|
|
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
|
|
55
|
-
|
|
56
|
-
`--format json`. Human formatting is never
|
|
57
|
-
|
|
58
|
-
|
|
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`
|
|
61
|
-
`cw <cmd> --json` and from the `cw_<tool>` MCP result — whitespace and
|
|
62
|
-
|
|
63
|
-
and it is the same bytes the MCP tool
|
|
64
|
-
|
|
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
|
|
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`
|
|
71
|
-
payload; `projected` means a declared
|
|
72
|
-
surface-specific capability with a recorded reason. The matrix is
|
|
73
|
-
|
|
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
|
|
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
|
|
87
|
-
| `report` | `cw report
|
|
88
|
-
| `graph` | `cw graph
|
|
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
|
|
91
|
-
| `operator.report` | `cw operator report
|
|
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
|
|
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
|
|
108
|
-
| `topology.graph` | `cw topology graph
|
|
109
|
-
| `summary.refresh` | `cw summary refresh
|
|
110
|
-
| `summary.show` | `cw summary show
|
|
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
|
|
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
|
|
118
|
-
| `multi-agent.summarize` | `cw multi-agent summarize
|
|
119
|
-
| `multi-agent.graph` | `cw multi-agent graph
|
|
120
|
-
| `multi-agent.graph.compact` | `cw multi-agent graph
|
|
121
|
-
| `multi-agent.dependencies` | `cw multi-agent dependencies
|
|
122
|
-
| `multi-agent.failures` | `cw multi-agent failures
|
|
123
|
-
| `multi-agent.evidence` | `cw multi-agent evidence
|
|
124
|
-
| `multi-agent.reasoning` | `cw multi-agent reasoning
|
|
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
|
|
140
|
-
| `eval.replay` | `cw eval replay
|
|
141
|
-
| `eval.compare` | `cw eval compare
|
|
142
|
-
| `eval.score` | `cw eval score
|
|
143
|
-
| `eval.gate` | `cw eval gate
|
|
144
|
-
| `eval.report` | `cw eval report
|
|
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
|
|
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
|
|
162
|
-
| `audit.policy` | `cw audit policy
|
|
163
|
-
| `audit.role` | `cw audit role
|
|
164
|
-
| `audit.blackboard` | `cw audit blackboard
|
|
165
|
-
| `audit.judge` | `cw audit judge
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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`.
|
|
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
|
|
219
|
-
recorded reason in the registry.
|
|
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
|
-
|
|
222
|
-
|
|
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
|
-
|
|
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
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
|
307
|
+
The parity gate fails closed. Any of the things below is an error that blocks the
|
|
308
|
+
release:
|
|
242
309
|
|
|
243
|
-
- a capability
|
|
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>`
|
|
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
|
|
251
|
-
registry, the surfaces, and the recorded reasons
|
|
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
|
|
257
|
-
the registry,
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
`test/cli-mcp-parity-smoke.js` proves the contract end to end. It
|
|
261
|
-
registry ⇄ CLI ⇄ MCP coverage (every declared capability
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
declared `commit` projection, and
|
|
265
|
-
drift — a
|
|
266
|
-
payload — and
|
|
267
|
-
and `npm run release:check`.
|
|
268
|
-
|
|
269
|
-
In CW, parity is not a
|
|
270
|
-
|
|
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
|
|
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
|
|
284
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
297
|
-
|
|
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
|
-
|
|
304
|
-
fail-closed `n/a`), and host-attested token/cost from
|
|
305
|
-
— no metrics database, no collector daemon, no hidden counter. Usage is
|
|
306
|
-
and optional (
|
|
307
|
-
× a recorded pricing policy) or clearly `estimated`, with pricing
|
|
308
|
-
verbs are parity-gated and render read-only in the v0.1.30
|
|
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 —
|
|
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
|
|
319
|
-
recording who
|
|
320
|
-
authorized roles, self-approval) is data, default off (pre-v0.1.32
|
|
321
|
-
unchanged). The verbs are parity-gated and render read-only in the
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
|
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.
|