@open-agent-toolkit/cli 0.2.25 → 0.2.27

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 (87) hide show
  1. package/assets/NOTICES.md +156 -0
  2. package/assets/docs/cli-utilities/configuration.md +42 -11
  3. package/assets/docs/contributing/explainer-kit-verification.md +125 -0
  4. package/assets/docs/contributing/index.md +1 -0
  5. package/assets/docs/reference/troubleshooting.md +47 -0
  6. package/assets/docs/workflows/projects/artifacts.md +24 -6
  7. package/assets/docs/workflows/projects/dispatch-ceiling.md +67 -16
  8. package/assets/docs/workflows/skills/explainer-kit-providers.md +144 -0
  9. package/assets/docs/workflows/skills/explainer-kit.md +121 -69
  10. package/assets/docs/workflows/skills/index.md +1 -0
  11. package/assets/public-package-versions.json +4 -4
  12. package/assets/skills/explainer-kit/SKILL.md +18 -3
  13. package/assets/skills/explainer-kit/recipes/project-recap.json +43 -16
  14. package/assets/skills/explainer-kit/references/contracts.md +167 -20
  15. package/assets/skills/explainer-kit/references/golden-conformance.md +80 -0
  16. package/assets/skills/explainer-kit/references/visual-authoring.md +92 -0
  17. package/assets/skills/explainer-kit/references/visual-review.md +57 -0
  18. package/assets/skills/explainer-kit/schemas/author-request.v2.schema.json +172 -1
  19. package/assets/skills/explainer-kit/schemas/build-record.schema.json +7 -1
  20. package/assets/skills/explainer-kit/schemas/fact-base.schema.json +38 -2
  21. package/assets/skills/explainer-kit/schemas/manifest.schema.json +25 -1
  22. package/assets/skills/explainer-kit/schemas/run-request.schema.json +4 -0
  23. package/assets/skills/explainer-kit/schemas/set-plan.v1.schema.json +149 -0
  24. package/assets/skills/explainer-kit/schemas/visual-review-request.v1.schema.json +117 -0
  25. package/assets/skills/explainer-kit/schemas/visual-review-result.v1.schema.json +80 -0
  26. package/assets/skills/explainer-kit/scripts/lib/browser-runtime.mjs +148 -4
  27. package/assets/skills/explainer-kit/scripts/lib/catalog.mjs +243 -0
  28. package/assets/skills/explainer-kit/scripts/lib/contracts.mjs +586 -8
  29. package/assets/skills/explainer-kit/scripts/lib/diagram.mjs +285 -8
  30. package/assets/skills/explainer-kit/scripts/lib/durability.mjs +35 -0
  31. package/assets/skills/explainer-kit/scripts/lib/fact-base.mjs +144 -8
  32. package/assets/skills/explainer-kit/scripts/lib/package-coverage.mjs +379 -0
  33. package/assets/skills/explainer-kit/scripts/lib/png.mjs +287 -0
  34. package/assets/skills/explainer-kit/scripts/lib/qa.mjs +280 -8
  35. package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +132 -3
  36. package/assets/skills/explainer-kit/scripts/lib/records.mjs +513 -21
  37. package/assets/skills/explainer-kit/scripts/lib/render.mjs +67 -3
  38. package/assets/skills/explainer-kit/scripts/lib/s3-static.mjs +43 -1
  39. package/assets/skills/explainer-kit/scripts/lib/set-plan.mjs +208 -0
  40. package/assets/skills/explainer-kit/scripts/lib/source-backlinks.mjs +218 -0
  41. package/assets/skills/explainer-kit/scripts/lib/visual-review.mjs +380 -0
  42. package/assets/skills/explainer-kit/scripts/render-qa.mjs +48 -10
  43. package/assets/skills/explainer-kit/scripts/run.mjs +859 -134
  44. package/assets/skills/oat-explainer-kit/SKILL.md +40 -12
  45. package/assets/skills/oat-explainer-kit/references/author-callback.md +12 -10
  46. package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +40 -2
  47. package/assets/skills/oat-explainer-kit/references/visual-review-callback.md +72 -0
  48. package/assets/skills/oat-explainer-kit/scripts/bind-project-sources.mjs +167 -5
  49. package/assets/skills/oat-explainer-kit/scripts/finalize-tracked-run.mjs +92 -5
  50. package/assets/skills/oat-explainer-kit/scripts/run.mjs +324 -2
  51. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  52. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  53. package/assets/skills/oat-project-implement/SKILL.md +9 -11
  54. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +18 -9
  55. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  56. package/assets/skills/oat-project-implement/references/phase-execution.md +13 -4
  57. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  58. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  59. package/dist/commands/config/index.d.ts.map +1 -1
  60. package/dist/commands/config/index.js +27 -3
  61. package/dist/commands/project/archive/archive-utils.d.ts +1 -0
  62. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  63. package/dist/commands/project/archive/archive-utils.js +109 -42
  64. package/dist/commands/project/archive/explainer-package-coverage.d.ts +14 -0
  65. package/dist/commands/project/archive/explainer-package-coverage.d.ts.map +1 -0
  66. package/dist/commands/project/archive/explainer-package-coverage.js +27 -0
  67. package/dist/commands/project/archive/explainer-source-backlinks.d.ts +18 -0
  68. package/dist/commands/project/archive/explainer-source-backlinks.d.ts.map +1 -0
  69. package/dist/commands/project/archive/explainer-source-backlinks.js +27 -0
  70. package/dist/commands/project/archive/push-runner.d.ts +2 -1
  71. package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
  72. package/dist/commands/project/archive/push-runner.js +5 -1
  73. package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
  74. package/dist/commands/project/dispatch-ceiling/index.js +90 -0
  75. package/dist/config/dispatch-notices.d.ts +8 -0
  76. package/dist/config/dispatch-notices.d.ts.map +1 -0
  77. package/dist/config/dispatch-notices.js +79 -0
  78. package/dist/config/dispatch-policy-options.d.ts +2 -0
  79. package/dist/config/dispatch-policy-options.d.ts.map +1 -1
  80. package/dist/config/dispatch-policy-options.js +14 -2
  81. package/dist/providers/identity/dispatch-report.d.ts +17 -0
  82. package/dist/providers/identity/dispatch-report.d.ts.map +1 -1
  83. package/dist/providers/identity/dispatch-report.js +30 -0
  84. package/dist/release/public-package-contract.d.ts +6 -0
  85. package/dist/release/public-package-contract.d.ts.map +1 -1
  86. package/dist/release/public-package-contract.js +75 -0
  87. package/package.json +2 -2
