@open-agent-toolkit/cli 0.3.6 → 0.3.8

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 (82) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/configuration.md +38 -18
  3. package/assets/docs/cli-utilities/workflow-gates.md +37 -0
  4. package/assets/docs/contributing/updating-model-guidance.md +6 -6
  5. package/assets/docs/provider-sync/commands.md +6 -0
  6. package/assets/docs/provider-sync/providers.md +24 -0
  7. package/assets/docs/provider-sync/scope-and-surface.md +2 -0
  8. package/assets/docs/reference/cli-reference.md +2 -1
  9. package/assets/docs/workflows/projects/autonomy.md +1 -1
  10. package/assets/docs/workflows/projects/dispatch-ceiling.md +26 -20
  11. package/assets/docs/workflows/projects/evidence-layers.md +5 -1
  12. package/assets/docs/workflows/projects/retro.md +7 -0
  13. package/assets/public-package-versions.json +4 -4
  14. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +1 -1
  15. package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-providers.sh +17 -6
  16. package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
  17. package/assets/skills/oat-dispatch-subagents/references/managed-claude-example.json +387 -0
  18. package/assets/skills/oat-dispatch-subagents/references/record-schema.md +75 -0
  19. package/assets/skills/oat-doctor/SKILL.md +2 -2
  20. package/assets/skills/oat-project-autonomous/SKILL.md +2 -2
  21. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  22. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  23. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  24. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +24 -22
  25. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  26. package/assets/skills/oat-project-import-plan/SKILL.md +4 -4
  27. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +1 -1
  28. package/assets/skills/oat-project-plan/SKILL.md +4 -4
  29. package/assets/skills/oat-project-plan-writing/SKILL.md +4 -4
  30. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  31. package/assets/skills/oat-project-quick-start/SKILL.md +4 -4
  32. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  33. package/assets/skills/oat-project-retro/SKILL.md +70 -6
  34. package/assets/skills/oat-project-review-provide/SKILL.md +3 -1
  35. package/assets/skills/oat-project-review-provide-remote/SKILL.md +3 -1
  36. package/dist/agents/canonical/resolve.d.ts +6 -4
  37. package/dist/agents/canonical/resolve.d.ts.map +1 -1
  38. package/dist/agents/canonical/resolve.js +6 -4
  39. package/dist/commands/config/index.d.ts.map +1 -1
  40. package/dist/commands/config/index.js +210 -28
  41. package/dist/commands/gate/index.d.ts.map +1 -1
  42. package/dist/commands/gate/index.js +51 -2
  43. package/dist/commands/gate/review-verdict.d.ts +22 -0
  44. package/dist/commands/gate/review-verdict.d.ts.map +1 -1
  45. package/dist/commands/gate/review-verdict.js +111 -0
  46. package/dist/commands/project/dispatch/canonical-role.d.ts +33 -0
  47. package/dist/commands/project/dispatch/canonical-role.d.ts.map +1 -0
  48. package/dist/commands/project/dispatch/canonical-role.js +114 -0
  49. package/dist/commands/project/dispatch/index.d.ts.map +1 -1
  50. package/dist/commands/project/dispatch/index.js +3 -1
  51. package/dist/commands/project/dispatch/record.d.ts.map +1 -1
  52. package/dist/commands/project/dispatch/record.js +146 -4
  53. package/dist/commands/sync/apply.d.ts.map +1 -1
  54. package/dist/commands/sync/apply.js +28 -21
  55. package/dist/commands/tools/shared/sync-evidence.d.ts.map +1 -1
  56. package/dist/commands/tools/shared/sync-evidence.js +32 -5
  57. package/dist/config/oat-config.d.ts +8 -0
  58. package/dist/config/oat-config.d.ts.map +1 -1
  59. package/dist/config/oat-config.js +116 -1
  60. package/dist/engine/compute-plan.d.ts.map +1 -1
  61. package/dist/engine/compute-plan.js +31 -3
  62. package/dist/providers/claude/dispatch-envelope.d.ts +53 -0
  63. package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -1
  64. package/dist/providers/claude/dispatch-envelope.js +324 -48
  65. package/dist/providers/claude/rule-transform.js +1 -1
  66. package/dist/providers/copilot/rule-transform.js +1 -1
  67. package/dist/providers/cursor/rule-transform.js +1 -1
  68. package/dist/providers/identity/absolute-paths.d.ts +13 -0
  69. package/dist/providers/identity/absolute-paths.d.ts.map +1 -1
  70. package/dist/providers/identity/absolute-paths.js +27 -14
  71. package/dist/providers/identity/generic-dispatch-record.d.ts +212 -0
  72. package/dist/providers/identity/generic-dispatch-record.d.ts.map +1 -1
  73. package/dist/providers/identity/generic-dispatch-record.js +78 -19
  74. package/dist/providers/identity/oat-dispatch-record.d.ts +5 -0
  75. package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -1
  76. package/dist/providers/identity/oat-dispatch-record.js +11 -2
  77. package/dist/providers/shared/registry.d.ts +6 -0
  78. package/dist/providers/shared/registry.d.ts.map +1 -1
  79. package/dist/providers/shared/registry.js +30 -0
  80. package/dist/rules/canonical/parse.d.ts.map +1 -1
  81. package/dist/rules/canonical/parse.js +38 -3
  82. package/package.json +2 -2
