@open-agent-toolkit/cli 0.3.7 → 0.3.9

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 (147) hide show
  1. package/README.md +3 -3
  2. package/assets/agents/oat-codebase-mapper.md +3 -2
  3. package/assets/agents/oat-reviewer.md +5 -13
  4. package/assets/agents/skeptical-evaluator.md +6 -2
  5. package/assets/bundle-metadata.json +1 -1
  6. package/assets/docs/cli-utilities/backlog-lifecycle.md +3 -2
  7. package/assets/docs/cli-utilities/bootstrap.md +5 -2
  8. package/assets/docs/cli-utilities/config-and-local-state.md +13 -6
  9. package/assets/docs/cli-utilities/configuration.md +25 -10
  10. package/assets/docs/cli-utilities/tool-packs.md +60 -10
  11. package/assets/docs/cli-utilities/workflow-gates.md +37 -0
  12. package/assets/docs/contributing/code.md +9 -5
  13. package/assets/docs/provider-sync/commands.md +17 -8
  14. package/assets/docs/provider-sync/instruction-sync.md +241 -39
  15. package/assets/docs/provider-sync/providers.md +20 -0
  16. package/assets/docs/provider-sync/scope-and-surface.md +3 -1
  17. package/assets/docs/reference/cli-reference.md +4 -1
  18. package/assets/docs/reference/oat-directory-structure.md +12 -11
  19. package/assets/docs/reference/troubleshooting.md +19 -4
  20. package/assets/docs/workflows/projects/evidence-layers.md +5 -1
  21. package/assets/docs/workflows/projects/implementation-execution.md +22 -8
  22. package/assets/docs/workflows/projects/lifecycle.md +4 -6
  23. package/assets/docs/workflows/projects/retro.md +7 -0
  24. package/assets/public-package-versions.json +4 -4
  25. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +4 -4
  26. package/assets/skills/oat-agent-instructions-analyze/references/analysis-artifact-template.md +5 -5
  27. package/assets/skills/oat-agent-instructions-analyze/references/docs/rules-files.md +14 -11
  28. package/assets/skills/oat-agent-instructions-analyze/references/quality-checklist.md +2 -2
  29. package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-instruction-files.sh +4 -3
  30. package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-providers.sh +17 -6
  31. package/assets/skills/oat-agent-instructions-apply/SKILL.md +3 -3
  32. package/assets/skills/oat-agent-instructions-apply/references/docs/rules-files.md +14 -11
  33. package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
  34. package/assets/skills/oat-dispatch-subagents/references/managed-claude-example.json +387 -0
  35. package/assets/skills/oat-dispatch-subagents/references/record-schema.md +75 -0
  36. package/assets/skills/oat-doctor/SKILL.md +17 -13
  37. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  38. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  39. package/assets/skills/oat-project-implement/SKILL.md +2 -2
  40. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +33 -11
  41. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +24 -22
  42. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  43. package/assets/skills/oat-project-implement/references/phase-execution.md +109 -8
  44. package/assets/skills/oat-project-lite/SKILL.md +23 -1
  45. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +1 -1
  46. package/assets/skills/oat-project-next/SKILL.md +3 -3
  47. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  48. package/assets/skills/oat-project-progress/SKILL.md +2 -2
  49. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  50. package/assets/skills/oat-project-retro/SKILL.md +70 -6
  51. package/assets/skills/oat-project-review-provide/SKILL.md +3 -1
  52. package/assets/skills/oat-project-review-provide-remote/SKILL.md +3 -1
  53. package/assets/templates/docs-app-mkdocs/docs/contributing.md +1 -3
  54. package/assets/templates/pjm-agents.md +7 -3
  55. package/assets/templates/state.md +2 -2
  56. package/dist/agents/canonical/resolve.d.ts +6 -4
  57. package/dist/agents/canonical/resolve.d.ts.map +1 -1
  58. package/dist/agents/canonical/resolve.js +6 -4
  59. package/dist/commands/backlog/archive.d.ts +10 -2
  60. package/dist/commands/backlog/archive.d.ts.map +1 -1
  61. package/dist/commands/backlog/archive.js +22 -6
  62. package/dist/commands/backlog/index.d.ts.map +1 -1
  63. package/dist/commands/backlog/index.js +5 -1
  64. package/dist/commands/backlog/rewrite-references.d.ts +41 -0
  65. package/dist/commands/backlog/rewrite-references.d.ts.map +1 -0
  66. package/dist/commands/backlog/rewrite-references.js +516 -0
  67. package/dist/commands/config/index.d.ts +1 -0
  68. package/dist/commands/config/index.d.ts.map +1 -1
  69. package/dist/commands/config/index.js +69 -34
  70. package/dist/commands/gate/index.d.ts.map +1 -1
  71. package/dist/commands/gate/index.js +51 -2
  72. package/dist/commands/gate/review-verdict.d.ts +22 -0
  73. package/dist/commands/gate/review-verdict.d.ts.map +1 -1
  74. package/dist/commands/gate/review-verdict.js +111 -0
  75. package/dist/commands/init/index.d.ts +6 -0
  76. package/dist/commands/init/index.d.ts.map +1 -1
  77. package/dist/commands/init/index.js +27 -4
  78. package/dist/commands/init/tools/index.d.ts +18 -1
  79. package/dist/commands/init/tools/index.d.ts.map +1 -1
  80. package/dist/commands/init/tools/index.js +84 -17
  81. package/dist/commands/init/tools/project-guidance.d.ts +19 -4
  82. package/dist/commands/init/tools/project-guidance.d.ts.map +1 -1
  83. package/dist/commands/init/tools/project-guidance.js +58 -15
  84. package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
  85. package/dist/commands/init/tools/workflows/index.js +5 -1
  86. package/dist/commands/instructions/instructions.types.d.ts +105 -4
  87. package/dist/commands/instructions/instructions.types.d.ts.map +1 -1
  88. package/dist/commands/instructions/instructions.types.js +4 -5
  89. package/dist/commands/instructions/instructions.utils.d.ts +161 -6
  90. package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
  91. package/dist/commands/instructions/instructions.utils.js +650 -12
  92. package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
  93. package/dist/commands/instructions/sync/sync.js +256 -18
  94. package/dist/commands/instructions/validate/validate.d.ts.map +1 -1
  95. package/dist/commands/instructions/validate/validate.js +36 -8
  96. package/dist/commands/pjm/index.d.ts.map +1 -1
  97. package/dist/commands/pjm/index.js +19 -4
  98. package/dist/commands/pjm/init.d.ts +3 -0
  99. package/dist/commands/pjm/init.d.ts.map +1 -1
  100. package/dist/commands/pjm/init.js +23 -5
  101. package/dist/commands/project/dispatch/canonical-role.d.ts +33 -0
  102. package/dist/commands/project/dispatch/canonical-role.d.ts.map +1 -0
  103. package/dist/commands/project/dispatch/canonical-role.js +114 -0
  104. package/dist/commands/project/dispatch/index.d.ts.map +1 -1
  105. package/dist/commands/project/dispatch/index.js +3 -1
  106. package/dist/commands/project/dispatch/record.d.ts.map +1 -1
  107. package/dist/commands/project/dispatch/record.js +146 -4
  108. package/dist/commands/shared/agents-md.d.ts +26 -5
  109. package/dist/commands/shared/agents-md.d.ts.map +1 -1
  110. package/dist/commands/shared/agents-md.js +182 -3
  111. package/dist/commands/sync/apply.d.ts.map +1 -1
  112. package/dist/commands/sync/apply.js +28 -21
  113. package/dist/commands/tools/guidance/index.d.ts +15 -0
  114. package/dist/commands/tools/guidance/index.d.ts.map +1 -0
  115. package/dist/commands/tools/guidance/index.js +81 -0
  116. package/dist/commands/tools/index.d.ts.map +1 -1
  117. package/dist/commands/tools/index.js +2 -0
  118. package/dist/commands/tools/shared/sync-evidence.d.ts.map +1 -1
  119. package/dist/commands/tools/shared/sync-evidence.js +32 -5
  120. package/dist/config/oat-config.d.ts +57 -3
  121. package/dist/config/oat-config.d.ts.map +1 -1
  122. package/dist/config/oat-config.js +223 -15
  123. package/dist/config/resolve.d.ts.map +1 -1
  124. package/dist/config/resolve.js +12 -2
  125. package/dist/engine/compute-plan.d.ts.map +1 -1
  126. package/dist/engine/compute-plan.js +31 -3
  127. package/dist/providers/claude/dispatch-envelope.d.ts +53 -0
  128. package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -1
  129. package/dist/providers/claude/dispatch-envelope.js +324 -48
  130. package/dist/providers/claude/rule-transform.js +1 -1
  131. package/dist/providers/copilot/rule-transform.js +1 -1
  132. package/dist/providers/cursor/rule-transform.js +1 -1
  133. package/dist/providers/identity/absolute-paths.d.ts +13 -0
  134. package/dist/providers/identity/absolute-paths.d.ts.map +1 -1
  135. package/dist/providers/identity/absolute-paths.js +27 -14
  136. package/dist/providers/identity/generic-dispatch-record.d.ts +212 -0
  137. package/dist/providers/identity/generic-dispatch-record.d.ts.map +1 -1
  138. package/dist/providers/identity/generic-dispatch-record.js +78 -19
  139. package/dist/providers/identity/oat-dispatch-record.d.ts +5 -0
  140. package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -1
  141. package/dist/providers/identity/oat-dispatch-record.js +11 -2
  142. package/dist/providers/shared/registry.d.ts +6 -0
  143. package/dist/providers/shared/registry.d.ts.map +1 -1
  144. package/dist/providers/shared/registry.js +30 -0
  145. package/dist/rules/canonical/parse.d.ts.map +1 -1
  146. package/dist/rules/canonical/parse.js +38 -3
  147. 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.1