@@ -0,0 +1,156 @@
1
+ # NOTICES
2
+
3
+ This file records attribution for externally-sourced prose incorporated
4
+ into this repository. When you adapt or lift prose from an external
5
+ project into a skill, template, or doc, add an entry here — do not
6
+ add attribution footers to the skill files themselves.
7
+
8
+ ## Obra Superpowers
9
+
10
+ **Source:** https://github.com/obra/superpowers
11
+ **License:** MIT
12
+ **Version referenced:** 5.0.7
13
+
14
+ ### `brainstorming` skill
15
+
16
+ Source file: `skills/brainstorming/SKILL.md`
17
+
18
+ Passages adapted or lifted verbatim into OAT:
19
+
20
+ - "Exploring approaches" (4 lines) — used in `oat-project-design` Component 3.5 (approach reaffirmation)
21
+ - "Presenting the design" (5 lines) — used in `oat-project-design` Component 4 (section iterator)
22
+ - "Design for isolation and clarity" (4 lines) — used as a principle in `oat-project-design`
23
+ - Self-review four-check template — used in `oat-project-design` Component 6
24
+ - User-review gate phrasing — used in `oat-project-design` Component 7
25
+
26
+ Consumer OAT skills: `oat-project-design`, `oat-project-quick-start`
27
+ (via lightweight-design mode choice inheriting the same prose).
28
+
29
+ ### Upstream MIT license
30
+
31
+ ```text
32
+ MIT License
33
+
34
+ Copyright (c) 2025 Jesse Vincent
35
+
36
+ Permission is hereby granted, free of charge, to any person obtaining a copy
37
+ of this software and associated documentation files (the "Software"), to deal
38
+ in the Software without restriction, including without limitation the rights
39
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
40
+ copies of the Software, and to permit persons to whom the Software is
41
+ furnished to do so, subject to the following conditions:
42
+
43
+ The above copyright notice and this permission notice shall be included in all
44
+ copies or substantial portions of the Software.
45
+
46
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
47
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
48
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
49
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
50
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
51
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
52
+ SOFTWARE.
53
+ ```
54
+
55
+ ### `brainstorming` skill — visual companion
56
+
57
+ Source files: `skills/brainstorming/scripts/{server.cjs, start-server.sh,
58
+ stop-server.sh, frame-template.html, helper.js}` and
59
+ `skills/brainstorming/visual-companion.md`.
60
+
61
+ Files lifted into OAT (under `.agents/skills/oat-brainstorm/`):
62
+
63
+ - `scripts/server.cjs`, `scripts/stop-server.sh`, `scripts/frame-template.html`,
64
+ `scripts/helper.js` — verbatim from upstream.
65
+ - `scripts/start-server.sh` — verbatim except for default persistence-path
66
+ changes (`.superpowers/brainstorm/` → OAT-managed prefixes:
67
+ `<project>/.oat/brainstorm/`, `<repo-root>/.oat/brainstorm/`,
68
+ `~/.oat/brainstorm/`).
69
+ - `references/visual-companion.md` — adapted prose: persistence paths and
70
+ example invocations updated to OAT conventions.
71
+
72
+ Consumer OAT skills: `oat-brainstorm`.
73
+
74
+ ## shadcn/improve
75
+
76
+ **Source:** https://github.com/shadcn/improve/tree/main/skills/improve
77
+ **License:** MIT
78
+ **Version referenced:** `main` (retrieved 2026-07-12)
79
+
80
+ ### `improve` skill
81
+
82
+ Source files: `skills/improve/SKILL.md` and
83
+ `skills/improve/references/{audit-playbook.md,closing-the-loop.md,plan-template.md}`.
84
+
85
+ Files copied into `.agents/skills/oat-repo-improve/`; the skill identifier,
86
+ heading, invocation examples, and generated-plan attribution were renamed for
87
+ the OAT repository namespace.
88
+
89
+ ### Upstream MIT license
90
+
91
+ ```text
92
+ MIT License
93
+
94
+ Copyright (c) 2026 shadcn
95
+
96
+ Permission is hereby granted, free of charge, to any person obtaining a copy
97
+ of this software and associated documentation files (the "Software"), to deal
98
+ in the Software without restriction, including without limitation the rights
99
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
100
+ copies of the Software, and to permit persons to whom the Software is
101
+ furnished to do so, subject to the following conditions:
102
+
103
+ The above copyright notice and this permission notice shall be included in all
104
+ copies or substantial portions of the Software.
105
+
106
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
107
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
108
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
109
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
110
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
111
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
112
+ SOFTWARE.
113
+ ```
114
+
115
+ ## visual-explainer
116
+
117
+ **Source:** https://github.com/nicobailon/visual-explainer
118
+ **License:** MIT
119
+ **Version referenced:** 0.8.1
120
+
121
+ ### Explainer templates and render QA
122
+
123
+ Visual presentation and QA patterns were adapted into
124
+ `.agents/skills/explainer-kit/`, including self-contained HTML shells,
125
+ responsive navigation, slide-deck interaction and print behavior, overflow
126
+ containment, reduced-motion handling, and structural/render checks.
127
+
128
+ The OAT implementation replaces upstream branding, destinations, invocation
129
+ commands, and example content with destination-neutral contracts, themes,
130
+ templates, and fixtures. Consumer OAT skill: `explainer-kit`.
131
+
132
+ ### Upstream MIT license
133
+
134
+ ```text
135
+ MIT License
136
+
137
+ Copyright (c) 2025 Nico Bailon
138
+
139
+ Permission is hereby granted, free of charge, to any person obtaining a copy
140
+ of this software and associated documentation files (the "Software"), to deal
141
+ in the Software without restriction, including without limitation the rights
142
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
143
+ copies of the Software, and to permit persons to whom the Software is
144
+ furnished to do so, subject to the following conditions:
145
+
146
+ The above copyright notice and this permission notice shall be included in all
147
+ copies or substantial portions of the Software.
148
+
149
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
150
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
151
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
152
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
153
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
154
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
155
+ SOFTWARE.
156
+ ```
@@ -308,6 +308,15 @@ Adoption fills missing provider/tier cells and preserves explicit existing
308
308
  values. Planning shows the complete bundled recommendation before asking for