@@ -0,0 +1,387 @@
1
+ {
2
+ "description": "Managed Claude validation-only inputs for `oat project dispatch record --event-file <file> --json` (no --project). Each role key is one complete input. claudeLaunch.resolution is `oat project dispatch-ceiling resolve --provider claude --role <role> --json` output verbatim; claudeLaunch.definition is the generated Claude agent file content; claudeLaunch.payload is the exact launch payload; event is `oat project dispatch canonical-role --json` output. Built from fixture agents, so the definition body, role version, and content digest are illustrative. See record-schema.md, Managed Claude Validation Input.",
3
+ "implementer": {
4
+ "claudeLaunch": {
5
+ "resolution": {
6
+ "status": "resolved",
7
+ "provider": "claude",
8
+ "value": "claude-opus-5-5",
9
+ "policyMode": "managed",
10
+ "policy": "high",
11
+ "source": "repo-config",
12
+ "preset": "high",
13
+ "unresolved": false,
14
+ "projectPath": null,
15
+ "providerDefaultEffort": "not-applicable",
16
+ "matrix": {
17
+ "claude": {
18
+ "economy": {
19
+ "candidates": [
20
+ {
21
+ "harness": "claude",
22
+ "model": "claude-sonnet-5",
23
+ "effort": "medium"
24
+ }
25
+ ]
26
+ },
27
+ "balanced": {
28
+ "candidates": [
29
+ {
30
+ "harness": "claude",
31
+ "model": "claude-sonnet-5",
32
+ "effort": "high"
33
+ }
34
+ ]
35
+ },
36
+ "high": {
37
+ "candidates": [
38
+ {
39
+ "harness": "claude",
40
+ "model": "claude-opus-5-5",
41
+ "effort": "high"
42
+ }
43
+ ]
44
+ },
45
+ "frontier": {
46
+ "candidates": [
47
+ {
48
+ "harness": "claude",
49
+ "model": "claude-opus-5-5",
50
+ "effort": "xhigh"
51
+ }
52
+ ]
53
+ }
54
+ }
55
+ },
56
+ "ladderCompleteness": {
57
+ "complete": false,
58
+ "missingCells": [
59
+ "codex.economy",
60
+ "codex.balanced",
61
+ "codex.high",
62
+ "codex.frontier",
63
+ "cursor.economy",
64
+ "cursor.balanced",
65
+ "cursor.high",
66
+ "cursor.frontier"
67
+ ]
68
+ },
69
+ "providers": {
70
+ "claude": {
71
+ "value": "claude-opus-5-5",
72
+ "mode": "enforced",
73
+ "mechanism": "pinned-variant",
74
+ "dispatchArgs": {
75
+ "variant": "oat-phase-implementer-claude-claude-opus-5-5-high"
76
+ },
77
+ "modelAxis": "selected:claude-opus-5-5",
78
+ "effortAxis": "selected:high",
79
+ "verifyOnDispatch": false,
80
+ "cellSource": "repo-config",
81
+ "target": {
82
+ "harness": "claude",
83
+ "model": "claude-opus-5-5",
84
+ "effort": "high",
85
+ "crossHarness": false,
86
+ "routeIndex": 0,
87
+ "routeLength": 1,
88
+ "capabilityEvidence": {
89
+ "source": "explicit-model-id",
90
+ "modelReference": "claude-opus-5-5",
91
+ "exactModel": true,
92
+ "generation": "opus-5-5",
93
+ "capabilitiesSource": "dispatch-target-model",
94
+ "supportedEfforts": ["low", "medium", "high", "xhigh", "max"]
95
+ }
96
+ },
97
+ "selection": {
98
+ "role": "implementer",
99
+ "policyMode": "managed",
100
+ "policy": "high",
101
+ "cellSource": "repo-config",
102
+ "target": {
103
+ "harness": "claude",
104
+ "model": "claude-opus-5-5",
105
+ "effort": "high",
106
+ "crossHarness": false,
107
+ "routeIndex": 0,
108
+ "routeLength": 1,
109
+ "capabilityEvidence": {
110
+ "source": "explicit-model-id",
111
+ "modelReference": "claude-opus-5-5",
112
+ "exactModel": true,
113
+ "generation": "opus-5-5",
114
+ "capabilitiesSource": "dispatch-target-model",
115
+ "supportedEfforts": ["low", "medium", "high", "xhigh", "max"]
116
+ }
117
+ },
118
+ "requestedCandidate": null,
119
+ "candidateTier": null,
120
+ "candidateIndex": null,
121
+ "ceilingTier": "high",
122
+ "ceilingTarget": {
123
+ "harness": "claude",
124
+ "model": "claude-opus-5-5",
125
+ "effort": "high",
126
+ "crossHarness": false,
127
+ "routeIndex": 0,
128
+ "routeLength": 1,
129
+ "capabilityEvidence": {
130
+ "source": "explicit-model-id",
131
+ "modelReference": "claude-opus-5-5",
132
+ "exactModel": true,
133
+ "generation": "opus-5-5",
134
+ "capabilitiesSource": "dispatch-target-model",
135
+ "supportedEfforts": ["low", "medium", "high", "xhigh", "max"]
136
+ }
137
+ },
138
+ "preferredValue": null,
139
+ "selectedValue": "claude-opus-5-5",
140
+ "capped": false,
141
+ "selectionMode": "capped",
142
+ "selectionBranch": "matrix-pinned",
143
+ "family": "claude"
144
+ }
145
+ }
146
+ }
147
+ },
148
+ "definition": "---\n# oat-managed: true\n# oat-role: oat-phase-implementer-claude-claude-opus-5-5-high\n# oat-owner: user-config\n# oat-provider: claude\n# oat-capability-evidence: {\"source\":\"explicit-model-id\",\"modelReference\":\"claude-opus-5-5\",\"exactModel\":true,\"generation\":\"opus-5-5\",\"capabilitiesSource\":\"dispatch-target-model\",\"supportedEfforts\":[\"low\",\"medium\",\"high\",\"xhigh\",\"max\"]}\nname: oat-phase-implementer-claude-claude-opus-5-5-high\ndescription: Example fixture role for the managed Claude dispatch-record\n example. Claude-native claude-opus-5-5/high effort variant managed by OAT.\nmodel: claude-opus-5-5\neffort: high\n---\n\n## Role\n\nFixture body; `oat sync` generates the real definition.\n",
149
+ "payload": {
150
+ "variant": "oat-phase-implementer-claude-claude-opus-5-5-high"
151
+ }
152
+ },
153
+ "recordBase": {
154
+ "request_id": "example-p01-implementation",
155
+ "caller": "oat-project-implement",
156
+ "scope": "p01",
157
+ "objective": "Implement phase p01",
158
+ "action": "implementation",
159
+ "role_class": "implementation",
160
+ "dispatch_context": "phase-dispatch",
161
+ "catalog_snapshot": {
162
+ "id": "claude-generated-role-catalog",
163
+ "source": "user-sync",
164
+ "observed_at": "2026-09-27T00:00:00.000Z"
165
+ },
166
+ "authority": "phase-files",
167
+ "reasoning_mode_selector": null,
168
+ "service_tier_selector": null,
169
+ "deadline_seconds": 7200,
170
+ "retry_limit": 0,
171
+ "launch_status": "planned",
172
+ "child_outcome": null,
173
+ "runtime_confirmation": "not-reported",
174
+ "diagnostics": [],
175
+ "continuation_events": []
176
+ },
177
+ "event": {
178
+ "kind": "canonical-role-resolution",
179
+ "requestId": "example-p01-implementation",
180
+ "source": "canonical-role-resolver",
181
+ "evidence": {
182
+ "status": "resolved",
183
+ "dependency": "workflows",
184
+ "canonicalRole": "oat-phase-implementer",
185
+ "tier": "loaded",
186
+ "validation": "direct-canonical",
187
+ "canonicalPath": "<user>/agents/oat-phase-implementer.md",
188
+ "selectedPath": "<loaded>/agents/oat-phase-implementer.md",
189
+ "roleVersion": "1.0.0",
190
+ "contentDigest": "sha256:9df1dbd23a835f2329a63bbf7f75b1db0c6a5d14ffd703ec47f4a199abe2c506",
191
+ "candidateMisses": []
192
+ }
193
+ }
194
+ },
195
+ "reviewer": {
196
+ "claudeLaunch": {
197
+ "resolution": {
198
+ "status": "resolved",
199
+ "provider": "claude",
200
+ "value": "claude-opus-5-5",
201
+ "policyMode": "managed",
202
+ "policy": "high",
203
+ "source": "repo-config",
204
+ "preset": "high",
205
+ "unresolved": false,
206
+ "projectPath": null,
207
+ "providerDefaultEffort": "not-applicable",
208
+ "matrix": {
209
+ "claude": {
210
+ "economy": {
211
+ "candidates": [
212
+ {
213
+ "harness": "claude",
214
+ "model": "claude-sonnet-5",
215
+ "effort": "medium"
216
+ }
217
+ ]
218
+ },
219
+ "balanced": {
220
+ "candidates": [
221
+ {
222
+ "harness": "claude",
223
+ "model": "claude-sonnet-5",
224
+ "effort": "high"
225
+ }
226
+ ]
227
+ },
228
+ "high": {
229
+ "candidates": [
230
+ {
231
+ "harness": "claude",
232
+ "model": "claude-opus-5-5",
233
+ "effort": "high"
234
+ }
235
+ ]
236
+ },
237
+ "frontier": {
238
+ "candidates": [
239
+ {
240
+ "harness": "claude",
241
+ "model": "claude-opus-5-5",
242
+ "effort": "xhigh"
243
+ }
244
+ ]
245
+ }
246
+ }
247
+ },
248
+ "ladderCompleteness": {
249
+ "complete": false,
250
+ "missingCells": [
251
+ "codex.economy",
252
+ "codex.balanced",
253
+ "codex.high",
254
+ "codex.frontier",
255
+ "cursor.economy",
256
+ "cursor.balanced",
257
+ "cursor.high",
258
+ "cursor.frontier"
259
+ ]
260
+ },
261
+ "providers": {
262
+ "claude": {
263
+ "value": "claude-opus-5-5",
264
+ "mode": "enforced",
265
+ "mechanism": "pinned-variant",
266
+ "dispatchArgs": {
267
+ "variant": "oat-reviewer-claude-claude-opus-5-5-high"
268
+ },
269
+ "modelAxis": "selected:claude-opus-5-5",
270
+ "effortAxis": "selected:high",
271
+ "verifyOnDispatch": false,
272
+ "cellSource": "repo-config",
273
+ "target": {
274
+ "harness": "claude",
275
+ "model": "claude-opus-5-5",
276
+ "effort": "high",
277
+ "crossHarness": false,
278
+ "routeIndex": 0,
279
+ "routeLength": 1,
280
+ "capabilityEvidence": {
281
+ "source": "explicit-model-id",
282
+ "modelReference": "claude-opus-5-5",
283
+ "exactModel": true,
284
+ "generation": "opus-5-5",
285
+ "capabilitiesSource": "dispatch-target-model",
286
+ "supportedEfforts": ["low", "medium", "high", "xhigh", "max"]
287
+ }
288
+ },
289
+ "selection": {
290
+ "role": "reviewer",
291
+ "policyMode": "managed",
292
+ "policy": "high",
293
+ "cellSource": "repo-config",
294
+ "target": {
295
+ "harness": "claude",
296
+ "model": "claude-opus-5-5",
297
+ "effort": "high",
298
+ "crossHarness": false,
299
+ "routeIndex": 0,
300
+ "routeLength": 1,
301
+ "capabilityEvidence": {
302
+ "source": "explicit-model-id",
303
+ "modelReference": "claude-opus-5-5",
304
+ "exactModel": true,
305
+ "generation": "opus-5-5",
306
+ "capabilitiesSource": "dispatch-target-model",
307
+ "supportedEfforts": ["low", "medium", "high", "xhigh", "max"]
308
+ }
309
+ },
310
+ "requestedCandidate": null,
311
+ "candidateTier": null,
312
+ "candidateIndex": null,
313
+ "ceilingTier": "high",
314
+ "ceilingTarget": {
315
+ "harness": "claude",
316
+ "model": "claude-opus-5-5",
317
+ "effort": "high",
318
+ "crossHarness": false,
319
+ "routeIndex": 0,
320
+ "routeLength": 1,
321
+ "capabilityEvidence": {
322
+ "source": "explicit-model-id",
323
+ "modelReference": "claude-opus-5-5",
324
+ "exactModel": true,
325
+ "generation": "opus-5-5",
326
+ "capabilitiesSource": "dispatch-target-model",
327
+ "supportedEfforts": ["low", "medium", "high", "xhigh", "max"]
328
+ }
329
+ },
330
+ "preferredValue": null,
331
+ "selectedValue": "claude-opus-5-5",
332
+ "capped": false,
333
+ "selectionMode": "review-target",
334
+ "selectionBranch": "matrix-pinned",
335
+ "family": "claude"
336
+ }
337
+ }
338
+ }
339
+ },
340
+ "definition": "---\n# oat-managed: true\n# oat-role: oat-reviewer-claude-claude-opus-5-5-high\n# oat-owner: user-config\n# oat-provider: claude\n# oat-capability-evidence: {\"source\":\"explicit-model-id\",\"modelReference\":\"claude-opus-5-5\",\"exactModel\":true,\"generation\":\"opus-5-5\",\"capabilitiesSource\":\"dispatch-target-model\",\"supportedEfforts\":[\"low\",\"medium\",\"high\",\"xhigh\",\"max\"]}\nname: oat-reviewer-claude-claude-opus-5-5-high\ndescription: Example fixture role for the managed Claude dispatch-record\n example. Claude-native claude-opus-5-5/high effort variant managed by OAT.\nmodel: claude-opus-5-5\neffort: high\n---\n\n## Role\n\nFixture body; `oat sync` generates the real definition.\n",
341
+ "payload": {
342
+ "variant": "oat-reviewer-claude-claude-opus-5-5-high"
343
+ }
344
+ },
345
+ "recordBase": {
346
+ "request_id": "example-p01-review",
347
+ "caller": "oat-project-implement",
348
+ "scope": "p01",
349
+ "objective": "Review phase p01",
350
+ "action": "review",
351
+ "role_class": "review",
352
+ "dispatch_context": "phase-dispatch",
353
+ "catalog_snapshot": {
354
+ "id": "claude-generated-role-catalog",
355
+ "source": "user-sync",
356
+ "observed_at": "2026-09-27T00:00:00.000Z"
357
+ },
358
+ "authority": "review-artifact",
359
+ "reasoning_mode_selector": null,
360
+ "service_tier_selector": null,
361
+ "deadline_seconds": 7200,
362
+ "retry_limit": 0,
363
+ "launch_status": "planned",
364
+ "child_outcome": null,
365
+ "runtime_confirmation": "not-reported",
366
+ "diagnostics": [],
367
+ "continuation_events": []
368
+ },
369
+ "event": {
370
+ "kind": "canonical-role-resolution",
371
+ "requestId": "example-p01-review",
372
+ "source": "canonical-role-resolver",
373
+ "evidence": {
374
+ "status": "resolved",
375
+ "dependency": "workflows",
376
+ "canonicalRole": "oat-reviewer",
377
+ "tier": "loaded",
378
+ "validation": "direct-canonical",
379
+ "canonicalPath": "<user>/agents/oat-reviewer.md",
380
+ "selectedPath": "<loaded>/agents/oat-reviewer.md",
381
+ "roleVersion": "1.0.0",
382
+ "contentDigest": "sha256:0d33889c3fc61be27d6ce8c7516d74830f70d42c2eab89a627a5e649f51a2ec3",
383
+ "candidateMisses": []
384
+ }
385
+ }
386
+ }
387
+ }
@@ -208,6 +208,81 @@ otherwise agent-proposed alternate route approved for the current run. For
208
208
  `configured_invocation_evidence`. CLI or SDK availability alone is never a
