@open-agent-toolkit/cli 0.3.9 → 0.3.11

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 (193) hide show
  1. package/README.md +2 -1
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/config/dispatch-matrix-recommendation.json +6 -6
  4. package/assets/docs/cli-utilities/configuration.md +12 -8
  5. package/assets/docs/cli-utilities/meta.json +13 -0
  6. package/assets/docs/cli-utilities/tool-packs.md +8 -2
  7. package/assets/docs/cli-utilities/workflow-gates.md +14 -1
  8. package/assets/docs/contributing/code.md +8 -2
  9. package/assets/docs/contributing/documentation.md +7 -1
  10. package/assets/docs/contributing/meta.json +15 -0
  11. package/assets/docs/contributing/updating-model-guidance.md +34 -6
  12. package/assets/docs/contributing/verifying-cursor-pins.md +38 -9
  13. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +14 -5
  14. package/assets/docs/docs-tooling/commands.md +26 -8
  15. package/assets/docs/docs-tooling/meta.json +4 -0
  16. package/assets/docs/docs-tooling/workflows.md +2 -2
  17. package/assets/docs/guide/meta.json +4 -0
  18. package/assets/docs/meta.json +14 -0
  19. package/assets/docs/provider-sync/instruction-sync.md +8 -0
  20. package/assets/docs/provider-sync/meta.json +11 -0
  21. package/assets/docs/provider-sync/providers.md +4 -4
  22. package/assets/docs/provider-sync/scope-and-surface.md +3 -4
  23. package/assets/docs/reference/cli-reference.md +5 -2
  24. package/assets/docs/reference/docs-index-contract.md +22 -6
  25. package/assets/docs/reference/file-locations.md +7 -2
  26. package/assets/docs/reference/index.md +1 -1
  27. package/assets/docs/reference/meta.json +10 -0
  28. package/assets/docs/reference/troubleshooting.md +41 -6
  29. package/assets/docs/workflows/ideas/meta.json +4 -0
  30. package/assets/docs/workflows/meta.json +4 -0
  31. package/assets/docs/workflows/projects/cursor-cloud.md +8 -3
  32. package/assets/docs/workflows/projects/dispatch-ceiling.md +21 -14
  33. package/assets/docs/workflows/projects/evidence-layers.md +6 -8
  34. package/assets/docs/workflows/projects/implementation-execution.md +34 -5
  35. package/assets/docs/workflows/projects/lifecycle.md +7 -1
  36. package/assets/docs/workflows/projects/meta.json +25 -0
  37. package/assets/docs/workflows/projects/orchestration-model.md +5 -6
  38. package/assets/docs/workflows/skills/meta.json +10 -0
  39. package/assets/docs/workflows/skills/recon.md +28 -3
  40. package/assets/public-package-versions.json +4 -4
  41. package/assets/skills/oat-cursor-cloud-projects/SKILL.md +30 -16
  42. package/assets/skills/oat-dispatch-subagents/SKILL.md +4 -12
  43. package/assets/skills/oat-dispatch-subagents/references/managed-claude-example.json +1 -1
  44. package/assets/skills/oat-dispatch-subagents/references/provider-codex.md +51 -0
  45. package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +5 -2
  46. package/assets/skills/oat-dispatch-subagents/references/record-schema.md +8 -7
  47. package/assets/skills/oat-docs-analyze/SKILL.md +28 -3
  48. package/assets/skills/oat-docs-apply/SKILL.md +3 -3
  49. package/assets/skills/oat-docs-authoring/SKILL.md +1 -1
  50. package/assets/skills/oat-docs-authoring/references/oat-fumadocs-contract.md +5 -2
  51. package/assets/skills/oat-docs-bootstrap/SKILL.md +4 -3
  52. package/assets/skills/oat-docs-bootstrap/assets/AGENTS.md.template +3 -3
  53. package/assets/skills/oat-pjm-decision/SKILL.md +3 -2
  54. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +4 -4
  55. package/assets/skills/oat-project-complete/SKILL.md +47 -2
  56. package/assets/skills/oat-project-design/SKILL.md +10 -6
  57. package/assets/skills/oat-project-discover/SKILL.md +3 -3
  58. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +3 -10
  59. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +4 -4
  60. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  61. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +135 -3
  62. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +8 -10
  63. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +4 -4
  64. package/assets/skills/oat-project-implement/references/plan-and-resume.md +1 -1
  65. package/assets/skills/oat-project-import-plan/SKILL.md +3 -3
  66. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +4 -4
  67. package/assets/skills/oat-project-new/SKILL.md +3 -3
  68. package/assets/skills/oat-project-next/SKILL.md +50 -7
  69. package/assets/skills/oat-project-plan/SKILL.md +4 -4
  70. package/assets/skills/oat-project-plan-writing/SKILL.md +4 -4
  71. package/assets/skills/oat-project-pr-final/SKILL.md +11 -1
  72. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +4 -4
  73. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -2
  74. package/assets/skills/oat-project-quick-start/SKILL.md +12 -8
  75. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +4 -4
  76. package/assets/skills/oat-project-retro/SKILL.md +6 -3
  77. package/assets/skills/oat-project-review-provide/SKILL.md +2 -2
  78. package/assets/skills/oat-project-review-provide-remote/SKILL.md +2 -2
  79. package/assets/skills/oat-project-spec/SKILL.md +3 -3
  80. package/assets/skills/oat-project-summary/SKILL.md +22 -3
  81. package/assets/skills/oat-repo-improve/SKILL.md +2 -2
  82. package/assets/skills/recon/SKILL.md +24 -3
  83. package/assets/skills/recon/references/packet-contract.md +36 -6
  84. package/assets/skills/recon/references/profiles.md +3 -0
  85. package/assets/skills/recon/references/worker-contract.md +16 -3
  86. package/assets/skills/recon/scripts/create-review-brief.mjs +17 -86
  87. package/assets/skills/recon/scripts/lib/contracts.mjs +158 -41
  88. package/assets/skills/recon/scripts/lib/review-binding.mjs +123 -0
  89. package/assets/skills/recon/scripts/lib/routing.mjs +5 -2
  90. package/assets/skills/recon/scripts/reconcile-ledger.mjs +18 -7
  91. package/assets/skills/recon/scripts/render-packet.mjs +93 -1
  92. package/assets/skills/recon/scripts/validate-packet.mjs +119 -88
  93. package/assets/skills/subagent-orchestration/SKILL.md +1 -1
  94. package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +20 -8
  95. package/assets/skills/subagent-orchestration/references/provider-claude.md +25 -12
  96. package/assets/skills/subagent-orchestration/references/provider-codex.md +27 -18
  97. package/assets/skills/subagent-orchestration/references/provider-cursor.md +40 -10
  98. package/assets/templates/state.md +1 -0
  99. package/dist/commands/backlog/new.d.ts +2 -2
  100. package/dist/commands/backlog/new.d.ts.map +1 -1
  101. package/dist/commands/backlog/new.js +2 -2
  102. package/dist/commands/decision/new.d.ts +2 -2
  103. package/dist/commands/decision/new.d.ts.map +1 -1
  104. package/dist/commands/decision/new.js +2 -2
  105. package/dist/commands/docs/nav/contents.d.ts +9 -0
  106. package/dist/commands/docs/nav/contents.d.ts.map +1 -1
  107. package/dist/commands/docs/nav/contents.js +7 -2
  108. package/dist/commands/docs/nav/fumadocs.d.ts +51 -0
  109. package/dist/commands/docs/nav/fumadocs.d.ts.map +1 -0
  110. package/dist/commands/docs/nav/fumadocs.js +301 -0
  111. package/dist/commands/docs/nav/sync.d.ts +31 -1
  112. package/dist/commands/docs/nav/sync.d.ts.map +1 -1
  113. package/dist/commands/docs/nav/sync.js +163 -6
  114. package/dist/commands/index.d.ts.map +1 -1
  115. package/dist/commands/index.js +2 -0
  116. package/dist/commands/instructions/instructions.utils.d.ts +19 -0
  117. package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
  118. package/dist/commands/instructions/instructions.utils.js +89 -17
  119. package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
  120. package/dist/commands/instructions/sync/sync.js +49 -2
  121. package/dist/commands/pjm/init.d.ts.map +1 -1
  122. package/dist/commands/pjm/init.js +2 -2
  123. package/dist/commands/project/closeout-check/closeout-invariant.d.ts +97 -0
  124. package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -0
  125. package/dist/commands/project/closeout-check/closeout-invariant.js +301 -0
  126. package/dist/commands/project/closeout-check/index.d.ts +38 -0
  127. package/dist/commands/project/closeout-check/index.d.ts.map +1 -0
  128. package/dist/commands/project/closeout-check/index.js +117 -0
  129. package/dist/commands/project/complete-state/index.d.ts +4 -0
  130. package/dist/commands/project/complete-state/index.d.ts.map +1 -1
  131. package/dist/commands/project/complete-state/index.js +11 -13
  132. package/dist/commands/project/dispatch/index.d.ts.map +1 -1
  133. package/dist/commands/project/dispatch/index.js +6 -30
  134. package/dist/commands/project/dispatch/record.d.ts +9 -18
  135. package/dist/commands/project/dispatch/record.d.ts.map +1 -1
  136. package/dist/commands/project/dispatch/record.js +15 -212
  137. package/dist/commands/project/index.d.ts.map +1 -1
  138. package/dist/commands/project/index.js +2 -0
  139. package/dist/commands/project/new/scaffold.d.ts +0 -1
  140. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  141. package/dist/commands/project/new/scaffold.js +19 -20
  142. package/dist/commands/project/promote/promote.d.ts +2 -2
  143. package/dist/commands/project/promote/promote.d.ts.map +1 -1
  144. package/dist/commands/project/promote/promote.js +13 -11
  145. package/dist/commands/shared/frontmatter.d.ts +21 -0
  146. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  147. package/dist/commands/shared/frontmatter.js +70 -4
  148. package/dist/commands/shared/template-source.d.ts +29 -0
  149. package/dist/commands/shared/template-source.d.ts.map +1 -0
  150. package/dist/commands/{pjm → shared}/template-source.js +24 -7
  151. package/dist/commands/state/generate.js +2 -2
  152. package/dist/commands/template/index.d.ts +10 -0
  153. package/dist/commands/template/index.d.ts.map +1 -0
  154. package/dist/commands/template/index.js +87 -0
  155. package/dist/commands/template/resolve.d.ts +31 -0
  156. package/dist/commands/template/resolve.d.ts.map +1 -0
  157. package/dist/commands/template/resolve.js +86 -0
  158. package/dist/fs/io.d.ts +0 -41
  159. package/dist/fs/io.d.ts.map +1 -1
  160. package/dist/fs/io.js +2 -414
  161. package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -1
  162. package/dist/providers/claude/dispatch-envelope.js +1 -0
  163. package/dist/providers/claude/targets.d.ts +1 -0
  164. package/dist/providers/claude/targets.d.ts.map +1 -1
  165. package/dist/providers/claude/targets.js +3 -1
  166. package/dist/providers/codex/codec/shared.d.ts +3 -0
  167. package/dist/providers/codex/codec/shared.d.ts.map +1 -1
  168. package/dist/providers/codex/codec/shared.js +4 -0
  169. package/dist/providers/cursor/codec/catalog.d.ts +2 -2
  170. package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
  171. package/dist/providers/cursor/codec/catalog.js +45 -0
  172. package/dist/providers/cursor/codec/mapping-validation.d.ts +4 -0
  173. package/dist/providers/cursor/codec/mapping-validation.d.ts.map +1 -0
  174. package/dist/providers/cursor/codec/mapping-validation.js +25 -0
  175. package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
  176. package/dist/providers/cursor/codec/materialize.js +2 -11
  177. package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
  178. package/dist/providers/cursor/codec/sync-extension.js +2 -11
  179. package/dist/providers/identity/absolute-paths.d.ts +4 -13
  180. package/dist/providers/identity/absolute-paths.d.ts.map +1 -1
  181. package/dist/providers/identity/absolute-paths.js +4 -17
  182. package/dist/providers/identity/generic-dispatch-record.d.ts +1 -1
  183. package/dist/providers/identity/generic-dispatch-record.js +2 -2
  184. package/dist/providers/identity/oat-dispatch-record.d.ts +4 -357
  185. package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -1
  186. package/dist/providers/identity/oat-dispatch-record.js +4 -236
  187. package/dist/release/public-package-contract.d.ts.map +1 -1
  188. package/dist/release/public-package-contract.js +12 -4
  189. package/dist/validation/skills.d.ts.map +1 -1
  190. package/dist/validation/skills.js +32 -6
  191. package/package.json +2 -2
  192. package/dist/commands/pjm/template-source.d.ts +0 -14
  193. package/dist/commands/pjm/template-source.d.ts.map +0 -1