309
309
  this scope, then rechecks the effective ladder. If explicit cells still leave
310
310
  the ladder incomplete, readiness blocks; OAT does not overwrite them.
311
+ `workflow.dispatchCeiling.recommendationVersion` describes only the bundled
312
+ recommendation that was adopted. Dispatch targets, structured notices, and
313
+ runtime disclosure come from the effective ladder after explicit cells have
314
+ been preserved.
315
+
316
+ A recommended Fable target may require model access from the executing
317
+ provider. The adopting organization is responsible for confirming its
318
+ applicable retention policy. OAT does not determine model access or
319
+ organizational retention eligibility.
311
320
 
312
321
  Scope determines ownership and Codex/Cursor materialization:
313
322
 
@@ -366,13 +375,13 @@ tiers are trimmed for readability.
366
375
 
367
376
  The bundled recommendation covers 13 Codex model/effort combinations: Luna and
368
377
  Terra at `low`, `medium`, `high`, and `xhigh`, plus Sol at those efforts and
369
- `max`. Claude covers `haiku`, `sonnet`, `opus`, and `fable`. Cursor covers 16
370
- candidates across four tiers, drawn from a materialization catalogue of 18
371
- verified multi-family flat IDs spanning Composer, Claude (Sonnet, Opus, and
372
- Fable), GPT, and Grok; the two figures differ because some approved mappings
373
- stay materializable without being recommended. An explicit mapping connects
374
- each flat ladder ID to a separate bracket-form frontmatter model; configuration
375
- and skills never derive or normalize either form.
378
+ `max`. Claude covers `haiku`, `sonnet`, `opus`, and `fable`. The recommendation
379
+ carries 14 Cursor candidates across four tiers, drawn from a materialization
380
+ catalogue with 18 catalogued multi-family flat IDs spanning Composer, Claude
381
+ (Sonnet, Opus, and Fable), GPT, and Grok; the two figures differ because some
382
+ approved mappings stay materializable without being recommended. An explicit
383
+ mapping connects each flat ladder ID to a separate bracket-form frontmatter
384
+ model; configuration and skills never derive or normalize either form.
376
385
 
