@open-agent-toolkit/cli 0.2.72 → 0.2.74

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 (165) hide show
  1. package/assets/agents/oat-reviewer.md +4 -3
  2. package/assets/agents/recon-worker.md +42 -8
  3. package/assets/bundle-metadata.json +1 -1
  4. package/assets/docs/cli-utilities/configuration.md +3 -56
  5. package/assets/docs/cli-utilities/tool-packs.md +4 -4
  6. package/assets/docs/contributing/code.md +2 -2
  7. package/assets/docs/contributing/index.md +0 -1
  8. package/assets/docs/reference/cli-reference.md +1 -1
  9. package/assets/docs/reference/troubleshooting.md +17 -40
  10. package/assets/docs/workflows/projects/artifacts.md +16 -34
  11. package/assets/docs/workflows/projects/lifecycle.md +20 -19
  12. package/assets/docs/workflows/skills/explainer-kit.md +180 -440
  13. package/assets/docs/workflows/skills/index.md +1 -2
  14. package/assets/docs/workflows/skills/recon.md +114 -23
  15. package/assets/public-package-versions.json +4 -4
  16. package/assets/skills/explainer-kit/SKILL.md +96 -171
  17. package/assets/skills/explainer-kit/recipes/engineer-tour.json +1 -22
  18. package/assets/skills/explainer-kit/recipes/program-recap.json +1 -29
  19. package/assets/skills/explainer-kit/recipes/project-explainer.json +1 -22
  20. package/assets/skills/explainer-kit/recipes/project-recap.v2.json +1 -43
  21. package/assets/skills/explainer-kit/references/fact-base-contract.md +76 -101
  22. package/assets/skills/explainer-kit/references/recap-authoring.md +99 -0
  23. package/assets/skills/explainer-kit/schemas/manifest.schema.json +13 -135
  24. package/assets/skills/explainer-kit/scripts/bundle.mjs +712 -0
  25. package/assets/skills/explainer-kit/scripts/lib/claim-subject.mjs +40 -0
  26. package/assets/skills/explainer-kit/scripts/lib/contracts.mjs +113 -1504
  27. package/assets/skills/explainer-kit/scripts/lib/failure.mjs +13 -0
  28. package/assets/skills/explainer-kit/scripts/lib/package-coverage.mjs +57 -403
  29. package/assets/skills/explainer-kit/scripts/lib/qa-result.mjs +168 -0
  30. package/assets/skills/explainer-kit/scripts/lib/qa.mjs +90 -488
  31. package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +28 -545
  32. package/assets/skills/explainer-kit/scripts/lib/run-package.mjs +120 -0
  33. package/assets/skills/explainer-kit/scripts/lib/sanitize.mjs +42 -0
  34. package/assets/skills/explainer-kit/scripts/record.mjs +335 -0
  35. package/assets/skills/explainer-kit/scripts/verify.mjs +648 -0
  36. package/assets/skills/oat-explainer-kit/SKILL.md +57 -117
  37. package/assets/skills/oat-explainer-kit/references/config-contract.md +20 -64
  38. package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +85 -237
  39. package/assets/skills/oat-explainer-kit/scripts/bind-project-sources.mjs +18 -10
  40. package/assets/skills/oat-explainer-kit/scripts/check-core.mjs +1 -0
  41. package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +256 -21
  42. package/assets/skills/oat-explainer-kit/scripts/persist-intent.mjs +82 -3
  43. package/assets/skills/oat-explainer-kit/scripts/resolve-config.mjs +0 -162
  44. package/assets/skills/oat-explainer-kit/scripts/resolve-intent.mjs +57 -123
  45. package/assets/skills/oat-project-autonomous/SKILL.md +14 -13
  46. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +165 -165
  47. package/assets/skills/oat-project-complete/SKILL.md +168 -349
  48. package/assets/skills/oat-project-complete/scripts/consume-persisted-recap-intent.mjs +125 -0
  49. package/assets/skills/oat-project-complete/scripts/execute-synced-archive-entry.mjs +0 -30
  50. package/assets/skills/oat-project-complete/scripts/parse-completion-retry-fields.mjs +4 -37
  51. package/assets/skills/oat-project-complete/scripts/parse-synced-archive-resume-fields.mjs +17 -16
  52. package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +9 -174
  53. package/assets/skills/oat-project-complete/scripts/resolve-completion-retry.mjs +1 -2
  54. package/assets/skills/oat-project-document/SKILL.md +1 -1
  55. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +165 -165
  56. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  57. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +44 -56
  58. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +165 -165
  59. package/assets/skills/oat-project-lite/SKILL.md +1 -1
  60. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +165 -165
  61. package/assets/skills/oat-project-plan/SKILL.md +5 -6
  62. package/assets/skills/oat-project-pr-final/SKILL.md +1 -1
  63. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +165 -165
  64. package/assets/skills/oat-project-quick-start/SKILL.md +1 -1
  65. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +165 -165
  66. package/assets/skills/oat-project-review-receive/SKILL.md +14 -1
  67. package/assets/skills/oat-project-summary/SKILL.md +35 -25
  68. package/assets/skills/oat-wave-execute/SKILL.md +11 -36
  69. package/assets/skills/oat-wave-program/SKILL.md +13 -37
  70. package/assets/skills/recon/SKILL.md +103 -40
  71. package/assets/skills/recon/references/packet-contract.md +150 -67
  72. package/assets/skills/recon/references/profiles.md +38 -16
  73. package/assets/skills/recon/references/worker-contract.md +39 -8
  74. package/assets/skills/recon/scripts/lib/contracts.mjs +703 -55
  75. package/assets/skills/recon/scripts/lib/routing.mjs +588 -0
  76. package/assets/skills/recon/scripts/lib/validated-run.mjs +2 -0
  77. package/assets/skills/recon/scripts/prepare-routing.mjs +88 -0
  78. package/assets/skills/recon/scripts/render-packet.mjs +69 -1
  79. package/assets/skills/recon/scripts/validate-packet.mjs +473 -56
  80. package/assets/skills/subagent-orchestration/SKILL.md +18 -9
  81. package/assets/skills/subagent-orchestration/references/model-selection-principles.md +17 -8
  82. package/dist/commands/config/index.d.ts.map +1 -1
  83. package/dist/commands/config/index.js +9 -113
  84. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  85. package/dist/commands/project/archive/archive-utils.js +32 -184
  86. package/dist/commands/project/archive/explainer-package-coverage.d.ts +3 -8
  87. package/dist/commands/project/archive/explainer-package-coverage.d.ts.map +1 -1
  88. package/dist/commands/project/archive/explainer-package-coverage.js +1 -1
  89. package/dist/config/oat-config.d.ts +0 -11
  90. package/dist/config/oat-config.d.ts.map +1 -1
  91. package/dist/config/oat-config.js +0 -34
  92. package/dist/config/resolve.d.ts.map +1 -1
  93. package/dist/config/resolve.js +0 -8
  94. package/dist/release/public-package-contract.d.ts.map +1 -1
  95. package/dist/release/public-package-contract.js +2 -10
  96. package/dist/validation/project-state.d.ts.map +1 -1
  97. package/dist/validation/project-state.js +42 -3
  98. package/package.json +2 -2
  99. package/assets/docs/contributing/explainer-kit-verification.md +0 -133
  100. package/assets/docs/workflows/skills/explainer-kit-providers.md +0 -155
  101. package/assets/skills/explainer-kit/briefs/deep-dive.md +0 -35
  102. package/assets/skills/explainer-kit/briefs/project-page.md +0 -38
  103. package/assets/skills/explainer-kit/briefs/supporting-diagram.md +0 -28
  104. package/assets/skills/explainer-kit/briefs/walkthrough-deck.md +0 -35
  105. package/assets/skills/explainer-kit/examples/project-explainer/content.md +0 -31
  106. package/assets/skills/explainer-kit/examples/project-explainer/fact-base.md +0 -22
  107. package/assets/skills/explainer-kit/examples/project-recap/content.md +0 -77
  108. package/assets/skills/explainer-kit/examples/project-recap/fact-base.json +0 -104
  109. package/assets/skills/explainer-kit/examples/project-recap/fact-base.md +0 -44
  110. package/assets/skills/explainer-kit/examples/theme-bundle.json +0 -87
  111. package/assets/skills/explainer-kit/recipes/project-recap.v1.json +0 -93
  112. package/assets/skills/explainer-kit/references/contracts.md +0 -324
  113. package/assets/skills/explainer-kit/references/destination-contract.md +0 -210
  114. package/assets/skills/explainer-kit/references/extension-contract.md +0 -80
  115. package/assets/skills/explainer-kit/references/golden-conformance.md +0 -80
  116. package/assets/skills/explainer-kit/references/visual-review.md +0 -71
  117. package/assets/skills/explainer-kit/schemas/author-request.v2.schema.json +0 -212
  118. package/assets/skills/explainer-kit/schemas/author-request.v3.schema.json +0 -241
  119. package/assets/skills/explainer-kit/schemas/author-result.v2.schema.json +0 -52
  120. package/assets/skills/explainer-kit/schemas/build-record.schema.json +0 -98
  121. package/assets/skills/explainer-kit/schemas/durability-evidence.schema.json +0 -53
  122. package/assets/skills/explainer-kit/schemas/publish-receipt.v1.schema.json +0 -97
  123. package/assets/skills/explainer-kit/schemas/publish-receipt.v2.schema.json +0 -215
  124. package/assets/skills/explainer-kit/schemas/publish-request.v1.schema.json +0 -32
  125. package/assets/skills/explainer-kit/schemas/publish-request.v2.schema.json +0 -34
  126. package/assets/skills/explainer-kit/schemas/run-request.schema.json +0 -147
  127. package/assets/skills/explainer-kit/schemas/set-plan.v1.schema.json +0 -149
  128. package/assets/skills/explainer-kit/schemas/terminal-evidence.v1.schema.json +0 -81
  129. package/assets/skills/explainer-kit/schemas/visual-review-evidence.v1.schema.json +0 -66
  130. package/assets/skills/explainer-kit/schemas/visual-review-request.v1.schema.json +0 -117
  131. package/assets/skills/explainer-kit/schemas/visual-review-result.v1.schema.json +0 -80
  132. package/assets/skills/explainer-kit/scripts/lib/catalog.mjs +0 -349
  133. package/assets/skills/explainer-kit/scripts/lib/content-approval.mjs +0 -418
  134. package/assets/skills/explainer-kit/scripts/lib/diagram.mjs +0 -514
  135. package/assets/skills/explainer-kit/scripts/lib/durability.mjs +0 -643
  136. package/assets/skills/explainer-kit/scripts/lib/fact-base.mjs +0 -664
  137. package/assets/skills/explainer-kit/scripts/lib/internal-references.mjs +0 -538
  138. package/assets/skills/explainer-kit/scripts/lib/markdown.mjs +0 -414
  139. package/assets/skills/explainer-kit/scripts/lib/publication-policy.mjs +0 -54
  140. package/assets/skills/explainer-kit/scripts/lib/records.mjs +0 -954
  141. package/assets/skills/explainer-kit/scripts/lib/render.mjs +0 -703
  142. package/assets/skills/explainer-kit/scripts/lib/s3-roots.mjs +0 -353
  143. package/assets/skills/explainer-kit/scripts/lib/s3-static.mjs +0 -759
  144. package/assets/skills/explainer-kit/scripts/lib/set-plan.mjs +0 -209
  145. package/assets/skills/explainer-kit/scripts/lib/source-backlinks.mjs +0 -218
  146. package/assets/skills/explainer-kit/scripts/lib/terminal-evidence.mjs +0 -157
  147. package/assets/skills/explainer-kit/scripts/lib/visual-review.mjs +0 -400
  148. package/assets/skills/explainer-kit/scripts/publish.mjs +0 -76
  149. package/assets/skills/explainer-kit/scripts/record-durability.mjs +0 -64
  150. package/assets/skills/explainer-kit/scripts/render-qa.mjs +0 -461
  151. package/assets/skills/explainer-kit/scripts/run.mjs +0 -3038
  152. package/assets/skills/explainer-kit/scripts/validate.mjs +0 -59
  153. package/assets/skills/oat-explainer-kit/references/author-callback.md +0 -53
  154. package/assets/skills/oat-explainer-kit/references/migration.md +0 -144
  155. package/assets/skills/oat-explainer-kit/references/visual-review-callback.md +0 -83
  156. package/assets/skills/oat-explainer-kit/scripts/derive-destination.mjs +0 -91
  157. package/assets/skills/oat-explainer-kit/scripts/finalize-tracked-run.mjs +0 -531
  158. package/assets/skills/oat-explainer-kit/scripts/probe-recap-seams.mjs +0 -371
  159. package/assets/skills/oat-explainer-kit/scripts/run.mjs +0 -905
  160. package/dist/commands/project/archive/explainer-source-backlinks.d.ts +0 -18
  161. package/dist/commands/project/archive/explainer-source-backlinks.d.ts.map +0 -1
  162. package/dist/commands/project/archive/explainer-source-backlinks.js +0 -27
  163. package/dist/commands/project/archive/explainer-terminal-evidence.d.ts +0 -29
  164. package/dist/commands/project/archive/explainer-terminal-evidence.d.ts.map +0 -1
  165. package/dist/commands/project/archive/explainer-terminal-evidence.js +0 -37
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-reviewer
3
- version: 1.2.4
3
+ version: 1.2.5
4
4
  description: Unified reviewer for OAT projects - mode-aware verification of requirements/design alignment and code quality. Writes a review artifact to disk by default, or returns structured findings in-memory when dispatched in structured-output mode.