9
+ version: 2.0.2
10
10
  ---
11
11
 
12
12
  # OAT Doctor
@@ -81,15 +81,15 @@ Run the seven commands below and the four file checks. Every command call is pro
81
81
 
82
82
  A command has **failed** only when its stdout does not parse as JSON, or the process is killed or times out. A non-zero exit with parseable JSON is a findings result: `oat doctor` and `oat pjm doctor` both exit 1 whenever any check warns, which is the normal state of a healthy repository. A failed command becomes one `warning` finding for its area whose summary names the command and quotes the first line of stderr; the sweep continues.
83
83
 
84
- | # | Command | Projection | Feeds |
85
- | --- | --------------------------------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------- |
86
- | 1 | `oat doctor --json --scope all` | `.checks[] \| {name, status, message}` — drop `packEvidence` and `providerRefreshAdvice` | config, tools, docs (by the check map below) |
87
- | 2 | `oat pjm doctor --json` | `.adoption` and `.checks[] \| {name, status, message}` | PJM |
88
- | 3 | `oat config dump --json` | `.shared`, `.local`, `.user` (the three surface objects) | config, docs |
89
- | 4 | `oat config describe --json` | `.entries[] \| {key, group, file, scope, defaultValue, owningCommand, deprecated}` | config |
90
- | 5 | `oat instructions validate --json` | `.summary` and `.entries[] \| select(.status != "ok") \| {agentsPath, status, detail}` | agent instructions |
91
- | 6 | `oat tools list --json --scope all` | `.tools[] \| {name, pack, scope, status}` | tools |
92
- | 7 | `oat tools outdated --json --scope all` | `.tools[] \| {name, version, bundledVersion, scope}` | tools |
84
+ | # | Command | Projection | Feeds |
85
+ | --- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
86
+ | 1 | `oat doctor --json --scope all` | `.checks[] \| {name, status, message}` — drop `packEvidence` and `providerRefreshAdvice` | config, tools, docs (by the check map below) |
87
+ | 2 | `oat pjm doctor --json` | `.adoption` and `.checks[] \| {name, status, message}` | PJM |
88
+ | 3 | `oat config dump --json` | `.shared`, `.local`, `.user` (the three surface objects) | config, docs |
89
+ | 4 | `oat config describe --json` | `.entries[] \| {key, group, file, scope, defaultValue, owningCommand, deprecated}` | config |
90
+ | 5 | `oat instructions validate --json` | `.strategy`, `.summary`, `.entries[] \| select(.status != "ok") \| {agentsPath, status, detail}`, and `.warnings[] \| {code, path, paths, wouldRemove, linkedBy, message}` (omitted when there are none) | agent instructions |
91
+ | 6 | `oat tools list --json --scope all` | `.tools[] \| {name, pack, scope, status}` | tools |
92
+ | 7 | `oat tools outdated --json --scope all` | `.tools[] \| {name, version, bundledVersion, scope}` | tools |
93
93
 