377
386
  The corresponding pinned Codex variant catalogue includes
378
387
  `gpt-5.6-luna-high`, `gpt-5.6-terra-xhigh`, `gpt-5.6-sol-high`, and
@@ -432,6 +441,10 @@ oat project dispatch-ceiling resolve \
432
441
  --ceiling-tier high \
433
442
  --candidate-model gpt-5.6-terra \
434
443
  --candidate-effort medium \
444
+ --task-class default-implementation \
445
+ --task-effort medium \
446
+ --report-scope p02 \
447
+ --report-action implementation \
435
448
  --json
436
449
 
437
450
  oat project dispatch-ceiling resolve \
@@ -439,6 +452,9 @@ oat project dispatch-ceiling resolve \
439
452
  --role implementer \
440
453
  --ceiling-tier high \
441
454
  --candidate-model sonnet \
455
+ --task-class default-implementation \
456
+ --report-scope p02 \
457
+ --report-action implementation \
442
458
  --json
443
459
 
444
460
  oat project dispatch-ceiling resolve \
@@ -446,19 +462,34 @@ oat project dispatch-ceiling resolve \
446
462
  --role implementer \
447
463
  --ceiling-tier high \
448
464
  --candidate-model gpt-5.6-sol-high \
465
+ --task-class default-implementation \
466
+ --report-scope p02 \
467
+ --report-action implementation \
449
468
  --json