5
5
  tools: Read, Bash, Grep, Glob, Write, Task
6
6
  color: yellow
@@ -93,8 +93,9 @@ When delegation is eligible:
93
93
  Mechanical workers may execute checks and report exact output, but interpretation and policy judgment require stronger classes or stay with the root reviewer.
94
94
 
95
95
  5. The generic dispatch contract owns capability, catalog, model, effort, route, authorization, launch evidence, class-floor selection, and floor-satisfaction evidence. It applies active user and repository instructions, the active-provider reference, the live nested catalog, and the supplied policy/ceiling. Select an explicit target meeting the declared floor; never silently inherit the primary reviewer's model and never hard-code provider model names. Prefer a cheaper/faster worker only when the host reliably exposes that control and the target still satisfies the floor.
96
- 6. Give each lane an exact scope and a compact return contract: coverage, checks performed, exact `file:line` evidence, gaps, and explicit uncertainty. Reports are advisory candidate observations, not accepted findings.
97
- 7. Workers must not mutate files, emit final findings, assign severity, make validation decisions, write review artifacts or `StructuredFindings`, or otherwise write either output sink.
96
+ 6. When the selected lane worker is the canonical `recon-worker`, construct and validate its complete Assignment Gate envelope before launch: run, wave, and lane IDs; approved manifest wave mode; worker assignment mode; bounded objective; included and excluded scope; allowed and excluded inputs; source-read authority and read-only tools; sole write path; artifact kind, schema version, and closed output schema; enforcement; deadline; and escalation path. If the complete envelope cannot be constructed, do not launch the worker; record the attempt as not attempted or failed as appropriate and cover the lane inline. Other worker roles follow their own contracts.
97
+ 7. Give each lane an exact scope and a compact return contract: coverage, checks performed, exact `file:line` evidence, gaps, and explicit uncertainty. Reports are advisory candidate observations, not accepted findings.
98
+ 8. Workers must not mutate files, emit final findings, assign severity, make validation decisions, write review artifacts or `StructuredFindings`, or otherwise write either output sink.
98
99
 