209
209
  selection source.
210
210
 
211
+ ## Managed Claude Validation Input
212
+
213
+ Before every managed, effort-pinned Claude implementer or reviewer launch,
214
+ `oat-project-implement` runs `oat project dispatch record --event-file <file>
215
+ --json` without `--project` and requires `status: validated-only`. That input
216
+ replaces `record` with three top-level keys:
217
+
218
+ - `claudeLaunch`, an object with three keys of its own:
219
+ - `resolution`: the output of
220
+ `oat project dispatch-ceiling resolve --provider claude --role <implementer|reviewer> --json`,
221
+ verbatim.
222
+ - `definition`: the full text of the generated Claude agent file for the
223
+ selected variant.
224
+ - `payload`: the exact launch payload, `{ "variant": "<variant>" }`,
225
+ optionally with `model` equal to the selected model.
226
+ - `recordBase`: the caller-authored generic fields below.
227
+ - `event`: the `canonical-role-resolution` event, produced rather than written
228
+ by hand.
229
+
230
+ The command derives these fields from the accepted launch, and `recordBase`
231
+ must omit them: `provider`, `dispatch_policy`, `dispatch_ceiling`,
232
+ `role_name`, `role_selector`, `model_selector`,
233
+ `model_selector_granularity`, `effort_selector`, `selection_source`,
234
+ `candidates_considered`, `selection_reason`, `selected_route`, `payload`, and
235
+ `configured_invocation_evidence`. `recordBase` supplies every other required
236
+ generic field: `request_id`, `caller`, `scope`, `objective`, `action`,
237
+ `role_class`, `dispatch_context`, `catalog_snapshot`, `authority`,
238
+ `deadline_seconds`, `retry_limit`, `launch_status`, `child_outcome`,
239
+ `runtime_confirmation`, `diagnostics`, and `continuation_events`. `action` is
240
+ `implementation` or `fix` for the implementer and `review` for the reviewer.
241
+
242
+ Produce the event with the resolver itself:
243
+
244
+ ```bash
245
+ oat project dispatch canonical-role --role <oat-phase-implementer|oat-reviewer> \
246
+ --request-id <recordBase.request_id> --skill-dir <loaded oat-project-implement dir> --json
247
+ ```
248
+
249
+ `--skill-dir` is required because the loaded tier is derived from it; the user
250
+ tier is `$HOME/.agents` and the project tier is `<repo>/.agents`. The command
251
+ is read-only. Its event carries `kind: canonical-role-resolution`, `requestId`
252
+ equal to `recordBase.request_id`, `source: canonical-role-resolver`, and
253
+ `evidence`. Resolved evidence has `dependency`, `canonicalRole`, `tier`,
254
+ `validation` (`direct-canonical` or `exact-canonical-symlink`),
255
+ `canonicalPath`, `selectedPath`, `roleVersion`, `contentDigest`, and
256
+ `candidateMisses`. Paths use the redacted form
257
+ `<loaded|user|project>/agents/<name>.md`, never an absolute or `<repo>` path,
258
+ and `contentDigest` is `sha256:<64 lowercase hex>` of the canonical role file.
259
+ Missing evidence has `status: missing`, the tier misses, and `recovery`
260
+ commands; it validates, but a fallback claim requires resolved evidence.
261
+
262
+ One run reports every violation it can find, one `stage path: message` line
263
+ each, where `stage` is `claudeLaunch`, `recordBase`, or `event`. The
264
+ `recordBase` cross-field rules run even when a required field is missing. A
265
+ check that needs a value that failed to parse is skipped and named on a final
266
+ line: the launch consistency checks when the resolution is malformed, the
267
+ payload variant and model checks when the payload is malformed, and the
268
+ action/role check without a parsed resolution. Fix the reported violations and
269
+ run again. Secret-shaped values are scrubbed from the report as
270
+ `<redacted-secret>`, and absolute paths as `<redacted-path>`.
271
+
272
+ [`managed-claude-example.json`](managed-claude-example.json) holds one complete
273
+ input per role and validates as published. It is built from fixture agents
274
+ rather than the shipped roles, so its definition body, role version, and
275
+ content digest are illustrative. To regenerate it, run `dispatch-ceiling
276
+ resolve` for each role, materialize each definition from a fixture agent with
277
+ the Claude materializer that `oat sync` uses, and run `canonical-role` against
278
+ fixture role files; the CLI test that pins the example must still pass. The
279
+ published events come from a fixture home whose `.agents/agents/` holds both
280
+ roles and whose `.agents/skills/oat-project-implement/` is the `--skill-dir`,
281
+ so the loaded root is that home's `.agents`: expect `tier: loaded`,
282
+ `selectedPath: <loaded>/agents/<role>.md`, and
283
+ `canonicalPath: <user>/agents/<role>.md`. Another layout yields different but
284
+ equally valid tier labels.
285
+
211
286
  ## Recon Wave