450
469
  ```
451
470
 
471
+ Use the same classification flags and `--report-action fix` for bounded fixes.
472
+ Reviewer routes carry neither `--task-class` nor `--task-effort`; the CLI
473
+ rejects classification flags for reviewers. Before any implementation, fix, or
474
+ reviewer launch, display `dispatchReport.notices` and the formatted report. The
475
+ effective resolver target—not the recommendation version—owns runtime
476
+ disclosure.
477
+
452
478
  `--ceiling-tier` is invocation-only. It accepts `economy`, `balanced`, `high`,
453
479
  or `frontier`, overrides layered active-policy ceilings for that call, and never
454
480
  writes user, shared, local, or project configuration. JSON reports top-level
455
481
  `source: invocation`; `providers.<provider>.cellSource` still identifies the
456
482
  config layer that owns the selected candidate.
457
483
 
458
- The resolver fails closed when a candidate is missing, above the maximum,
459
- ambiguous, malformed, or cannot compile exact provider controls. `--preferred`
460
- remains compatibility behavior for legacy scalar ceilings and managed
461
- `Uncapped`; it is not the exact managed phase-agent path.
484
+ The resolver fails closed when a requested candidate is above the maximum,
485
+ ambiguous, malformed, or cannot compile exact provider controls. Omitting an
486
+ exact candidate from a managed named-cap implementation or fix currently
487
+ preserves compatibility by resolving successfully at the cap; with report
488
+ context, human and JSON output include the
489
+ `managed-capped-selection-skipped` warning. Callers must surface that warning
490
+ and select an exact candidate before launch. `--preferred` remains
491
+ compatibility behavior for legacy scalar ceilings and managed `Uncapped`; it is
492
+ not the exact managed phase-agent path.
462
493
 
463
494
  ### Provider enforcement and materialization
464
495
 
@@ -0,0 +1,125 @@
1
+ ---
2
+ title: Verifying Explainer Kit
3
+ description: 'Maintainer runbook for semantic golden cases, temporary real-Chromium evidence, and release validation.'
4
+ ---
5
+
6
+ # Verifying Explainer Kit
7
+
8
+ Explainer Kit uses portable behavioral goldens and a real-browser release gate.
9
+ The goal is not pixel identity: output may change markup, spacing, and
10
+ composition when it preserves the same meaning, topology, interactions, and
11
+ evidence quality.
12
+
13
+ ## Golden cases
14
+
15
+ The suite under
16
+ `.agents/skills/explainer-kit/tests/fixtures/golden/` contains three
17
+ portable semantic cases:
18
+
19
+ | Case | What it proves |
20
+ | ------------------------------ | ---------------------------------------------------------- |
21
+ | `simple` | Viewport-sized lead evidence and a cohesive baseline recap |
22
+ | `non-linear` | Exact branch, fan-in, and cycle preservation |
23
+ | `explainer-authoring-redesign` | Archive-only rebuild from a dense completed project record |
24
+
25
+ Every case retains only its descriptor, source input, and content-addressed
26
+ source record. The three cases share one rubric. Generated artifacts, browser
27
+ evidence, screenshots, manifests, catalogs, and review results stay in a
28
+ temporary test directory and are never committed. Paths are
29
+ repository-relative; machine roots, home-relative paths, `file://` URLs,
30
+ Windows drive paths, and UNC paths are rejected.
31
+
32
+ ## Prerequisites
33
+
34
+ - Install workspace dependencies.
35
+ - Ensure the repository-supported Chromium runtime is installed and launchable.
36
+ - Run from the repository root.
37
+
38
+ The end-to-end benchmarks require an actual launched Chromium session. A
39
+ deterministic fixture session is valid only for bounded unit/integration tests
40
+ and cannot satisfy a golden production path.
41
+
42
+ ## Run the golden suite
43
+
44
+ ```bash
45
+ node --test \
46
+ .agents/skills/explainer-kit/tests/golden-conformance.test.mjs
47
+ ```
48
+
49
+ A passing run proves:
50
+
51
+ - one planner-owned hub, architecture view, and deck;
52
+ - source and terminology cohesion;
53
+ - exact topology and catalog parity;
54
+ - mobile, tablet, and desktop Chromium evidence;
55
+ - one independent critic invocation; and
56
+ - a passing terminal review without correction.
57
+
58
+ The focused integration suites below separately exercise the one-correction
59
+ ceiling.
60
+
61
+ The suite recomputes semantic-input hashes, grounds every claim in retained
62
+ source evidence, and evaluates the shared rubric against live runtime output.
63
+ A prose claim or status label without runtime proof does not pass.
64
+
65
+ ## Inspect generated evidence
66
+
67
+ The suite materializes each case's runtime package under its temporary working
68
+ directory, validates it, and removes it at test completion. Add a local
69
+ debugger breakpoint or temporarily disable cleanup when diagnosing a failure;
70
+ do not add generated runtime output to the fixture directories.
71
+
72
+ ## Focused integrity suites
73
+
74
+ Use these when changing browser identity, immutable evidence, resume, or archive
75
+ contracts:
76
+
77
+ ```bash
78
+ node --test \
79
+ .agents/skills/explainer-kit/tests/records.test.mjs \
80
+ .agents/skills/explainer-kit/tests/run.integration.test.mjs
81
+
82
+ node --test \
83
+ .agents/skills/explainer-kit/tests/browser-runtime.test.mjs \
84
+ .agents/skills/explainer-kit/tests/qa.test.mjs \
85
+ .agents/skills/explainer-kit/tests/contracts.test.mjs \
86
+ .agents/skills/explainer-kit/tests/durability.test.mjs \
87
+ .agents/skills/explainer-kit/tests/rebuildability.test.mjs
88
+
89
+ pnpm --filter @open-agent-toolkit/cli exec vitest run \
90
+ src/commands/project/archive/archive-utils.test.ts \
91
+ src/release/public-package-contract.test.ts
92
+
93
+ node --test tools/smoke/explainer-kit/*.test.mjs
94
+ ```
95
+
96
+ ## Release gate
97
+
98
+ The required publishable-package gate is:
99
+
100
+ ```bash
101
+ pnpm release:validate
102
+ ```
103
+
104
+ It validates all five lockstep public package tarballs and then runs the bounded
105
+ curated-style/template matrix in real Chromium. The visual gate retains 65
106
+ machine-readable viewport, clipping, motion, keyboard, no-JavaScript, and print
107
+ measurements. Missing Chromium or untrusted retained evidence fails closed.
108
+
109
+ For the full repository closeout, also run the standard checks documented in
110
+ the root `AGENTS.md`:
111
+
112
+ ```bash
113
+ pnpm check
114
+ pnpm type-check
115
+ pnpm test
116
+ pnpm build
117
+ pnpm lint
118
+ pnpm format
119
+ pnpm build:docs
120
+ git diff --check
121
+ ```
122
+
123
+ Do not treat an isolated transient timeout as a product pass or failure without
124
+ reproducing the failing test. Preserve the exact-head successful rerun evidence
125
+ used for release closure.
@@ -17,4 +17,5 @@ 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.
20
21
  - [Verifying Cursor Pins](verifying-cursor-pins.md) - Runbook for probe-verifying a Cursor model pin before shipping it.