99
100
  Lanes may share one homogeneous dispatch wave only when every existing dispatch axis, `task_class`, and `model_class_floor` match. Mixed task classes require separate records and waves. The one-level fan-out limit applies across all waves.
100
101
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: recon-worker
3
- version: 1.0.0
3
+ version: 1.0.1
4
4
  description: Executes one bounded recon packet assignment as a non-interactive leaf worker and writes exactly one declared artifact.
5
5
  tools: Read, Bash, Grep, Glob, Write, WebSearch, WebFetch
6
6
  color: cyan
@@ -12,12 +12,31 @@ You are a non-interactive recon leaf worker. Execute exactly one assignment in
12
12
  one declared mode: `map`, `gather`, `compile`, `verify`, `adversary`, `coverage`,
13
13
  or `reconcile`. No other mode is valid.
14
14
 
15
+ The controller maps approved manifest waves to this closed vocabulary:
16
+
17
+ | Manifest wave mode | Worker assignment mode |
18
+ | -------------------------- | ---------------------- |
19
+ | `map` | `map` |
20
+ | `gather` | `gather` |
21
+ | `compile` | `compile` |
22
+ | `semantic-verification` | `verify` |
23
+ | `adversarial` | `adversary` |
24
+ | `coverage` | `coverage` |
25
+ | `reconciliation` | `reconcile` |
26
+ | `redundant-gather` | `gather` |
27
+ | `redundant-verification` | `verify` |
28
+ | `contradiction-resolution` | `adversary` |
29
+
30
+ Preserve the approved wave identity and target; never select or upgrade a
31
+ route yourself.
32
+
15
33
  ## Assignment Gate