package/README.md CHANGED
@@ -62,7 +62,8 @@ Use these commands when you want structured runtime/project state out of the CLI
62
62
  - `oat config dump --json` - emit merged OAT config with per-key source attribution
63
63
  - `oat project status --json` - emit the active project's full parsed control-plane state
64
64
  - `oat project list --json` - emit summary state for tracked projects under the configured projects root
65
- - `oat project complete-state <project-path>` - emit the canonical completed lifecycle shape into a tracked project's `state.md`
65
+ - `oat project closeout-check <project-path> --json` - report whether a configured, autonomous, or lite closeout's `oat_post_implement_sequence` snapshot permits terminal completion, and which step or approval owns it next (read-only)
66
+ - `oat project complete-state <project-path>` - emit the canonical completed lifecycle shape into a tracked project's `state.md`; refuses the same incomplete closeout `closeout-check` reports
66
67
 
67
68
  ## Requirements
68
69
 
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "oatVersion": "0.3.9"
3
+ "oatVersion": "0.3.11"
4
4
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026-09-25.1",
2
+ "version": "2026-10-01.1",
3
3
  "providers": {
4
4
  "codex": {
5
5
  "economy": {
@@ -39,17 +39,17 @@
39
39
  "candidates": [
40
40
  {
41
41
  "harness": "codex",
42
- "model": "gpt-6-sol",
42
+ "model": "gpt-6.1-sol",
43
43
  "effort": "low"
44
44
  },
45
45
  {
46
46
  "harness": "codex",
47
- "model": "gpt-6-sol",
47
+ "model": "gpt-6.1-sol",
48
48
  "effort": "medium"
49
49
  },
50
50
  {
51
51
  "harness": "codex",
52
- "model": "gpt-6-sol",
52
+ "model": "gpt-6.1-sol",
53
53
  "effort": "high"
54
54
  }
55
55
  ]
@@ -58,7 +58,7 @@
58
58
  "candidates": [
59
59
  {
60
60
  "harness": "codex",
61
- "model": "gpt-6-sol",
61
+ "model": "gpt-6.1-sol",
62
62
  "effort": "xhigh"
63
63
  },
64
64
  {
@@ -80,7 +80,7 @@
80
80
  "haiku",
81
81
  {
82
82
  "harness": "claude",
83
- "model": "claude-sonnet-5",
83
+ "model": "claude-sonnet-5-5",
84
84
  "effort": "medium"
85
85
  }
86
86
  ]
@@ -497,11 +497,11 @@ The example above is illustrative rather than a copy of the bundled ladder; its
497
497
  tiers are trimmed for readability.
498
498
 
499
499
  The bundled recommendation covers 11 Codex model/effort combinations: GPT-6
500
- Luna at `low` through `max`, GPT-6 Sol at `low` through `high` plus `xhigh`,
500
+ Luna at `low` through `max`, GPT-6.1 Sol at `low` through `high` plus `xhigh`,
501
501
  and GPT-6 Astra at `high` and `xhigh`.
502
502
  Claude covers `haiku`, plus explicit Sonnet, Opus, and Fable
503
503
  model/effort pairs. Effort-pinned Claude cells require a recognized versioned
504
- model ID (`fable-5-1`, `fable-5`, `opus-5-5`, `sonnet-5`,
504
+ model ID (`fable-5-1`, `fable-5`, `opus-5-5`, `sonnet-5-5`, `sonnet-5`,
505
505
  `opus-4-7`, `opus-4-6`, or `sonnet-4-6`) or a matching
506
506
  `ANTHROPIC_DEFAULT_<FAMILY>_MODEL` pin. A custom provider pin must declare
507
507
  matching capability through `<PIN>_SUPPORTED_CAPABILITIES`: `effort` enables
@@ -513,14 +513,17 @@ Model-only Claude aliases remain compatible through the per-call model argument
513
513
  and report `effortAxis: not-applicable` because the Agent API exposes no
514
514
  per-call effort argument. The recommendation carries 16 Cursor candidates
515
515
  across four tiers, drawn from a materialization
516
- catalogue with 26 catalogued multi-family flat IDs spanning Composer, Claude
517
- (Sonnet, Opus 5.5, Fable 5, and Fable 5.1), GPT, and Grok 4.5 and 4.6; the two figures differ because some
516
+ catalogue with 31 catalogued multi-family flat IDs spanning Composer, Claude
517
+ (Sonnet 5, Sonnet 5.5, Opus 5.5, Fable 5, and Fable 5.1), GPT, and Grok 4.5 and 4.6; the two figures differ because some
518
518
  approved mappings stay materializable without being recommended. An explicit
519
- mapping connects each flat ladder ID to a separate bracket-form frontmatter
520
- model; configuration and skills never derive or normalize either form.
519
+ mapping connects each flat ladder ID to its verified frontmatter model.
520
+ Existing mappings keep their bracket selectors; Sonnet 5.5 uses per-pin
521
+ verified exact IDs. The 31 mappings produce 62 pinned role variants.
522
+ Configuration and skills never derive selectors or admit arbitrary flat IDs.
521
523
 
522
524
  The corresponding pinned Codex variant catalogue includes
523
- `gpt-5.6-luna-high`, `gpt-5.6-terra-xhigh`, `gpt-5.6-sol-high`, and
525
+ `gpt-6-1-sol-high` and `gpt-6-1-sol-max`, alongside compatible older targets
526
+ such as `gpt-5.6-luna-high`, `gpt-5.6-terra-xhigh`, `gpt-5.6-sol-high`, and
524
527
  `gpt-5.6-sol-max`. Configuration selects from that materialized catalogue; it
525
528
  does not construct an unregistered role during dispatch.
526
529
 
@@ -664,7 +667,8 @@ the exact registered role, pinned child, or resolver-returned model argument.
664
667
 
665
668
  `oat doctor` compares configured Cursor flat IDs with the current Cursor
666
669
  catalogue and reports availability drift. This check is diagnostic: catalogue
667
- presence does not prove that a bracket-form definition pin was honored.
670
+ presence does not prove that a definition pin was honored, whether its
671
+ selector is bracket-form or an approved exact ID.
668
672
 
669
673
  Each shipped mapping has mapping-specific native-launch evidence, but Cursor
670
674
  can silently fallback when account, plan, or administration constraints prevent
@@ -0,0 +1,13 @@
1
+ {
2
+ "title": "CLI Utilities",
3
+ "pages": [
4
+ "bootstrap",
5
+ "tool-packs",
6
+ "configuration",
7
+ "remote-project-management",
8
+ "config-and-local-state",
9
+ "project-log",
10
+ "backlog-lifecycle",
11
+ "workflow-gates"
12
+ ]
13
+ }
@@ -528,14 +528,20 @@ repository that adopted PJM with a user-scope pack is diagnosed correctly.
528
528
 
529
529
  ### Template precedence
530
530
 
531
- PJM templates resolve through three tiers, first match wins:
531
+ Project lifecycle and PJM templates resolve through three tiers, first match
532
+ wins (idea templates instead follow the ideas scope the ideas skills select):
532
533
 
533
534
  1. **Repository** — `.oat/templates/<name>` in this repo. An existing repository
534
535
  template is an owner override and is never rewritten by pack updates.
535
536
  2. **User** — `~/.oat/templates/<name>`, the managed default that
536
- `oat tools update --pack project-management --scope user` keeps current.
537
+ `oat tools update --pack <pack> --scope user` keeps current (`workflows`
538
+ for project lifecycle templates, `project-management` for PJM templates).
537
539
  3. **Bundle** — the templates shipped inside the installed CLI.
538
540
 
541
+ `oat template resolve <name>` reports which tier wins, and lifecycle skills
542
+ copy their templates with `oat template resolve <name> --output <path>`, so a
543
+ user-scope-only install needs no repository `.oat/templates/` directory.
544
+
539
545
  Delete a repository template to fall back to the managed user default. If a
540
546
  template is missing from all three tiers, the command errors rather than
541
547
  inventing content.
@@ -194,6 +194,19 @@ bookkeeping. Implementation, test, skill, template, workflow configuration, or
194
194
  unknown changed paths make the result stale and require a current final review
195
195
  and a new gate generation.
196
196
 
197
+ An operator can waive specific stale-making descendants, such as a test-only
198
+ fix, instead of rerunning the gate. The waiver is an append-only entry in
199
+ `oat_implement_exit_gate.waivers` recording who waived, the reason, the covered
200
+ commit range, the effective-delta fingerprint at the range end, and a UTC
201
+ timestamp; it never rewrites earlier provenance. Waivers are operator-only:
202
+ agents never infer or self-issue one, and an `OAT_AUTONOMOUS=1` run refuses to
203
+ write one. A later substantive change after the covered range makes the
204
+ generation stale again, and a malformed waiver fails closed. An interactive
205
+ implement run offers the waiver before it persists `stale`; an operator can
206
+ also give it when resuming implementation after `oat-project-next` reports
207
+ stale state. See
208
+ [Implementation Execution](../workflows/projects/implementation-execution.md).
209
+
197
210
  Only an artifact with `oat_review_invocation: gate` and the matching
198
211
  `oat_gate_run_id` can satisfy configured-gate provenance. A normal final
199
212
  review, phase review, or manually produced independent review cannot substitute
@@ -241,7 +254,7 @@ line. The reviewer's resolver stamp describes the project reviewer policy, so
241
254
  gate-originated artifacts label it as the policy view:
242
255
 
243
256
  ```markdown
244
- **Dispatch audit (policy view):** `Dispatch: scope=p01 action=review role=reviewer ... target=oat-reviewer-gpt-6-sol-high`
257
+ **Dispatch audit (policy view):** `Dispatch: scope=p01 action=review role=reviewer ... target=oat-reviewer-gpt-6-1-sol-high`
245
258
  ```
246
259
 
247
260
  The gate reads reviewer stamps (`action=review role=reviewer`) from audit lines
@@ -70,8 +70,14 @@ local `origin/main` tracking ref (falling back to a local `main` branch when no
70
70
  release fails locally the same way it fails in CI. Fetch first (`git fetch
71
71
  origin`) so that ref is current; a
72
72
  checkout with neither `origin/main` nor `main` skips the whole gate (CI uses
73
- `fetch-depth: 0`). Test files under `packages/cli/src/` count as publishable
74
- changes for this gate.
73
+ `fetch-depth: 0`). Test-only changes do not require the bump
74
+ (`DR-260927-test-only-paths-skip`): each public package's
75
+ `versionPolicyIgnorePatterns` in
76
+ `packages/cli/src/release/public-package-contract.ts` lists exactly the test
77
+ paths its `tsconfig.json` leaves out of `dist` (for `packages/cli`,
78
+ `src/**/*.test.ts` and `src/**/__tests__/**`), and a contract test fails if
79
+ the two diverge. A test helper or fixture that compiles into `dist` still
80
+ counts as a publishable change.
75
81
 
76
82
  CI runs neither `pnpm lint` nor `pnpm format`. `pnpm check` covers the
77
83
  formatting of `.agents/skills/**`, `apps/oat-docs/docs`, and `tools/smoke`
@@ -62,7 +62,13 @@ Documentation should ship with the code it explains. This page covers the core d
62
62
  pnpm -w run cli:source -- docs generate-index --docs-dir apps/oat-docs/docs --output apps/oat-docs/index.md
63
63
  ```
64
64
 
65
- - In MkDocs apps, use `oat docs nav sync` to refresh `mkdocs.yml` instead. Do not use MkDocs nav sync as the Fumadocs regeneration step.
65
+ - Then refresh the sidebar navigation. `oat docs nav sync` rewrites the committed `meta.json` files from the `## Contents` maps and reports any page no map lists; list the page in its directory's `## Contents` rather than editing `meta.json`. The build runs the read-only `--check` form and fails while the navigation is stale or a page is unlisted:
66
+
67
+ ```bash
68
+ pnpm -w run cli:source -- docs nav sync --target-dir apps/oat-docs
69
+ ```
70
+
71
+ - In MkDocs apps, the same `oat docs nav sync` command refreshes the `nav:` block in `mkdocs.yml` instead.
66
72
  - Use [Markdown Features](markdown-features.md) for supported syntax and examples.
67
73
 
68
74
  ## Agent guidance
@@ -0,0 +1,15 @@
1
+ {
2
+ "title": "Contributing",
3
+ "pages": [
4
+ "code",
5
+ "documentation",
6
+ "markdown-features",
7
+ "skills",
8
+ "design-principles",
9
+ "commit-conventions",
10
+ "hooks-and-safety",
11
+ "smoke-testing",
12
+ "updating-model-guidance",
13
+ "verifying-cursor-pins"
14
+ ]
15
+ }
@@ -26,7 +26,9 @@ they choose to adopt a newer recommendation.
26
26
 
27
27
  A model can remain supported for a user's explicit configuration without being
28
28
  recommended by the new ladder. For example, this refresh keeps GPT-5.6 Codex
29
- and Cursor targets available while preferring GPT-6 in Codex. Claude Opus 4.8
29
+ and Cursor targets available while preferring GPT-6.1 Sol and GPT-6 Luna in
30
+ Codex. GPT-6 Sol remains supported for explicit compatibility configurations.
31
+ Claude Opus 4.8
30
32
  and 5.0 have left current supported generations and recommendations; historical
31
33
  probe records can still describe past behavior, clearly labeled as historical.
32
34
 
@@ -34,7 +36,11 @@ probe records can still describe past behavior, clearly labeled as historical.
34
36
 
35
37
  Check the provider's official model documentation and the local runtime before
36
38
  editing an ID or effort range. The [OpenAI model catalog](https://developers.openai.com/api/docs/models)
37
- lists GPT-6 Astra, Sol, and Luna. The
39
+ lists GPT-6.1 Sol and GPT-6 Astra, Sol, and Luna. The
40
+ [GPT-6.1 Sol model page](https://developers.openai.com/api/docs/models/gpt-6.1-sol)
41
+ identifies `gpt-6.1-sol` and supports `low`, `medium`, `high`, `xhigh`, and
42
+ `max`; `none` and `minimal` are not supported efforts for this family. Direct
43
+ API tool calls require the Responses API. The
38
44
  [Astra model page](https://developers.openai.com/api/docs/models/gpt-6-astra)
39
45
  names `gpt-6-astra` and documents `low`, `medium`, `high`, `xhigh`, and `max`;
40
46
  compare it with the installed Codex runtime model cache for the exact names and
@@ -42,7 +48,11 @@ local effort set. Catalog presence establishes support, not relative task
42
48
  quality. The
43
49
  [Anthropic Opus 5.5 documentation](https://www.anthropic.com/claude-opus-5-5)
44
50
  names `claude-opus-5-5`; confirm a Claude Code invocation reports that exact
45
- assistant model before admitting it to the Claude catalog. Claude subagent
51
+ assistant model before admitting it to the Claude catalog. The
52
+ [Sonnet 5.5 overview](https://platform.claude.com/docs/en/models/sonnet-5-5/overview)
53
+ and [effort reference](https://platform.claude.com/docs/en/build-with-claude/effort)
54
+ identify `claude-sonnet-5-5` and its five low-through-max efforts. Verify
55
+ Claude Code identity separately. Claude subagent
46
56
  `model` and `effort` frontmatter select a per-agent route; see the
47
57
  [Claude Code subagent fields](https://code.claude.com/docs/en/sub-agents).
48
58
  An API model announcement alone does not prove a third-party harness supports
@@ -66,14 +76,32 @@ The positive Sonnet control resolved, while invalid family and effort controls
66
76
  fell back to defaults. Five Opus 5.5 mappings are now approved for desktop
67
77
  subagents; the CLI result alone does not establish that the same bracket syntax
68
78
  works as a CLI top-level `--model` argument. Likewise, do not add GPT-6
69
- Cursor targets until that runtime lists and verifies them.
79
+ or GPT-6.1 Cursor targets until that runtime lists and verifies them.
70
80
 
71
81
  A 2026-09-25 desktop 3.21.18 probe added Grok 4.6 and Fable 5.1 mappings
72
82
  and moved the bundled Cursor ladder to them. The same probe showed Grok 4.7
73
- resolves only bare flat IDs, never bracket selectors, so it stays out of the
74
- catalogue; see [Verifying Cursor Pins](verifying-cursor-pins.md). See [Dispatch Policy](../workflows/projects/dispatch-ceiling.md#cursor-evidence-authority)
83
+ resolves only bare flat IDs, never bracket selectors. It still needs its own
84
+ approved registry entry and complete per-pin evidence before admission; see [Verifying Cursor Pins](verifying-cursor-pins.md). See [Dispatch Policy](../workflows/projects/dispatch-ceiling.md#cursor-evidence-authority)
75
85
  for the distinction between catalog, configured mapping, and runtime identity.
76
86
 
87
+ The October 1 refresh migrates Codex Sol defaults and examples to
88
+ `gpt-6.1-sol` while preserving existing effort choices, including medium for
89
+ intelligent recon. Claude Economy moves to `claude-sonnet-5-5` medium by user
90
+ direction. GPT-6 Sol and Sonnet 5 remain explicitly supported. Cursor lists
91
+ Sonnet 5.5 flat IDs at low through max. Cursor 3.22.12 native probes matched
92
+ those exact IDs at start, Shell execution, and stop while every Sonnet 5.5
93
+ bracket pin fell back to the account default. The existing Opus low control
94
+ matched; unknown-family and Sonnet `ultra` exact-ID controls fell back. The
95
+ fixture summary and event records at
96
+ `packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01{,-events}.jsonl`
97
+ retain both rounds. Ship explicit, evidence-backed exact-ID mappings for that family;
98
+ keep existing bracket mappings. An exact-ID mapping requires the same per-pin
99
+ native evidence and controls as a bracket mapping. Do not enable generic
100
+ pass-through of CLI IDs. Cursor does not list GPT-6 Sol or
101
+ GPT-6.1 Sol in the observed catalog. Do not carry Codex model IDs into Cursor
102
+ configurations. These selector changes do not import a separate vault policy
103
+ refresh or claim newly measured task-performance gains.
104
+
77
105
  ## Change and Validate
78
106
 
79
107
  1. Update the supported catalog for each verified runtime and its tests. Preserve
@@ -7,7 +7,8 @@ description: 'Runbook for probe-verifying a Cursor model pin before shipping it:
7
7
 
8
8
  A Cursor model pin maps an OAT ladder model ID to the frontmatter selector that
9
9
  materialized role files carry, for example `gpt-5.6-sol-medium` to
10
- `gpt-5.6-sol[reasoning=medium]`. Adding one to
10
+ `gpt-5.6-sol[reasoning=medium]`, or the verified exact ID
11
+ `claude-sonnet-5-5-medium`. Adding one to
11
12
  `packages/cli/src/providers/cursor/codec/catalog.ts` requires evidence that
12
13
  Cursor actually resolves that selector to the intended model.
13
14
 
@@ -81,10 +82,22 @@ flat IDs such as `grok-4.7-medium` resolved exactly. Two lessons follow:
81
82
  control and probe non-default rungs. Here even `effort=low,fast=false`
82
83
  landed on the high-fast default.
83
84
 
84
- Approved mappings are bracket-form only
85
- (`DR-260718-explicit-cursor-pin-mapping`), so Grok 4.7 has no mapping until
86
- that decision is revisited. The redacted evidence is in the same fixtures
87
- directory.
85
+ The 2026-10-01 revision of `DR-260718-explicit-cursor-pin-mapping` permits
86
+ verified exact-ID entries as well as bracket selectors. Grok 4.7 remains
87
+ outside the shipped catalog until its own entry is added and approved. The
88
+ redacted evidence is in the same fixtures directory.
89
+
90
+ The 2026-10-01 Sonnet 5.5 probe on Cursor 3.22.12 confirmed the same syntax
91
+ distinction: every `claude-sonnet-5-5[effort=...]` selector fell back to
92
+ `grok-4.7-high-fast`, but all five exact IDs
93
+ `claude-sonnet-5-5-low|medium|high|xhigh|max` resolved correctly. Both rounds
94
+ included a working Opus 5.5 low control and unknown-family and unsupported-effort
95
+ controls that fell back. The summary and 64 correlated native events are
96
+ retained beside the earlier fixtures.
97
+
98
+ [Cursor documents specific model IDs and bracket parameters](https://cursor.com/docs/subagents#model-configuration).
99
+ Choose a candidate from the live catalog, then probe its exact frontmatter
100
+ spelling. Documentation and catalog presence do not replace native evidence.
88
101
 
89
102
  ## Prerequisites
90
103
 
@@ -272,10 +285,19 @@ approved it:
272
285
 
273
286
  ```ts
274
287
  approvedMapping(
275
- 'gpt-5.6-sol-medium',
276
- 'gpt-5.6-sol[reasoning=medium]',
277
- 'gpt-reasoning',
278
- { probeName: 'zz-pin-probe-sol56-medium', verifiedAt: '2026-07-25', evidencePath: '...' },
288
+ 'claude-sonnet-5-5-medium',
289
+ 'claude-sonnet-5-5-medium',
290
+ 'explicit-model-id',
291
+ {
292
+ probeName: 'zz-pin-probe-sonnet55-flat-medium',
293
+ probeRecord: {
294
+ submittedSelector: 'claude-sonnet-5-5-medium',
295
+ resolvedModel: 'claude-sonnet-5-5-medium',
296
+ verifiedAt: '2026-10-01',
297
+ evidencePath:
298
+ 'packages/cli/src/providers/cursor/codec/__fixtures__/cursor-pin-probe-2026-10-01.jsonl',
299
+ },
300
+ },
279
301
  ),
280
302
  ```
281
303
 
@@ -287,6 +309,13 @@ than inheriting an approval that never covered the new selector.
287
309
  Retain the raw payloads alongside the summary. They are the primary evidence;
288
310
  the summary is an interpretation of them.
289
311
 
312
+ For an exact-ID mapping, use the `explicit-model-id` syntax family and a
313
+ mapping-specific probe record. The frontmatter selector must equal the ladder
314
+ ID, and the independently captured submitted selector and resolved model must
315
+ agree with both. Missing or mismatched evidence must fail materialization;
316
+ there is no generic model-ID pass-through. Preserve rejected selector results
317
+ and control observations alongside the successful rungs.
318
+
290
319
  ## Cleanup
291
320
 
292
321
  Delete every temporary artifact:
@@ -143,15 +143,24 @@ Core rules:
143
143
  - the `## Contents` section should map sibling pages and immediate child directories
144
144
  - `## Contents` links should use `.md`-suffixed relative targets, including `subdir/index.md` for child directories
145
145
 
146
- For **MkDocs** apps, regenerate navigation after adding or moving pages:
146
+ Regenerate navigation after adding or moving pages. In **MkDocs** apps this
147
+ rewrites the `nav:` block in `mkdocs.yml`; in **Fumadocs** apps it writes the
148
+ committed `meta.json` files and reports any page no `## Contents` map lists:
147
149
 
148
150
  ```bash
149
151
  oat docs nav sync --target-dir apps/my-docs
150
152
  ```
151
153
 
152
- For **Fumadocs** apps, the app-root docs index manifest is generated from the
153
- Markdown file tree automatically via `predev`/`prebuild` hooks. You can also
154
- run it manually:
154
+ Generated Fumadocs `meta.json` is strict: a page no `## Contents` map lists
155
+ stays out of the sidebar. The `prebuild` script that `oat docs init` scaffolds
156
+ for Fumadocs does not run the read-only check. To make builds fail on stale
157
+ navigation or an unlisted page, as `apps/oat-docs` does, append
158
+ `&& oat docs nav sync --check` to it; the script runs from the app directory,
159
+ which `--target-dir` defaults to.
160
+
161
+ **Fumadocs** apps also have an app-root docs index manifest, generated from
162
+ the Markdown file tree automatically via `predev`/`prebuild` hooks. You can
163
+ also run it manually:
155
164
 
156
165
  ```bash
157
166
  oat docs generate-index --docs-dir docs
@@ -205,7 +214,7 @@ Important:
205
214
  3. `oat docs init --app-name my-docs`
206
215
  4. (optional) handle MkDocs migration as a separate workstream; use `oat docs migrate --docs-dir docs --config mkdocs.yml --apply` only for the syntax/frontmatter helper
207
216
  5. Author docs with `index.md` + `## Contents`
208
- 6. `oat docs nav sync --target-dir apps/my-docs` (MkDocs) or `oat docs generate-index` (Fumadocs)
217
+ 6. `oat docs nav sync --target-dir apps/my-docs` (both frameworks), plus `oat docs generate-index` (Fumadocs)
209
218
  7. `/oat-docs-analyze`
210
219
  8. `/oat-docs-apply`
211
220
  9. Repeat as the codebase changes
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: Docs App Commands
3
- description: 'Docs scaffolding CLI surface for Fumadocs/MkDocs, migration helpers, Fumadocs index generation, and MkDocs nav sync.'
3
+ description: 'Docs scaffolding CLI surface for Fumadocs/MkDocs, migration helpers, Fumadocs index generation, and nav sync for both frameworks.'
4
4
  ---
5
5
 
6
6
  # Docs App Commands
@@ -11,7 +11,7 @@ and **MkDocs Material**.
11
11
 
12
12
  ## Quick Look
13
13
 
14
- - What it does: documents the docs-specific CLI surface for scaffolding apps, migrating markdown, generating Fumadocs app-root index manifests, and syncing MkDocs navigation.
14
+ - What it does: documents the docs-specific CLI surface for scaffolding apps, migrating markdown, generating Fumadocs app-root index manifests, and syncing MkDocs or Fumadocs navigation.
15
15
  - When to use it: when you already know you are working on a docs surface and need the exact command-level behavior.
16
16
  - Primary commands: `oat docs init`, `oat docs migrate`, `oat docs generate-index`, `oat docs nav sync`
17
17
 
@@ -22,7 +22,7 @@ and **MkDocs Material**.
22
22
  | `oat docs init` | Scaffold a new docs app (Fumadocs or MkDocs). |
23
23
  | `oat docs migrate` | Convert MkDocs admonitions to GFM callouts and inject frontmatter. |
24
24
  | `oat docs generate-index` | Generate a Fumadocs app-root docs index manifest from the Markdown file tree. |
25
- | `oat docs nav sync` | Regenerate MkDocs `mkdocs.yml` navigation from directory `index.md` maps. |
25
+ | `oat docs nav sync` | Regenerate `mkdocs.yml` nav or Fumadocs `meta.json` from `index.md` maps. |
26
26
  | `oat docs analyze` | CLI entrypoint that points users to the `oat-docs-analyze` skill. |
27
27
  | `oat docs apply` | CLI entrypoint that points users to the `oat-docs-apply` skill. |
28
28
 
@@ -30,7 +30,7 @@ and **MkDocs Material**.
30
30
 
31
31
  Use the framework-specific generated-artifact command:
32
32
 
33
- - Fumadocs apps run `fumadocs-mdx` and `oat docs generate-index`. In this repo, `predev` and `prebuild` regenerate `apps/oat-docs/index.md` from `apps/oat-docs/docs`.
33
+ - Fumadocs apps run `fumadocs-mdx` and `oat docs generate-index`. In this repo, `predev` and `prebuild` regenerate `apps/oat-docs/index.md` from `apps/oat-docs/docs`. Run `oat docs nav sync` yourself after structural changes to rewrite the committed `meta.json` sidebar files from authored directory `index.md` `## Contents` sections; the hooks never write them. `prebuild` runs `oat docs nav sync --check`, so a build fails when those files are stale or a page is unlisted.
34
34
  - MkDocs apps use `oat docs nav sync` to regenerate the `nav:` block in `mkdocs.yml` from authored directory `index.md` `## Contents` sections.
35
35
 
36
36
  Both frameworks keep authored `## Contents` sections as the source of local discovery. The generated artifact differs by framework.
@@ -183,17 +183,35 @@ script hooks.
183
183
 
184
184
  ## `oat docs nav sync`
185
185
 
186
- Use nav sync in MkDocs apps after adding, removing, or renaming docs pages.
186
+ Use nav sync after adding, removing, renaming, or reordering docs pages.
187
187
 
188
188
  The command reads only the reserved `## Contents` section from each directory
189
- `index.md` and regenerates the `nav:` block in `mkdocs.yml`.
190
-
191
- For Fumadocs apps, regenerate the root markdown manifest with `oat docs generate-index` instead.
189
+ `index.md`. It detects the framework from the app directory:
190
+
191
+ - **MkDocs** (`mkdocs.yml`): regenerates the `nav:` block in `mkdocs.yml`.
192
+ - **Fumadocs** (`source.config.ts`): writes one `meta.json` per docs directory
193
+ that has an `index.md`. `pages` follows the `## Contents` order with no
194
+ `"..."` rest entry, so a page no map lists stays out of the sidebar and is
195
+ reported by path (`unlisted` in `--json`). A link to a page in another
196
+ directory becomes a Fumadocs link entry, and the folder `title` comes from
197
+ the `index.md` frontmatter `title` or first heading. Files are compared by
198
+ meaning, so a rerun with no docs changes writes nothing. Commit the
199
+ generated `meta.json` files.
200
+
201
+ Use `--check` in builds and CI. It computes the same navigation, writes
202
+ nothing, and exits 1 when any generated file would change or, for Fumadocs,
203
+ any page or folder is unlisted, naming each one (`stale` and `unlisted` in
204
+ `--json`). This repository's `apps/oat-docs` `prebuild` runs it, so
205
+ `pnpm build:docs` fails on stale navigation.
206
+
207
+ Fumadocs apps also regenerate the root markdown manifest with
208
+ `oat docs generate-index`; the two commands write different artifacts.
192
209
 
193
210
  Example:
194
211
 
195
212
  ```bash
196
213
  oat docs nav sync --target-dir apps/oat-docs
214
+ oat docs nav sync --target-dir apps/oat-docs --check
197
215
  ```
198
216
 
199
217
  Related reference:
@@ -0,0 +1,4 @@
1
+ {
2
+ "title": "Docs Tooling",
3
+ "pages": ["add-docs-to-a-repo", "commands", "workflows"]
4
+ }
@@ -18,7 +18,7 @@ Install the workflow skills with `oat tools install docs` (preferred) or
18
18
  - `oat docs init` scaffolds a docs app (Fumadocs or MkDocs)
19
19
  - `oat docs migrate` converts MkDocs admonitions to GFM callouts and injects frontmatter
20
20
  - `oat docs generate-index` generates a Fumadocs app-root docs index manifest from the Markdown file tree
21
- - `oat docs nav sync` regenerates MkDocs `mkdocs.yml` nav from `index.md` `## Contents` sections
21
+ - `oat docs nav sync` regenerates MkDocs `mkdocs.yml` nav, or strict Fumadocs `meta.json` files, from `index.md` `## Contents` sections
22
22
  - `oat docs analyze` and `oat docs apply` expose the workflow surface in CLI help
23
23
 
24
24
  ### Skills
@@ -67,7 +67,7 @@ skills.
67
67
  5. Keep local `## Contents` sections current
68
68
  6. Refresh generated artifacts:
69
69
  - **MkDocs:** `oat docs nav sync`
70
- - **Fumadocs:** `oat docs generate-index` (runs automatically via `predev`/`prebuild` hooks)
70
+ - **Fumadocs:** `oat docs nav sync` for the committed `meta.json` sidebar files (it reports pages no `## Contents` map lists), and `oat docs generate-index` for the root manifest (runs automatically via `predev`/`prebuild` hooks)
71
71
  7. Run `oat-docs-analyze`; by default it verifies the generated analysis artifact
72
72
  through `workflow.autoArtifactReview.analysis`
73
73
  8. Review the artifact and run `oat-docs-apply`
@@ -0,0 +1,4 @@
1
+ {
2
+ "title": "User Guide",
3
+ "pages": ["concepts"]
4
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "title": "OAT Documentation",
3
+ "pages": [
4
+ "index",
5
+ "quickstart",
6
+ "guide",
7
+ "provider-sync",
8
+ "workflows",
9
+ "docs-tooling",
10
+ "cli-utilities",
11
+ "contributing",
12
+ "reference"
13
+ ]
14
+ }
@@ -401,6 +401,14 @@ oat instructions validate --strategy symlink
401
401
 
402
402
  This keeps validation, preview, and repair aligned to the same expected file shape.
403
403
 
404
+ `--force` never overwrites a `CLAUDE.md` that an `AGENTS.md` resolves to,
405
+ whether through a symlink, a symlink chain, or a hard link, because that
406
+ `CLAUDE.md` holds the only copy of the instructions behind the link. Sync plans
407
+ a `skip` for it instead, with a reason such as
408
+ `AGENTS.md resolves to this CLAUDE.md, so it holds the instructions; kept`, and
409
+ leaves the file unchanged under every shim strategy, including in
410
+ `--dry-run` previews. Resolve that link by hand before repairing the pair.
411
+
404
412
  ## Manual-Repair Cases
405
413
 
406
414
  Some states are intentionally surfaced as drift but not auto-repaired.
@@ -0,0 +1,11 @@
1
+ {
2
+ "title": "Provider Sync",
3
+ "pages": [
4
+ "commands",
5
+ "config",
6
+ "instruction-sync",
7
+ "manifest-and-drift",
8
+ "providers",
9
+ "scope-and-surface"
10
+ ]
11
+ }
@@ -26,11 +26,11 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
26
26
  - Interactive `oat init` and `oat status` ask for an individual disposition for each unresolved Cursor-local skill: adopt it into `.agents/skills` or keep it Cursor-only and remember the exact path in sync config
27
27
  - Keep-local is blocked when a canonical skill has the same name because Cursor does not document a safe duplicate-resolution order
28
28
  - During upgrades, OAT removes only verified clean legacy managed skill views. Changed or replaced views are preserved, detached from manifest ownership, and offered for migration.
29
- - Sync materializes pinned Markdown definitions for both `oat-phase-implementer` and `oat-reviewer` in addition to the base roles, which sync like any other canonical agent at both scopes. Each generated name keeps the configured flat ladder ID, while an explicit verified mapping writes the separate bracket-form frontmatter model. OAT never derives one form from the other.
29
+ - Sync materializes pinned Markdown definitions for both `oat-phase-implementer` and `oat-reviewer` in addition to the base roles, which sync like any other canonical agent at both scopes. Each generated name keeps the configured flat ladder ID, while an explicit verified mapping writes its frontmatter model: a bracket-form selector for existing families or an exact ID for Sonnet 5.5. The supported catalogue contains 31 pins and 62 pinned role variants. OAT never derives a selector from the ladder ID or passes through an unregistered ID.
30
30
  - Generated definitions carry `supported-catalogue`, `project-config`, or `user-config` ownership. Project and supported output lives in the tracked `.cursor/agents` view; user-owned output lives under `~/.cursor/agents`. Cleanup reconciles only the applicable owner.
31
31
  - Managed dispatch requires `providers.cursor.dispatchArgs.variant` and launches that exact resolver-selected native agent type first. Skills do not pass a Task-level model argument or normalize Cursor model strings.
32
32
  - Cursor may silently fallback when a definition pin cannot be honored. Variant acceptance therefore establishes launcher-owned `configured` provenance only; runtime identity remains `not-reported` unless independently observed.
33
- - `oat doctor` checks whether each flat ID is still present in the current Cursor catalogue and reports availability drift. Catalogue availability is diagnostic and does not prove that a definition-level bracket pin ran as configured.
33
+ - `oat doctor` checks whether each flat ID is still present in the current Cursor catalogue and reports availability drift. Catalogue availability is diagnostic and does not prove that a definition-level pin ran as configured.
34
34
  - Rule files render as `.cursor/rules/*.mdc`
35
35
 
36
36
  === "Copilot"
@@ -59,7 +59,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
59
59
  - `.codex/agents/<role>.toml`
60
60
  - `.codex/config.toml` (`[features] multi_agent = true`, `[agents.<role>]` upserts)
61
61
  - Codex role files include OAT managed provenance headers and are regenerated by `oat sync --scope project|user|all`
62
- - Project sync writes and maintains the version-controlled supported catalogue: GPT-6 Luna, Sol, and Astra at `low`, `medium`, `high`, `xhigh`, and `max`; GPT-5.6 Luna and Terra through `xhigh`; and GPT-5.6 Sol through `max`. Both `oat-phase-implementer` and `oat-reviewer` receive each supported pair (56 pinned variants). Sync writes files; it does not create a Git commit.
62
+ - Project sync writes and maintains the version-controlled supported catalogue: GPT-6.1 Sol and GPT-6 Luna, Sol, and Astra at `low`, `medium`, `high`, `xhigh`, and `max`; GPT-5.6 Luna and Terra through `xhigh`; and GPT-5.6 Sol through `max`. Both `oat-phase-implementer` and `oat-reviewer` receive each supported pair (66 pinned variants). Sync writes files; it does not create a Git commit.
63
63
  - Custom targets follow configuration provenance: user-config targets write only under `~/.codex`; shared, repo-local, and active-project targets write under the project's tracked `.codex` view.
64
64
  - User sync loads only the bundled canonical `oat-phase-implementer` and `oat-reviewer` definitions needed to expand user-config targets. It does not enable general user-agent mirroring, and it refuses stale user-role cleanup if either managed definition is unavailable.
65
65
  - Generated variants carry `supported-catalogue`, `user-config`, or `project-config` ownership. Cleanup removes stale entries only for the owner being reconciled and preserves other scopes plus unrelated Codex entries.
@@ -67,7 +67,7 @@ description: 'Provider-specific path mappings for Claude, Cursor, Copilot, Gemin
67
67
  - A single role can be materialized directly with `oat providers codex materialize <agent-name> --model <model-id> --effort <reasoning-effort>`; `--agent-path` selects a specific canonical markdown agent, `--role-name` overrides the generated role name, and `--scope user` writes a user-config-owned role.
68
68
  - Aggregate Codex config drift metadata (`aggregateConfigHash`) is emitted in sync/status codex extension output and intentionally not stored as a separate manifest row
69
69
  - Sync-time materialization is best effort; managed workflow correctness uses exact registered roles or a fresh child pinned to the resolved model plus reasoning effort with canonical role instructions. After a successful provider-visible file change, OAT conservatively advises starting a new Codex session so it has an opportunity to load the role. This repository policy is not a Codex hot-reload contract, an application-process restart requirement, or proof that the new session exposed the role.
70
- - Codex `max` is a first-class dispatch effort. It is supported for GPT-6 Luna, Sol, and Astra, plus GPT-5.6 Sol, for both implementer and reviewer roles.
70
+ - Codex `max` is a first-class dispatch effort. It is supported for GPT-6.1 Sol, GPT-6 Luna, Sol, and Astra, plus GPT-5.6 Sol, for both implementer and reviewer roles.
71
71
  - Codex multi-agent dispatch uses config-defined roles (`[agents.<name>]`) and `agent_type`
72
72
  - Codex subagent workflows require `[features] multi_agent = true` in active Codex config layers
73
73
  - Default managed Codex execution requires root (depth 0) → phase implementer (depth 1). `agents.max_depth >= 2` enables optional nested phase-agent work; sync and direct materialization still merge that capability floor without lowering a higher target value.
@@ -43,8 +43,8 @@ Rules are currently project-scoped canonical content. Unlike skills and agents,
43
43
  - `oat providers inspect`
44
44
  - `oat providers set`
45
45
  - `oat providers codex materialize`
46
- - `oat project dispatch record` (project-aware dispatch evidence only; never a
47
- provider launcher)
46
+ - `oat project dispatch record` (validates project-aware dispatch evidence and
47
+ writes nothing; never a provider launcher)
48
48
  - `oat project dispatch canonical-role` (read-only; prints the
49
49
  canonical-role-resolution event that `oat project dispatch record` accepts)
50
50
 
@@ -112,8 +112,7 @@ role-selection rejection and do not permit fallback.
112
112
 
113
113
  Project workflows construct and redact the complete dispatch payload before
114
114
  the native call, then record its accepted or `blocked-before-start` result in
115
- the project's run record; persisting it under the project's `dispatch/`
116
- directory is optional and off by default. The generic
115
+ the project's run record, which is the only launch record. The generic
117
116
  record remains provider-neutral. OAT-specific canonical role, rejection,
118
117
  fallback, and runtime facts live only under its `oat` namespace. A qualifying
119
118
  fallback is a fresh request that preserves exact target and controls and is