@@ -113,9 +113,56 @@ oat tools has <pack> --scope user
113
113
  - Reconcile `state.md`, `plan.md` review table, and `implementation.md`.
114
114
  - Ensure phase/review status has been updated after reviews and fix cycles.
115
115
 
116
+ ## An Explainer Kit recap ends as `built-needs-review`
117
+
118
+ `built-needs-review` means the required unattended visual-review chain did not
119
+ reach a valid `pass`. The run retains available output for diagnosis, but OAT
120
+ will not finalize, archive, attest, publish, or push it as a successful recap.
121
+ Do not bypass the review gate by copying the package into a durable location.
122
+
123
+ Inspect:
124
+
125
+ 1. `build-record.json` and `manifest.json` for the terminal outcome and warning.
126
+ 2. `qa/browser/` for all required mobile, tablet, and desktop PNG/metrics pairs.
127
+ 3. `qa/visual-review/attempt-*/request.json` and `result.json` for request
128
+ binding, critic disposition, and findings.
129
+ 4. `qa/visual-review/revision.json` when a correction was requested.
130
+ 5. Adapter logs for missing or invalid `browserSession`, `visualCritic`, or
131
+ correction-provider modules.
132
+
133
+ Common causes include unavailable Chromium, a fixture or unbranded session,
134
+ missing screenshots, invalid decoded PNG dimensions, runtime/capture identity
135
+ drift, critic exceptions, evidence mutation, `fail`, and an unresolved
136
+ correction. Fix the provider or artifact problem and rebuild the recap; partial
137
+ evidence is diagnostic only.
138
+
139
+ See
140
+ [Explainer Provider Integration](../workflows/skills/explainer-kit-providers.md)
141
+ for the trusted-session and critic contracts.
142
+
143
+ ## Explainer Kit resume fails with `E_APPROVAL_RESUME`
144
+
145
+ Interactive resume is same-request only. Keep the opaque `ekrt2` token returned
146
+ as `approval.resumeToken` outside the package and provide it as
147
+ `reviewedSource.resumeToken` with the complete original request.
148
+
149
+ The error is expected when:
150
+
151
+ - the token is missing, malformed, or not `ekrt2`;
152
+ - the configured output root or retained run root moved;
153
+ - `run-request.json` or a retained set-plan record changed;
154
+ - the current request differs in source binding, recipe, mode, theme, render
155
+ strategy, privacy, public URL, durability, or publish destination; or
156
+ - the package contains a legacy `ekrt1` token.
157
+
158
+ Do not edit retained files or weaken the current request to force a match.
159
+ Restore the exact original request and package bytes. Legacy paused runs cannot
160
+ be upgraded in place; restart them to receive an authenticated `ekrt2` token.
161
+
116
162
  ## Reference artifacts
117
163
 
118
164
  - `.oat/projects/<scope>/<project>/implementation.md`
119
165
  - `.oat/projects/<scope>/<project>/reviews/`
166
+ - `.oat/projects/<scope>/<project>/explainers/<slug>/qa/`
120
167
  - `packages/cli/src/commands/doctor/index.ts`
121
168
  - `packages/cli/src/commands/instructions/`
@@ -57,12 +57,30 @@ The archive exports at most one selected recap package. It preserves structured
57
57
  failure outcomes and successful intermediates, rejects an existing dated
58
58
  destination, and requires the selected path to stay under the project's
59
59
  `explainers/` directory with a `project-recap` manifest. Verification covers