16
34
 
17
35
  Before work, require a complete envelope containing run, wave, and lane IDs;
18
- mode; bounded objective; included and excluded scope; allowed inputs; excluded
19
- inputs; source-read authority and read-only tools; sole write path; artifact
20
- kind and schema version; output schema; enforcement level; and deadline.
36
+ the approved manifest wave mode; exactly one worker assignment mode; bounded
37
+ objective; included and excluded scope; allowed inputs; excluded inputs;
38
+ source-read authority and read-only tools; sole write path; artifact kind and
39
+ schema version; output schema; enforcement level; and deadline.
21
40
 
22
41
  Reject the assignment if inputs overlap exclusions, source authority is
23
42
  missing, the write path is not unique and packet-contained, the schema is
@@ -70,6 +89,9 @@ reasoning, synthesis prose, or prior reviews.
70
89
  Consume only declared scope, questions, and provisional statements. Search for
71
90
  counterevidence, unsupported inference, incompatible interpretations, and
72
91
  missing alternatives. Do not read gathering or prior-review conclusions.
92
+ When assigned a `contradiction-resolution` wave, seek discriminating evidence
93
+ for that named contradiction; do not reconcile the ledger or decide which
94
+ interpretation wins.
73
95
 
74
96
  ### `coverage`
75
97
 
@@ -86,14 +108,26 @@ the existing ledger in place.
86
108
 
87
109
  ## Output
88
110
 
89
- Write one JSON artifact matching the supplied schema. Include kind, schema
90
- version, identities, mode, outcome, honored inputs and exclusions, findings or
91
- dispositions, uncertainty, contradictions, gaps, safe diagnostics, and direct
92
- input references where applicable.
111
+ Write one JSON artifact using only the supplied closed schema's fields. A
112
+ `recon.raw-dossier` identifies its approved manifest wave with `waveId` and its
113
+ closed worker assignment with `mode`; it also includes `laneId` and `outcome`.
114
+ A `recon.review-result` identifies its approved lane with `reviewerLane` and its
115
+ approved review discriminator with `reviewKind`. Include the remaining
116
+ required identity, input, exclusion, finding or disposition, uncertainty,
117
+ contradiction, gap, diagnostic, and direct-reference fields only as the
118
+ supplied schema permits.
119
+
120
+ Do not add a second mode field or any other unknown field. The controller
121
+ validates `waveId` and `mode`, or `reviewerLane` and `reviewKind`, against the
122
+ approved manifest wave before promoting the artifact.
93
123
 
94
124
  Return only the artifact path and compact outcome. Do not return source bodies,
95
125
  worker reasoning, or dossier contents to the controller.
96
126
 
127
+ The controller and caller decide whether the evidence is sufficient. Never turn
128
+ an assignment result into a downstream recommendation, architecture verdict, or
129
+ final review conclusion.
130
+
97
131
  ## Critical Rules
98
132
 
99
133
  **ONE MODE. ONE ARTIFACT.** Perform only the assigned mode and write only its
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "oatVersion": "0.2.72"
3
+ "oatVersion": "0.2.74"
4
4
  }
@@ -177,8 +177,8 @@ table and template precedence.
177
177
 
178
178
  ### Explainer configuration
179
179
 
180
- The `oat-explainer-kit` adapter owns two typed config groups. Build and publish
181
- plumbing uses `explainers.*`; project lifecycle preferences use
180
+ The `oat-explainer-kit` adapter resolves theme defaults from
181
+ `explainers.defaults.*` and project lifecycle preferences from
182
182
  `workflow.explainers.*`.
183
183
 
184
184
  | Key | Type | Stored scopes | Default |
@@ -187,12 +187,6 @@ plumbing uses `explainers.*`; project lifecycle preferences use
187
187
  | `explainers.defaults.palette` | nullable string (deprecated) | local, shared, user | `null` |
188
188
  | `explainers.defaults.visualProfile` | nullable string (deprecated) | local, shared, user | `null` |
189
189
  | `explainers.defaults.themeBundlePath` | path | local, shared | unset |
190
- | `explainers.publish.provider` | `s3-static` | shared | unset |
191
- | `explainers.publish.s3Uri` | `s3://` URI | shared | unset |
192
- | `explainers.publish.publicBaseUrl` | HTTPS URL | shared | unset |
193
- | `explainers.publish.awsRegion` | non-empty string | shared | unset |
194
- | `explainers.publish.awsProfile` | non-empty string | local, user | unset |
195
- | `explainers.publish.publicAccess` | `public\|protected` | shared | `public` |
196
190
  | `workflow.explainers.projectExplainer` | `always\|ask\|never` | local, shared, user | `ask` |