94
94
  File checks (read-only):
95
95
 
@@ -123,9 +123,13 @@ Each finding is one line with an **area**, a **severity**, a one-line **summary*
123
123
 
124
124
  **Agent instructions**
125
125
 
126
- - An entry with status `missing` or `content_mismatch` (the entry literal; the summary counter is spelled `contentMismatch`) → `error`; fix `oat instructions sync` (`--force` for a content mismatch the person confirms is stale).
126
+ - An entry with status `content_mismatch` (the entry literal; the summary counter is spelled `contentMismatch`) → `error`; fix `oat instructions sync` (`--force` for a content mismatch the person confirms is stale).
127
+ - An entry with status `missing` → `error` only when a shim strategy is configured (`.strategy` is `pointer`, `symlink`, or `copy`); fix `oat instructions sync`. Under `none`, the default, an AGENTS.md without a CLAUDE.md is correct and the CLI never reports it as `missing`.
128
+ - An entry with status `managed_shim` (strategy `none` only: a CLAUDE.md in the exact shape OAT writes) → `warning`; fix `oat instructions sync`, which removes it, unless `.warnings[]` holds a `claude_md_blocks_shim_removal` item: then sync removes nothing, so report that item instead of sending the person to sync. An entry with status `unmanaged` (a hand-written or modified CLAUDE.md that sync keeps, or one an AGENTS.md links to) is not a finding of its own; the leftover warning below covers it, including the link caveat through `linkedBy`.
129
+ - Each `.warnings[]` item with code `claude_md_hides_agents_md` → `warning`; the summary names its `path`: while that `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` exists, Claude Code's default `agents-md` mode ignores every AGENTS.md in the project (for a file below the root: in sessions started in its directory or below). Offer exactly the two fixes the CLI names: the person removes the file (the doctor never deletes it), or `oat config set instructions.claude.shims pointer` (or `symlink` / `copy`) followed by `oat instructions sync` to add shims back. When the item's `linkedBy` is non-empty, the file holds the only copy of the instructions for those AGENTS.md links: the first fix becomes "the person replaces each linking AGENTS.md with the file's content first, then removes the file", naming the `linkedBy` paths, and never offer plain removal for it. Skip an item whose `path` is in a `claude_md_blocks_shim_removal` item's `wouldRemove`: that item already names the file, and removing one kept file by hand recreates the mix the block exists to prevent.
130
+ - A `.warnings[]` item with code `claude_md_blocks_shim_removal` → `warning`: removal under `none` is all or nothing, so while any file in its `paths` (a `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` with content that is not an OAT shim) exists, `oat instructions sync` removes none of the shims in its `wouldRemove`. The summary names both lists. Offer the fixes the CLI names: the person removes each file in `paths` or moves its content into an AGENTS.md, then reruns `oat instructions sync`; or `oat config set instructions.claude.shims` to `pointer`, `symlink`, or `copy` to keep CLAUDE.md files. Its `linkedBy` maps each file in `paths` to the AGENTS.md links that reach it: for a file with a non-empty list, the first fix becomes "the person replaces each linking AGENTS.md with the file's content first, then removes the file", naming those links, and never offer plain removal for it. While this item exists, offer no removal for any path in its `wouldRemove`. The doctor never deletes or edits the files.
127
131
  - An entry with status `stray` → `warning`; fix `oat instructions sync` after the person decides whether the stray file should exist.