60
- the exact retained bytes for the privacy-safe request, content approval, fact
61
- base JSON and Markdown, declared author results, authored content, resolved
62
- theme, and every built artifact. Canonical fact-base and theme hashes remain
63
- normalized-object identities; `manifest.immutableHashes` independently covers
64
- serialized file bytes. Missing, stale, or tampered coverage fails before the
65
- active project is deleted.
60
+ the complete mode-aware package:
61
+
62
+ - privacy-safe request and content approval;
63
+ - fact-base JSON and Markdown;
64
+ - the five immutable set-plan records and authored drafts;
65
+ - declared author results and authored content;
66
+ - resolved theme and every built artifact;
67
+ - canonical mobile, tablet, and desktop screenshots;
68
+ - paired `browser-evidence/v2` metrics with launched Chromium name, version,
69
+ and capture identity;
70
+ - cohesion observations and each visual-review request/result; and
71
+ - the bounded revision record when a correction occurred.
72
+
73
+ Canonical object hashes identify normalized fact-base, theme, runtime, and
74
+ capture objects; `manifest.immutableHashes` independently covers serialized file
75
+ bytes. The archive requires one complete, internally consistent browser and
76
+ review chain for a successful unattended recap. Missing, stale, forged,
77
+ cross-record-mismatched, or tampered coverage fails before the active project is
78
+ deleted.
79
+
80
+ `built-needs-review` is a terminal review-gate outcome, not a non-durable
81
+ success. Its partial evidence remains available for diagnosis, but it cannot be
82
+ finalized, exported, attested, archived, or pushed. Review and rebuild the recap
83
+ to a passing visual-review outcome first.
66
84
 
67
85
  Local-scope projects are not archived through this export path. Their explainer
68
86
  packages inherit the local project's untracked posture and remain
@@ -63,6 +63,10 @@ Adoption fills missing provider/tier cells and records
63
63
  existing cells. Planning shows the complete recommendation before asking which
64
64
  scope should own it. If the resulting ladder is still missing or incomplete,
65
65
  planning remains blocked rather than replacing the user's explicit values.
66
+ The recommendation version describes only the bundled recommendation. After
67
+ preserving existing cells, OAT resolves the effective ladder and uses that
68
+ effective result—not the recommendation version—for dispatch targets and
69
+ runtime disclosure.
66
70
 
67
71
  ### Upgrading to a newer recommendation version
68
72
 
@@ -91,6 +95,12 @@ does not compare the two rungs. Both models remain in the pin catalog and stay
91
95
  available to a hand-edited ladder. An adopter still on the prior version keeps their existing
92
96
  Cursor tiers untouched until they take one of the actions above.
93
97
 
98
+ The terminal Fable target may require model access from the executing provider.
99
+ The adopting organization is responsible for confirming its applicable
100
+ retention policy. OAT does not determine model access or organizational
101
+ retention eligibility; recommendation membership and catalogue presence are
102
+ configuration data, not an eligibility decision.
103
+
94
104
  The terminal entries in that version are chosen, not incidental. Because the
95
105
  final candidate in a tier is the target its implementation-phase self-review
96
106
  pins, reordering a tier changes who reviews it even when the membership is
@@ -274,6 +284,10 @@ oat project dispatch-ceiling resolve \
274
284
  --ceiling-tier high \
275
285
  --candidate-model gpt-5.6-terra \
276
286
  --candidate-effort medium \
287
+ --task-class default-implementation \
288
+ --task-effort medium \
289
+ --report-scope p02 \
290
+ --report-action implementation \
277
291
  --json
278
292
 
279
293
  # Claude: exact model argument
@@ -282,6 +296,9 @@ oat project dispatch-ceiling resolve \
282
296
  --role implementer \
283
297
  --ceiling-tier high \
284
298
  --candidate-model sonnet \
299
+ --task-class default-implementation \
300
+ --report-scope p02 \
301
+ --report-action implementation \
285
302
  --json
286
303
 
287
304
  # Cursor: exact opaque configured string
@@ -290,9 +307,16 @@ oat project dispatch-ceiling resolve \
290
307
  --role implementer \
291
308
  --ceiling-tier high \
292
309
  --candidate-model gpt-5.6-sol-high \
310
+ --task-class default-implementation \
311
+ --report-scope p02 \
312
+ --report-action implementation \
293
313
  --json