197
191
  | `workflow.explainers.projectRecap` | `always\|ask\|never` | local, shared, user | `ask` |
198
192
 
@@ -220,38 +214,6 @@ advanced compatibility but emit deprecation warnings. When no source explicitly
220
214
  selects a theme, the core uses `clean-neutral` and records a visible fallback
221
215
  warning.
222
216
 
223
- Publishing remains build-only when `explainers.publish.provider` is unset.
224
- When it is `s3-static`, `s3Uri`, `publicBaseUrl`, and `awsRegion` are all
225
- required. `awsProfile` is optional; when absent, the standard AWS credential
226
- chain applies. Config never starts publishing by itself: lifecycle callers must
227
- still select publish durability explicitly, and publishing remains
228
- human-gated. Raw AWS credentials are not config keys.
229
-
230
- `publicAccess` declares whether published objects are expected to be reachable
231
- anonymously; it does not authorize publication and it does not change any
232
- bucket policy. It selects how publication is verified. The default `public`
233
- fetches every uploaded object over HTTPS and compares the returned bytes
234
- against the manifest hash. `protected` skips those anonymous fetches, verifies
235
- each object through authenticated S3 hashing instead, and records
236
- `skipped-protected` in the publish receipt. Because no anonymous fetch happens
237
- under `protected`, a mistyped `publicBaseUrl` is not detected at publish time:
238
- the advertised URLs are still written into the initiative catalog and receipt,
239
- and the catalog records `publicVerification: "skipped-by-policy"` so consumers
240
- can see the URLs were never exercised.
241
-
242
- ### Explainer publication environment variables
243
-
244
- Two escape hatches are read from the process environment rather than from
245
- config, because both are machine-local operational overrides rather than
246
- project settings. Neither has a config key.
247
-
248
- | Variable | Effect | Default |
249
- | ------------------------------------------------ | --------------------------------------------------------------------------- | ------- |
250
- | `EXPLAINER_KIT_ALLOW_PRIVATE_PUBLIC_ROOT` | Permits a loopback, link-local, unique-local or RFC 1918 `publicBaseUrl` | off |
251
- | `EXPLAINER_KIT_SUPPRESS_ROOT_DIVERGENCE_WARNING` | Silences the advisory warning when the S3 key prefix and public path differ | off |
252
-
253
- Both accept `1`, `true` or `on`.
254
-
255
217
  ### Bundled assets root (`OAT_ASSETS_DIR`)
256
218
 
257
219
  The CLI reads its bundled skills, agents, templates, and scripts from the
@@ -294,23 +256,8 @@ packaged `assets/` directory next to the installed CLI. Setting a non-empty
294
256
  This is primarily a test-isolation and packaging seam; day-to-day use of the CLI
295
257
  does not need it.
296
258
 
297
- `EXPLAINER_KIT_ALLOW_PRIVATE_PUBLIC_ROOT` disables an anti-SSRF control. Public
298
- verification issues an outbound GET against whatever `publicBaseUrl` names, so
299
- by default the connector refuses internal addresses — including the
300
- `169.254.169.254` instance-metadata endpoint. Enable it only for a genuinely
301
- internal mirror. When it is set and the root is in fact non-public, the run
302
- records `publicRootPolicy: "private-allowed"` in the publish receipt, so a
303
- publication made with the control disabled is distinguishable in durable
304
- evidence from one made without it. The policy is address-literal only: a
305
- hostname that resolves inward is not detected either way.
306
-
307
- `EXPLAINER_KIT_SUPPRESS_ROOT_DIVERGENCE_WARNING` only affects an advisory
308
- message. Divergent roots are never a publication failure — a CloudFront Origin
309
- Path deployment legitimately maps a bucket prefix to the distribution root — so
310
- this changes no validation outcome.
311
-
312
259
  See [Explainer Kit](../workflows/skills/explainer-kit.md) for recipes, artifact
313
- locations, lifecycle behavior, and durability.
260
+ locations, lifecycle behavior, and archive/export behavior.
314
261
 
315
262
  Workflow gate objects are structured config and use their own command group
316
263
  instead of the scalar `oat config set` surface. See
@@ -161,10 +161,9 @@ oat tools update --pack research --scope project
161
161
  The public explainer family also spans two packs:
162
162
 
163
163
  - `utility` owns `explainer-kit`, the destination-neutral core with its
164
- contracts, recipes, themes, templates, render QA, durability verifier, and
165
- optional publishing connector.
164
+ recipes, briefs, themes, templates, bundler, verifier, and recorder.
166
165
  - `workflows` owns `oat-explainer-kit`, the adapter that resolves OAT config,
167
- project artifacts, output paths, and lifecycle intent.
166
+ approved project artifacts, output paths, and lifecycle intent.
168
167
 
169
168
  Install the core at user scope before using the adapter:
170
169
 
@@ -173,7 +172,8 @@ oat tools install utility --scope user
173
172
  oat tools install workflows
174
173
  ```
175
174
 
176
- The dependency is one-way: the adapter invokes the core, while the core remains
175
+ The dependency is one-way: the adapter invokes the core's
176
+ `bundle → host-agent authoring → verify → record` flow, while the core remains
177
177
  usable without OAT. The adapter checks the installed canonical core path and
178
178
  minimum compatible version before reading config or running. If the core is
179
179
  missing it fails closed with the utility install command; if it is too old it
@@ -56,8 +56,8 @@ pnpm build:docs # builds docs site and its dependencies
56
56
  ```
57
57
 
58
58
  `pnpm test` is composite: it runs the workspace vitest suites, then