212
287
 
213
288
  ```yaml
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Bash, Glob, Grep, AskUserQuestion
8
8
  metadata:
9
- version: 2.0.0
9
+ version: 2.0.1
10
10
  ---
11
11
 
12
12
  # OAT Doctor
@@ -111,7 +111,7 @@ Each finding is one line with an **area**, a **severity**, a one-line **summary*
111
111
  - `activeProject` or `lastPausedProject` set to a path that does not exist → `error`; fix `oat config set activeProject ''` / `oat config set lastPausedProject ''` (the CLI refuses `unset` for these two lifecycle keys). `activeIdea` set to a missing path → `error`; fix `oat config unset activeIdea --local` (or `--user` for a user-level value).
112
112
  - A set key whose `describe` entry carries `deprecated` → `warning`; summary names the key and its `deprecated.supersededBy`; when `deprecated.legacyValues` is present the finding fires only when the set value is one of those values; fix = the entry's `owningCommand` for the successor.
113
113
  - A key set on a surface that is not one of the surfaces its `describe` entry's `file` names → `warning`; fix `oat config unset <key> --<surface>` then `oat config set <key> <value> --<right surface>`.
114
- - The `dispatch-matrix` recommendation is reported only through the `project:dispatch_matrix` check (command 1, config area); there is no separate rule for it, so one gap is one finding. Its fix is `oat config adopt dispatch-matrix --shared`, and the config dive explains it from `workflow.dispatchCeiling.recommendationVersion` in the dump.
114
+ - The `project:dispatch_matrix` check (command 1, config area) reports target availability, not parity with the bundled recommendation. Do not infer parity from `workflow.dispatchCeiling.recommendationVersion`: it identifies the bundle last written by adoption. In the config dive, `oat config adopt dispatch-matrix --shared --keep-existing` fills missing cells and reports preserved differences; a direct adoption without `--keep-existing` replaces bundled cells in the chosen scope, so preview it with `--dry-run`.
115
115
  - A documented key group with nothing set on any surface → one `info` per group, expanded only in the dive.
116
116
  - Synced project health: `project:synced_tracked_artifacts`, `project:synced_gitignore`, `project:synced_projects`, `project:synced_editor_hint`, and per-project `project:synced_<slug>_<kind>` checks from command 1 → severity from status, summary from the message; report them without treating an absent checkout as proof that no synced project exists (an absent checkout is materialized by `oat project pull`, which the check's message names).
117
117
 
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion, Task
8
8
  metadata:
9
- version: 1.0.16
9
+ version: 1.0.17
10
10
  ---
11
11
 
12
12
  # Autonomous OAT Project
@@ -375,7 +375,7 @@ provider scalar or is shadowed by one at higher precedence, and block without
375
375
  mutation only when no authorized adoption-compatible scope remains. Existing
376
376
  explicit matrix cells are preserved by adoption; their provenance does not
377
377
  choose the persistence scope. Run exactly one matching
378
- `oat config adopt dispatch-matrix` command and re-run the reviewer preflight.
378
+ `oat config adopt dispatch-matrix --keep-existing` command and re-run the reviewer preflight.
379
379
  Block when the ladder remains incomplete after adoption.
380
380
 
381
381
  At every required artifact or code review:
@@ -274,7 +274,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
274
274
  | `oat-dispatch-subagents/references/provider-claude.md` | `fbe3a21e9533 -> NG` |
275
275
  | `oat-dispatch-subagents/references/provider-codex.md` | `95b0f82018c7 -> NG` |
276
276
  | `oat-dispatch-subagents/references/provider-cursor.md` | `f781555295a9 -> NG`; `55ccfef14fd6 -> NG` |
277
- | `oat-dispatch-subagents/references/record-schema.md` | `78f8069274a8 -> NG`; `1c9a84c4d1e0 -> NG`; `2a63da6e3a96 -> NG`; `30762d53b043 -> NG` |
277
+ | `oat-dispatch-subagents/references/record-schema.md` | `78f8069274a8 -> NG`; `1c9a84c4d1e0 -> NG`; `2a63da6e3a96 -> NG`; `30762d53b043 -> NG`; `66bc2f0d4fda -> NG` |
278
278
  | `oat-project-dispatch-subagents/SKILL.md` | `eca03ad1ca12 -> PDISPATCH-01`; `59fbcdc79cea -> PDISPATCH-01` |
279
279
  | `oat-project-plan/SKILL.md` | `f99e44b39932 -> PLAN-12`; `7e6a9854504b -> NG` |
280
280
  | `oat-project-complete/SKILL.md` | `0177956707aa -> NG`; `8305b5bb65ef -> NG`; `3c0b26f0ff1c -> NG`; `8cc1fa5aab1e -> COMPLETE-01`; `4c209fbb4716 -> COMPLETE-01`; `02e4175e1171 -> COMPLETE-01`; `d698d4f98e76 -> COMPLETE-01`; `9f86a7218d93 -> COMPLETE-01`; `024713698d9a -> COMPLETE-01`; `c327995053fa -> COMPLETE-01`; `61f81d4ec7c1 -> COMPLETE-01`; `14fb2e56809f -> COMPLETE-01`; `7d4ff668744d -> COMPLETE-01`; `502a6c141784 -> COMPLETE-01`; `fb7e2db356af -> COMPLETE-01`; `f73f8476360a -> NG`; `1e15f420039f -> NG`; `cc234032ddd7 -> NG`; `1dd54687229b -> NG`; `fc05c8303cd2 -> NG`; `24be721d635e -> NG` |