128
- - A CLI-written heading absent while its capability is present → `warning`: no `## Tool Packs` while any pack is installed at project scope (fix `oat tools install <pack> --project-guidance`); no `### Project Management` or `### Decision Records` while PJM adoption is `declared` (fix `oat pjm init`, which rewrites the guidance); no `## Documentation` while a docs surface exists (fix: `oat-docs-bootstrap`).
132
+ - A CLI-written heading absent while its capability is present → `warning`: no `## Tool Packs` while any pack is installed at project scope (fix `oat tools guidance`, which prints the managed `OAT tools` block for the installed packs without installing, upgrading, or writing anything, for the person to add to `AGENTS.md`); no `### Project Management` or `### Decision Records` while PJM adoption is `declared` (fix `oat pjm init`, which appends the absent guidance blocks; a block that exists but differs gets a printed manual patch); no `## Documentation` while a docs surface exists (fix: `oat-docs-bootstrap`).
129
133
  - Content quality beyond presence is not judged here; route to `oat-agent-instructions-analyze`.
130
134
 
131
135
  **Docs**
@@ -221,7 +225,7 @@ State the adoption state (`declared`, `inferred-legacy`, `partial-initialization
221
225
 
222
226
  #### Agent instructions dive
223
227
 
224
- Explain the sync strategy in use (`oat instructions validate --json` `.summary`) and each non-`ok` entry with its path. Explain each missing heading: what the CLI writes there and why an agent needs it (`cli-utilities/bootstrap.md` for `## Tool Packs`; `cli-utilities/backlog-lifecycle.md` § Adoption comes first for the PJM sections). Offer `oat instructions sync`, `oat tools install <pack> --project-guidance`, or `oat pjm init` as the finding names; for wording and coverage beyond presence, hand off to `oat-agent-instructions-analyze` then `oat-agent-instructions-apply`.
228
+ Explain the sync strategy in use (`oat instructions validate --json` `.strategy`: `none`, the default, keeps no CLAUDE.md because Claude Code reads AGENTS.md itself; `pointer`, `symlink`, and `copy` keep a shim beside each AGENTS.md) and each non-`ok` entry and leftover-CLAUDE.md warning with its path. Explain each missing heading: what the CLI writes there and why an agent needs it (`cli-utilities/bootstrap.md` for `## Tool Packs`; `cli-utilities/backlog-lifecycle.md` § Adoption comes first for the PJM sections). Offer `oat instructions sync`, `oat tools guidance` (read-only: prints the `OAT tools` block to add), or `oat pjm init` (appends absent PJM blocks) as the finding names; for wording and coverage beyond presence, hand off to `oat-agent-instructions-analyze` then `oat-agent-instructions-apply`.
225
229
 
226
230
  #### Docs dive
227
231
 
@@ -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` |