59
- `test:smoke` (`tools/smoke`), `test:skills` (`.agents/skills/*/tests`), the
60
- named-file `test:release` set, and last `test:scripts` (`scripts/worktree`). Steps 5 and 6 are the version-lockstep
59
+ `test:smoke` (`tools/smoke`), `test:skills` (`.agents/skills/*/tests`), and last
60
+ `test:scripts` (`scripts/worktree`). Steps 5 and 6 are the version-lockstep
61
61
  gates; they are in the local list because they previously ran only in CI and
62
62
  version-bump drift twice reached review with no local gate to surface it.
63
63
 
@@ -17,5 +17,4 @@ Use this section when you are changing OAT itself rather than consuming it as a
17
17
  - [Commit Conventions](commit-conventions.md) - Traceable commit patterns for project and docs work.
18
18
  - [Hooks and Safety](hooks-and-safety.md) - Safety and mutation contracts for provider-sync behavior.
19
19
  - [Smoke Testing](smoke-testing.md) - Runbook for the live workflow smoke runner: prerequisites, scenarios, evidence reports, and recovery.
20
- - [Verifying Explainer Kit](explainer-kit-verification.md) - Golden recap cases, real-Chromium evidence, fixture regeneration, and release validation.
21
20
  - [Verifying Cursor Pins](verifying-cursor-pins.md) - Runbook for probe-verifying a Cursor model pin before shipping it.
@@ -151,7 +151,7 @@ Notable commands introduced in the current CLI surface:
151
151
  - `oat review latest --json` - find the newest review artifact by `oat_generated_at`, scanning the active or specified project's `reviews/` and `reviews/archived/` directories plus ad-hoc review locations. Same-time candidates use target priority, then lifecycle recency (`final` > higher phase/task > lower phase/task). The JSON contract returns `path`, `scope`, `generatedAt`, `kind` (`project` or `adhoc`), `archived`, and `actionable`, with `null` values when no review exists. Archived project reviews remain discoverable as history but return `actionable: false`.
152
152
  - `oat project list --json` - summary state for tracked projects under the configured projects root
153
153
  - `oat project complete-state <project-path>` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout
154
- - `oat project archive [project-path] [--project-recap-run <project-relative-path>] [--no-commit]` - archive a tracked project through the same local move, summary export, and configured S3 upload path used by completion. When omitted, the project path falls back to the active project. The optional recap path must identify a `project-recap` run inside the project's `explainers/` directory. Archive stages the selected complete package into `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>/`, verifies every manifest-declared immutable file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete legacy hash coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project. For synced projects, a configured S3 upload must succeed before terminal cleanup. Successful closeout makes `refs/oat/completed/<project>` authoritative, deletes the tracked JSON record and nested checkout, and leaves archive metadata sufficient for an idempotent recordless retry. Legacy complete records receive a cleanup diagnosis rather than pull/open guidance. With `--json`, the terminal receipt reports `completedRef`, `verifiedSourceSha`, whether `activeAliasDisposition` was `retained` or `removed`, whether `recordRetired` completed, and the parent `lifecycleCommit`. `--no-commit` is a manual/library-only option: for a synced project it still removes the checkout but deliberately leaves `lifecycleCommit` null. Never pass it through `oat-project-complete`, which requires that receipt.
154
+ - `oat project archive [project-path] [--project-recap-run <project-relative-path>] [--no-commit]` - archive a tracked project through the same local move, summary export, and configured S3 upload path used by completion. When omitted, the project path falls back to the active project. The optional recap path must identify a `project-recap` run inside the project's `explainers/` directory. Archive stages the selected complete package into `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>/`, verifies every manifest-declared file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete inventory coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project. For synced projects, a configured S3 upload must succeed before terminal cleanup. Successful closeout makes `refs/oat/completed/<project>` authoritative, deletes the tracked JSON record and nested checkout, and leaves archive metadata sufficient for an idempotent recordless retry. With `--json`, the terminal receipt reports `completedRef`, `verifiedSourceSha`, whether `activeAliasDisposition` was `retained` or `removed`, whether `recordRetired` completed, and the parent `lifecycleCommit`. `--no-commit` is a manual/library-only option: for a synced project it still removes the checkout but deliberately leaves `lifecycleCommit` null. Never pass it through `oat-project-complete`, which requires that receipt.
155
155
  - `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
156
156
  - `oat project dispatch record --event-file <json-file-or-dash> [--project <project-path>]` - validate one generic dispatch record plus its namespaced OAT evidence event, and persist it into the project's append-only `dispatch/` journal (optional; no lifecycle skill requires it). Omit `--project` to validate without persisting. Revision 1 is `dispatch/<request-id>.json` and every later revision is `dispatch/<request-id>@<NNNN>.json`; superseded revisions are never replaced or removed. The command validates and records evidence only — it never launches a provider. A `runtime-observation` event may carry either a finished `observation` or the provider `metadata` envelope (`provider`, `observedAt`, `entries`) to normalize, but not both. `entries` may be raw provider output: they are projected through the owning parser's allowlist, are never persisted, and both forms have their `match` derived from the record's configured invocation rather than trusted from the caller, with the observation's `provider` bound to the record's. With `--json`, the result adds `runtimeIdentity` with separate `configured` and `observed` objects plus a `match` of `matching`, `mismatching`, `not-comparable`, or `null`; observation is corroboration only and never overrides configured invocation. Error output is redacted on a best-effort basis; absolute paths in identity fields are rejected outright, while some prose forms (colon-prefixed, URL routes) can survive. See [Evidence Layers](../workflows/projects/evidence-layers.md).
157
157
  - `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. Lite plans must contain exactly one phase, declare no parallel groups, and give every Validation Criteria bullet either a backticked command or a `manual:` instruction. See [Implementation Execution](../workflows/projects/implementation-execution.md#parallel-phase-groups).
@@ -330,55 +330,32 @@ failure, which is intentional — you asked for a scope that does not exist here
330
330
 
331
331
  ## An Explainer Kit recap ends as `built-needs-review`
332
332
 
333
- `built-needs-review` means the required unattended visual-review chain did not
334
- reach a valid `pass`. The run retains available output for diagnosis, but OAT
335
- will not finalize, archive, attest, publish, or push it as a successful recap.
336
- Do not bypass the review gate by copying the package into a durable location.
333
+ `built-needs-review` is a satisfied generation outcome. The explainer page and
334
+ browser-free checks are complete, but the browser rung was unavailable or
335
+ reported a visual issue that needs a human look. Lifecycle closeout can
336
+ continue, and a fresh package that passes the complete package guard can be
337
+ selected and archived.
337
338
 
338
339
  Inspect:
339
340
 
340
- 1. `build-record.json` and `manifest.json` for the terminal outcome and warning.
341
- 2. `qa/browser/` for all required mobile, tablet, and desktop PNG/metrics pairs.
342
- 3. `qa/visual-review/attempt-*/request.json` and `result.json` for request
343
- binding, critic disposition, and findings.
344
- 4. `qa/visual-review/revision.json` when a correction was requested.
345
- 5. Adapter logs for missing or invalid `browserSession`, `visualCritic`, or
346
- correction-provider modules.
341
+ 1. `qa/result.json` for the selected browser rung, browser availability, and
342
+ visual findings.
343
+ 2. `manifest.json` for warnings, outcome, and the exact package inventory.
344
+ 3. `site/index.html` at 320, 768, and 1440 pixels when visual inspection is
345
+ available.
346
+ 4. Adapter logs for a browser launch or capture failure.
347
347
 
348
- Common causes include unavailable Chromium, a fixture or unbranded session,
349
- missing screenshots, invalid decoded PNG dimensions, runtime/capture identity
350
- drift, critic exceptions, evidence mutation, `fail`, and an unresolved
351
- correction. Fix the provider or artifact problem and rebuild the recap; partial
352
- evidence is diagnostic only.
353
-
354
- See
355
- [Explainer Provider Integration](../workflows/skills/explainer-kit-providers.md)
356
- for the trusted-session and critic contracts.
357
-
358
- ## Explainer Kit resume fails with `E_APPROVAL_RESUME`
359
-
360
- Interactive resume is same-request only. Keep the opaque `ekrt2` token returned
361
- as `approval.resumeToken` outside the package and provide it as
362
- `reviewedSource.resumeToken` with the complete original request.
363
-
364
- The error is expected when:
365
-
366
- - the token is missing, malformed, or not `ekrt2`;
367
- - the configured output root or retained run root moved;
368
- - `run-request.json` or a retained set-plan record changed;
369
- - the current request differs in source binding, recipe, mode, theme, render
370
- strategy, privacy, public URL, durability, or publish destination; or
371
- - the package contains a legacy `ekrt1` token.
372
-
373
- Do not edit retained files or weaken the current request to force a match.
374
- Restore the exact original request and package bytes. Legacy paused runs cannot
375
- be upgraded in place; restart them to receive an authenticated `ekrt2` token.
348
+ If the page is acceptable, retain the outcome as-is; the manifest honestly
349
+ records that visual review is still due. If it is not acceptable, fix the
350
+ source or authoring issue and generate a new run. Do not mutate a recorded run
351
+ package.
376
352
 
377
353
  ## Reference artifacts
378
354
 
379
355
  - `.oat/projects/<scope>/<project>/implementation.md`
380
356
  - `.oat/projects/<scope>/<project>/reviews/`
381
- - `.oat/projects/<scope>/<project>/explainers/<slug>/qa/`
357
+ - `.oat/projects/<scope>/<project>/explainers/<slug>/manifest.json`
358
+ - `.oat/projects/<scope>/<project>/explainers/<slug>/qa/result.json`
382
359
  - `packages/cli/src/commands/doctor/index.ts`
383
360
  - `packages/cli/src/commands/status/index.ts`
384
361
  - `packages/cli/src/commands/tools/shared/pack-inventory.ts`
@@ -101,8 +101,8 @@ different retention contracts:
101
101
  - A selected final `project-recap` is a durable completion record. Before a
102
102
  shared project is removed, archive copies the complete selected run to
103
103
  `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>/`, verifies its
104
- immutable package hashes, and reports that tracked export path. Summary and
105
- PR links use this export, never the gitignored local archive. Lifecycle
104
+ package inventory and hashes, and reports that tracked export path. Summary
105
+ and PR links use this export, never the gitignored local archive. Lifecycle
106
106
  callers identify the selected project-relative run with:
107
107
 
108
108
  ```bash
@@ -110,40 +110,22 @@ different retention contracts:
110
110
  --project-recap-run explainers/<recap-slug>
111
111
  ```
112
112
 
113
- The archive exports at most one selected recap package. It preserves structured
114
- failure outcomes and successful intermediates, rejects an existing dated
115
- destination, and requires the selected path to stay under the project's
116
- `explainers/` directory with a `project-recap` manifest. Verification covers
117
- the complete mode-aware package:
118
-
119
- - privacy-safe request and content approval;
120
- - fact-base JSON and Markdown;
121
- - the five immutable set-plan records and authored drafts;
122
- - declared author results and authored content;
123
- - resolved theme and every built artifact;
124
- - canonical mobile, tablet, and desktop screenshots;
125
- - paired `browser-evidence/v2` metrics with launched Chromium name, version,
126
- and capture identity;
127
- - cohesion observations and each visual-review request/result; and
128
- - the bounded revision record when a correction occurred.
129
-
130
- Canonical object hashes identify normalized fact-base, theme, runtime, and
131
- capture objects; `manifest.immutableHashes` independently covers serialized file
132
- bytes. The archive requires one complete, internally consistent browser and
133
- review chain for a successful unattended recap. Missing, stale, forged,
134
- cross-record-mismatched, or tampered coverage fails before the active project is
135
- deleted.
136
-
137
- `built-needs-review` is a terminal review-gate outcome, not a non-durable
138
- success. Its partial evidence remains available for diagnosis, but it cannot be
139
- finalized, exported, attested, archived, or pushed. Review and rebuild the recap
140
- to a passing visual-review outcome first.
113
+ The archive exports at most one selected recap package. It rejects an existing
114
+ dated destination and requires the selected path to stay under the project's
115
+ `explainers/` directory with a `project-recap` manifest. Verification checks
116
+ the manifest's exact inventory, every declared file byte, the fact base and
117
+ ledger, resolved theme, authored page, and QA result before deleting the active
118
+ project.
119
+
120
+ Both `built` and `built-needs-review` are complete, archivable outcomes.
121
+ `built-needs-review` means the browser rung was unavailable or found an issue;
122
+ the archive retains that visible human-review signal. `failed`, `incomplete`,
123
+ stale, mismatched, or tampered packages fail the export guard.
141
124
 
142
125
  Local-scope projects are not archived through this export path. Their explainer
143
- packages inherit the local project's untracked posture and remain
144
- `built-not-durable` unless independent publish evidence exists. Non-project OAT
145
- explainer runs use `.oat/repo/reference/explainers/<slug>/`; direct core callers
146
- must provide their own explicit output root.
126
+ packages remain local working artifacts. Non-project OAT explainer runs use
127
+ `.oat/repo/reference/explainers/<slug>/`; direct core callers provide an
128
+ explicit output root.
147
129
 
148
130
  ### Gate review frontmatter
149
131
 
@@ -79,24 +79,24 @@ After implementation closeout finishes:
79
79
 
80
80
  ### Project-recap gate (non-lite)
81
81
 
82
- The final-closeout orchestrator owns one project-recap gate. It runs after the
83
- final code review has passed and after any configured pre-approval summary and
84
- documentation steps, but before final HiLL approval. It neither replaces nor
85
- repeats the final review, and the stored order of the other pre-approval steps
86
- is preserved.
87
-
88
- Recap intent resolves through `oat-explainer-kit`. A fresh `project-recap`
89
- manifest for the current completed implementation is reused rather than
90
- regenerated — fresh means it names recipe `project-recap`, belongs to this
91
- project, has a terminal outcome, and its recorded source hashes match the
92
- current approved inputs. A present-but-incomplete, wrong-recipe, or stale
93
- manifest does not qualify.
94
-
95
- Recap outcomes are reported, not blocking: `failed` and `built-not-durable` are
96
- recorded as warnings and never block final approval, completion reporting, or
97
- later PR steps. The selected or attempted outcome and run path are included in
98
- the implementation completion report, and `summary.md` carries a single
99
- `Explainer Outcome` section when it exists.
82
+ The final-closeout orchestrator re-reads persisted recap intent after final
83
+ review and configured pre-approval summary and documentation steps, but before
84
+ final HiLL approval. A persisted skip suppresses manifest discovery and the
85
+ entire generation flow. A persisted generate decision reuses a fresh satisfied
86
+ package or invokes `oat-explainer-kit` § Generate.
87
+
88
+ Fresh means the package identifies this project and recipe, has outcome `built`
89
+ or `built-needs-review`, passes the complete package guard, and records source
90
+ hashes for the current approved inputs. Wrong-project, wrong-recipe, stale,
91
+ `failed`, and `incomplete` packages do not qualify.
92
+
93
+ The flow bundles approved evidence, lets the host agent author one page,
94
+ verifies it at the best available browser rung, and records the package.
95
+ `built-needs-review` satisfies generation and does not block approval. In
96
+ autonomy, an unsatisfied run is retried once; a second failure persists
97
+ `skip/failed_attempt`, which closeout consumes without another bundle or
98
+ authoring pass. Reports and `summary.md` preserve the actual outcome, run path,
99
+ or skip reason.
100
100
 
101
101
  **Lite skips this gate entirely.** Lite sets `PROJECT_RECAP_REACHABLE=false` and
102
102
  does not resolve recap intent, inspect recap runs, invoke `oat-explainer-kit`,
@@ -125,7 +125,8 @@ On completion, OAT treats archive handling as an explicit closeout choice:
125
125
  - When archiving is disabled or declined, durable projects remain at their
126
126
  active path. Synced completion still finalizes and pushes the project ref,
127
127
  commits the discovery record as `complete`, retains the checkout and ref, and
128
- attests a selected recap against the project-ref history.
128
+ keeps any recap governed by its manifest and package verification without a
129
+ separate closeout evidence push.
129
130
  - For a synced project, closeout first finalizes the project artifacts and
130
131
  pushes them to `refs/oat/projects/<project>`. Archive then requires a clean,
131
132
  fully pushed checkout; copies it without the `.git` pointer or `reviews/`;