294
314
  ```
295
315
 
316
+ Use the same classification flags and `--report-action fix` for a bounded fix.
317
+ Reviewer routes use neither `--task-class` nor `--task-effort`; the CLI rejects
318
+ classification flags for reviewers.
319
+
296
320
  `--ceiling-tier` accepts `economy`, `balanced`, `high`, or `frontier`. It
297
321
  overrides a layered active-policy ceiling for that resolver invocation only. It
298
322
  does not modify user, shared, local, or project configuration.
@@ -306,10 +330,14 @@ Successful JSON reports:
306
330
  `selection.requestedCandidate`
307
331
  - the exact provider-specific `dispatchArgs`
308
332
 
309
- The resolver rejects a missing candidate, an above-ceiling candidate, an
310
- ambiguous route, malformed ordering, a reviewer candidate request, or controls
311
- that cannot compile exactly. The root blocks instead of reusing its own target,
312
- a base role, or a provider default.
333
+ The resolver rejects an above-ceiling candidate, an ambiguous route, malformed
334
+ ordering, a reviewer candidate request, or controls that cannot compile
335
+ exactly. For compatibility, omitting an exact candidate from a managed
336
+ named-cap implementation or fix still resolves successfully at the cap. When
337
+ report context is present, that path emits the coded
338
+ `managed-capped-selection-skipped` warning in human and JSON output. The root
339
+ must treat the warning as a dispatch-policy violation and select an exact
340
+ candidate before launch even though the command retains exit code `0`.
313
341
 
314
342
  Implementer and fix resolution has two mutually exclusive selection branches:
315
343
 
@@ -411,20 +439,38 @@ write authority. See
411
439
 
412
440
  Resolver calls that pass `--report-scope` and `--report-action` include a
413
441
  `dispatchReport` object in JSON output. Consumers must require
414
- `dispatchReport.schemaVersion: 1` before dispatch. The report keeps four
415
- different decisions separate:
416
-
417
- | Report area | What it means |
418
- | ------------------------------------------------------------------- | -------------------------------------------------------------------- |
419
- | `policy` | The resolved managed/inherit policy, its status, name, and source |
420
- | `selection.ceilingTier` / `selection.ceilingTarget` | The maximum allowed tier and its boundary target |
421
- | `selection.requestedCandidate` / `candidateTier` / `candidateIndex` | The exact candidate requested for this bounded task and its position |
422
- | `selection.exactSelectedTarget` / `route.target` | The compiled provider target and actual invocation route |
442
+ `dispatchReport.schemaVersion: 1` before dispatch. The report keeps these
443
+ concerns separate:
444
+
445
+ | Report area | What it means |
446
+ | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
447
+ | `policy` | The resolved managed/inherit policy, its status, name, and source |
448
+ | `selection.ceilingTier` / `selection.ceilingTarget` | The maximum allowed tier and its boundary target |
449
+ | `selection.requestedCandidate` / `candidateTier` / `candidateIndex` | The exact candidate requested for this bounded task and its position |
450
+ | `selection.preferredValue` | The legacy `--preferred` selection value, or `null` when that compatibility path was not used |
451
+ | `selection.exactSelectedTarget` / `route.target` | The compiled provider target and actual invocation route |
452
+ | `classification` | Caller-reported task class, applicable Codex preferred effort, and provenance source |
453
+ | `notices` | Ordered coded warnings and advisories derived from the effective dispatch context |
423
454
 
424
455
  A named policy or ceiling is never a substitute for the requested candidate or
425
- exact selected target. `requestedControls` records what OAT put into the host
426
- payload. `configuredDefaults` records fallback configuration and is explicitly
427
- not a runtime observation.
456
+ exact selected target. Classification is provenance only: it records the
457
+ root's judgment but does not participate in candidate normalization or let OAT
458
+ judge whether that classification was correct. `requestedControls` records
459
+ what OAT put into the host payload. `configuredDefaults` records fallback
460
+ configuration and is explicitly not a runtime observation.
461
+
462
+ Managed named-cap implementation and fix reports can include two warning codes:
463
+
464
+ - `managed-capped-selection-skipped` means no exact candidate or legacy
465
+ preferred value was supplied, so compatibility behavior selected the cap.
466
+ - `managed-capped-classification-missing` means an exact candidate was supplied
467
+ without `--task-class`.
468
+
469
+ Both warnings preserve resolved status and exit code `0`. They do not apply to
470
+ policy-only preflight, reviewer, inherit, uncapped, unresolved, or
471
+ legacy-preferred routes. `terminal-reviewer-eligibility` is an advisory tied to
472
+ an effective Fable reviewer target, not proof of model access or organizational
473
+ retention eligibility.
428
474
 
429
475
  `gateInvocation` is an immutable copy of configured gate controls.
430
476
  `runtimeIdentity` is separate and stays `not-reported` until independently
@@ -446,6 +492,11 @@ when OAT can establish it; otherwise it is `unknown`. `provenance` is
446
492
  `declared`, `observed`, `inferred`, or `unknown`. Selected model and effort axes
447
493
  can remain exact even when runtime producer identity is not reported.
448
494
 
495
+ Before launching an implementation, fix, or reviewer, surface the structured
496
+ notices in `dispatchReport.notices` and render the report. Structured notices
497
+ and runtime disclosure use the effective target returned by that resolver call,
498
+ never a target inferred from the bundled recommendation version.
499
+
449
500
  ## Legacy Compatibility
450
501
 
451
502
  The following remain readable during migration: