@open-agent-toolkit/cli 0.3.8 → 0.3.10

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 (121) hide show
  1. package/README.md +3 -3
  2. package/assets/agents/oat-codebase-mapper.md +3 -2
  3. package/assets/agents/oat-reviewer.md +5 -13
  4. package/assets/agents/skeptical-evaluator.md +6 -2
  5. package/assets/bundle-metadata.json +1 -1
  6. package/assets/config/dispatch-matrix-recommendation.json +6 -6
  7. package/assets/docs/cli-utilities/backlog-lifecycle.md +3 -2
  8. package/assets/docs/cli-utilities/bootstrap.md +5 -2
  9. package/assets/docs/cli-utilities/config-and-local-state.md +13 -6
  10. package/assets/docs/cli-utilities/configuration.md +22 -17
  11. package/assets/docs/cli-utilities/tool-packs.md +60 -10
  12. package/assets/docs/cli-utilities/workflow-gates.md +1 -1
  13. package/assets/docs/contributing/code.md +9 -5
  14. package/assets/docs/contributing/updating-model-guidance.md +34 -6
  15. package/assets/docs/contributing/verifying-cursor-pins.md +38 -9
  16. package/assets/docs/provider-sync/commands.md +11 -8
  17. package/assets/docs/provider-sync/instruction-sync.md +241 -39
  18. package/assets/docs/provider-sync/providers.md +4 -4
  19. package/assets/docs/provider-sync/scope-and-surface.md +1 -1
  20. package/assets/docs/reference/cli-reference.md +2 -0
  21. package/assets/docs/reference/oat-directory-structure.md +12 -11
  22. package/assets/docs/reference/troubleshooting.md +19 -4
  23. package/assets/docs/workflows/projects/dispatch-ceiling.md +21 -14
  24. package/assets/docs/workflows/projects/implementation-execution.md +26 -9
  25. package/assets/docs/workflows/projects/lifecycle.md +4 -6
  26. package/assets/public-package-versions.json +4 -4
  27. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +4 -4
  28. package/assets/skills/oat-agent-instructions-analyze/references/analysis-artifact-template.md +5 -5
  29. package/assets/skills/oat-agent-instructions-analyze/references/docs/rules-files.md +14 -11
  30. package/assets/skills/oat-agent-instructions-analyze/references/quality-checklist.md +2 -2
  31. package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-instruction-files.sh +4 -3
  32. package/assets/skills/oat-agent-instructions-apply/SKILL.md +3 -3
  33. package/assets/skills/oat-agent-instructions-apply/references/docs/rules-files.md +14 -11
  34. package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
  35. package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +5 -2
  36. package/assets/skills/oat-doctor/SKILL.md +17 -13
  37. package/assets/skills/oat-project-implement/SKILL.md +2 -2
  38. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +33 -11
  39. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +1 -1
  40. package/assets/skills/oat-project-implement/references/phase-execution.md +109 -8
  41. package/assets/skills/oat-project-lite/SKILL.md +23 -1
  42. package/assets/skills/oat-project-next/SKILL.md +3 -3
  43. package/assets/skills/oat-project-plan-writing/SKILL.md +3 -3
  44. package/assets/skills/oat-project-progress/SKILL.md +2 -2
  45. package/assets/skills/subagent-orchestration/SKILL.md +1 -1
  46. package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +20 -8
  47. package/assets/skills/subagent-orchestration/references/provider-claude.md +25 -12
  48. package/assets/skills/subagent-orchestration/references/provider-codex.md +27 -18
  49. package/assets/skills/subagent-orchestration/references/provider-cursor.md +40 -10
  50. package/assets/templates/docs-app-mkdocs/docs/contributing.md +1 -3
  51. package/assets/templates/pjm-agents.md +7 -3
  52. package/assets/templates/state.md +2 -2
  53. package/dist/commands/backlog/archive.d.ts +10 -2
  54. package/dist/commands/backlog/archive.d.ts.map +1 -1
  55. package/dist/commands/backlog/archive.js +22 -6
  56. package/dist/commands/backlog/index.d.ts.map +1 -1
  57. package/dist/commands/backlog/index.js +5 -1
  58. package/dist/commands/backlog/rewrite-references.d.ts +41 -0
  59. package/dist/commands/backlog/rewrite-references.d.ts.map +1 -0
  60. package/dist/commands/backlog/rewrite-references.js +516 -0
  61. package/dist/commands/config/index.d.ts +1 -0
  62. package/dist/commands/config/index.d.ts.map +1 -1
  63. package/dist/commands/config/index.js +69 -34
  64. package/dist/commands/init/index.d.ts +6 -0
  65. package/dist/commands/init/index.d.ts.map +1 -1
  66. package/dist/commands/init/index.js +27 -4
  67. package/dist/commands/init/tools/index.d.ts +18 -1
  68. package/dist/commands/init/tools/index.d.ts.map +1 -1
  69. package/dist/commands/init/tools/index.js +84 -17
  70. package/dist/commands/init/tools/project-guidance.d.ts +19 -4
  71. package/dist/commands/init/tools/project-guidance.d.ts.map +1 -1
  72. package/dist/commands/init/tools/project-guidance.js +58 -15
  73. package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
  74. package/dist/commands/init/tools/workflows/index.js +5 -1
  75. package/dist/commands/instructions/instructions.types.d.ts +105 -4
  76. package/dist/commands/instructions/instructions.types.d.ts.map +1 -1
  77. package/dist/commands/instructions/instructions.types.js +4 -5
  78. package/dist/commands/instructions/instructions.utils.d.ts +161 -6
  79. package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
  80. package/dist/commands/instructions/instructions.utils.js +650 -12
  81. package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
  82. package/dist/commands/instructions/sync/sync.js +256 -18
  83. package/dist/commands/instructions/validate/validate.d.ts.map +1 -1
  84. package/dist/commands/instructions/validate/validate.js +36 -8
  85. package/dist/commands/pjm/index.d.ts.map +1 -1
  86. package/dist/commands/pjm/index.js +19 -4
  87. package/dist/commands/pjm/init.d.ts +3 -0
  88. package/dist/commands/pjm/init.d.ts.map +1 -1
  89. package/dist/commands/pjm/init.js +23 -5
  90. package/dist/commands/shared/agents-md.d.ts +26 -5
  91. package/dist/commands/shared/agents-md.d.ts.map +1 -1
  92. package/dist/commands/shared/agents-md.js +182 -3
  93. package/dist/commands/tools/guidance/index.d.ts +15 -0
  94. package/dist/commands/tools/guidance/index.d.ts.map +1 -0
  95. package/dist/commands/tools/guidance/index.js +81 -0
  96. package/dist/commands/tools/index.d.ts.map +1 -1
  97. package/dist/commands/tools/index.js +2 -0
  98. package/dist/config/oat-config.d.ts +49 -3
  99. package/dist/config/oat-config.d.ts.map +1 -1
  100. package/dist/config/oat-config.js +107 -14
  101. package/dist/config/resolve.d.ts.map +1 -1
  102. package/dist/config/resolve.js +12 -2
  103. package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -1
  104. package/dist/providers/claude/dispatch-envelope.js +1 -0
  105. package/dist/providers/claude/targets.d.ts +1 -0
  106. package/dist/providers/claude/targets.d.ts.map +1 -1
  107. package/dist/providers/claude/targets.js +3 -1
  108. package/dist/providers/codex/codec/shared.d.ts +3 -0
  109. package/dist/providers/codex/codec/shared.d.ts.map +1 -1
  110. package/dist/providers/codex/codec/shared.js +4 -0
  111. package/dist/providers/cursor/codec/catalog.d.ts +2 -2
  112. package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
  113. package/dist/providers/cursor/codec/catalog.js +45 -0
  114. package/dist/providers/cursor/codec/mapping-validation.d.ts +4 -0
  115. package/dist/providers/cursor/codec/mapping-validation.d.ts.map +1 -0
  116. package/dist/providers/cursor/codec/mapping-validation.js +25 -0
  117. package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
  118. package/dist/providers/cursor/codec/materialize.js +2 -11
  119. package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
  120. package/dist/providers/cursor/codec/sync-extension.js +2 -11
  121. package/package.json +2 -2
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Bash, Glob, Grep, AskUserQuestion
8
8
  metadata:
9
- version: 2.0.1
9
+ version: 2.0.2
10
10
  ---
11
11
 
12
12
  # OAT Doctor
@@ -81,15 +81,15 @@ Run the seven commands below and the four file checks. Every command call is pro
81
81
 
82
82
  A command has **failed** only when its stdout does not parse as JSON, or the process is killed or times out. A non-zero exit with parseable JSON is a findings result: `oat doctor` and `oat pjm doctor` both exit 1 whenever any check warns, which is the normal state of a healthy repository. A failed command becomes one `warning` finding for its area whose summary names the command and quotes the first line of stderr; the sweep continues.
83
83
 
84
- | # | Command | Projection | Feeds |
85
- | --- | --------------------------------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------- |
86
- | 1 | `oat doctor --json --scope all` | `.checks[] \| {name, status, message}` — drop `packEvidence` and `providerRefreshAdvice` | config, tools, docs (by the check map below) |
87
- | 2 | `oat pjm doctor --json` | `.adoption` and `.checks[] \| {name, status, message}` | PJM |
88
- | 3 | `oat config dump --json` | `.shared`, `.local`, `.user` (the three surface objects) | config, docs |
89
- | 4 | `oat config describe --json` | `.entries[] \| {key, group, file, scope, defaultValue, owningCommand, deprecated}` | config |
90
- | 5 | `oat instructions validate --json` | `.summary` and `.entries[] \| select(.status != "ok") \| {agentsPath, status, detail}` | agent instructions |
91
- | 6 | `oat tools list --json --scope all` | `.tools[] \| {name, pack, scope, status}` | tools |
92
- | 7 | `oat tools outdated --json --scope all` | `.tools[] \| {name, version, bundledVersion, scope}` | tools |
84
+ | # | Command | Projection | Feeds |
85
+ | --- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
86
+ | 1 | `oat doctor --json --scope all` | `.checks[] \| {name, status, message}` — drop `packEvidence` and `providerRefreshAdvice` | config, tools, docs (by the check map below) |
87
+ | 2 | `oat pjm doctor --json` | `.adoption` and `.checks[] \| {name, status, message}` | PJM |
88
+ | 3 | `oat config dump --json` | `.shared`, `.local`, `.user` (the three surface objects) | config, docs |
89
+ | 4 | `oat config describe --json` | `.entries[] \| {key, group, file, scope, defaultValue, owningCommand, deprecated}` | config |
90
+ | 5 | `oat instructions validate --json` | `.strategy`, `.summary`, `.entries[] \| select(.status != "ok") \| {agentsPath, status, detail}`, and `.warnings[] \| {code, path, paths, wouldRemove, linkedBy, message}` (omitted when there are none) | agent instructions |
91
+ | 6 | `oat tools list --json --scope all` | `.tools[] \| {name, pack, scope, status}` | tools |
92
+ | 7 | `oat tools outdated --json --scope all` | `.tools[] \| {name, version, bundledVersion, scope}` | tools |
93
93
 
94
94
  File checks (read-only):
95
95
 
@@ -123,9 +123,13 @@ Each finding is one line with an **area**, a **severity**, a one-line **summary*
123
123
 
124
124
  **Agent instructions**
125
125
 
126
- - An entry with status `missing` or `content_mismatch` (the entry literal; the summary counter is spelled `contentMismatch`) → `error`; fix `oat instructions sync` (`--force` for a content mismatch the person confirms is stale).
126
+ - An entry with status `content_mismatch` (the entry literal; the summary counter is spelled `contentMismatch`) → `error`; fix `oat instructions sync` (`--force` for a content mismatch the person confirms is stale).
127
+ - An entry with status `missing` → `error` only when a shim strategy is configured (`.strategy` is `pointer`, `symlink`, or `copy`); fix `oat instructions sync`. Under `none`, the default, an AGENTS.md without a CLAUDE.md is correct and the CLI never reports it as `missing`.
128
+ - An entry with status `managed_shim` (strategy `none` only: a CLAUDE.md in the exact shape OAT writes) → `warning`; fix `oat instructions sync`, which removes it, unless `.warnings[]` holds a `claude_md_blocks_shim_removal` item: then sync removes nothing, so report that item instead of sending the person to sync. An entry with status `unmanaged` (a hand-written or modified CLAUDE.md that sync keeps, or one an AGENTS.md links to) is not a finding of its own; the leftover warning below covers it, including the link caveat through `linkedBy`.
129
+ - Each `.warnings[]` item with code `claude_md_hides_agents_md` → `warning`; the summary names its `path`: while that `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` exists, Claude Code's default `agents-md` mode ignores every AGENTS.md in the project (for a file below the root: in sessions started in its directory or below). Offer exactly the two fixes the CLI names: the person removes the file (the doctor never deletes it), or `oat config set instructions.claude.shims pointer` (or `symlink` / `copy`) followed by `oat instructions sync` to add shims back. When the item's `linkedBy` is non-empty, the file holds the only copy of the instructions for those AGENTS.md links: the first fix becomes "the person replaces each linking AGENTS.md with the file's content first, then removes the file", naming the `linkedBy` paths, and never offer plain removal for it. Skip an item whose `path` is in a `claude_md_blocks_shim_removal` item's `wouldRemove`: that item already names the file, and removing one kept file by hand recreates the mix the block exists to prevent.
130
+ - A `.warnings[]` item with code `claude_md_blocks_shim_removal` → `warning`: removal under `none` is all or nothing, so while any file in its `paths` (a `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` with content that is not an OAT shim) exists, `oat instructions sync` removes none of the shims in its `wouldRemove`. The summary names both lists. Offer the fixes the CLI names: the person removes each file in `paths` or moves its content into an AGENTS.md, then reruns `oat instructions sync`; or `oat config set instructions.claude.shims` to `pointer`, `symlink`, or `copy` to keep CLAUDE.md files. Its `linkedBy` maps each file in `paths` to the AGENTS.md links that reach it: for a file with a non-empty list, the first fix becomes "the person replaces each linking AGENTS.md with the file's content first, then removes the file", naming those links, and never offer plain removal for it. While this item exists, offer no removal for any path in its `wouldRemove`. The doctor never deletes or edits the files.
127
131
  - An entry with status `stray` → `warning`; fix `oat instructions sync` after the person decides whether the stray file should exist.
128
- - A CLI-written heading absent while its capability is present → `warning`: no `## Tool Packs` while any pack is installed at project scope (fix `oat tools install <pack> --project-guidance`); no `### Project Management` or `### Decision Records` while PJM adoption is `declared` (fix `oat pjm init`, which rewrites the guidance); no `## Documentation` while a docs surface exists (fix: `oat-docs-bootstrap`).
132
+ - A CLI-written heading absent while its capability is present → `warning`: no `## Tool Packs` while any pack is installed at project scope (fix `oat tools guidance`, which prints the managed `OAT tools` block for the installed packs without installing, upgrading, or writing anything, for the person to add to `AGENTS.md`); no `### Project Management` or `### Decision Records` while PJM adoption is `declared` (fix `oat pjm init`, which appends the absent guidance blocks; a block that exists but differs gets a printed manual patch); no `## Documentation` while a docs surface exists (fix: `oat-docs-bootstrap`).
129
133
  - Content quality beyond presence is not judged here; route to `oat-agent-instructions-analyze`.
130
134
 
131
135
  **Docs**
@@ -221,7 +225,7 @@ State the adoption state (`declared`, `inferred-legacy`, `partial-initialization
221
225
 
222
226
  #### Agent instructions dive
223
227
 
224
- Explain the sync strategy in use (`oat instructions validate --json` `.summary`) and each non-`ok` entry with its path. Explain each missing heading: what the CLI writes there and why an agent needs it (`cli-utilities/bootstrap.md` for `## Tool Packs`; `cli-utilities/backlog-lifecycle.md` § Adoption comes first for the PJM sections). Offer `oat instructions sync`, `oat tools install <pack> --project-guidance`, or `oat pjm init` as the finding names; for wording and coverage beyond presence, hand off to `oat-agent-instructions-analyze` then `oat-agent-instructions-apply`.
228
+ Explain the sync strategy in use (`oat instructions validate --json` `.strategy`: `none`, the default, keeps no CLAUDE.md because Claude Code reads AGENTS.md itself; `pointer`, `symlink`, and `copy` keep a shim beside each AGENTS.md) and each non-`ok` entry and leftover-CLAUDE.md warning with its path. Explain each missing heading: what the CLI writes there and why an agent needs it (`cli-utilities/bootstrap.md` for `## Tool Packs`; `cli-utilities/backlog-lifecycle.md` § Adoption comes first for the PJM sections). Offer `oat instructions sync`, `oat tools guidance` (read-only: prints the `OAT tools` block to add), or `oat pjm init` (appends absent PJM blocks) as the finding names; for wording and coverage beyond presence, hand off to `oat-agent-instructions-analyze` then `oat-agent-instructions-apply`.
225
229
 
226
230
  #### Docs dive
227
231
 
@@ -7,7 +7,7 @@ disable-model-invocation: true
7
7
  user-invocable: true
8
8
  allowed-tools: Read, Write, Bash(git:*), Bash(oat:*), Bash(oat project log:*), Glob, Grep, AskUserQuestion, Task
9
9
  metadata:
10
- version: 2.3.13
10
+ version: 2.3.15
11
11
  ---
12
12
 
13
13
  # Implementation Phase
@@ -102,7 +102,7 @@ record only the gate decision and its review/dispatch provenance.
102
102
  After every code commit and after every phase/review-fix completion, you MUST commit the OAT tracking files (project: `implementation.md`, `state.md`, `plan.md`) as a separate bookkeeping commit. Refresh the repo dashboard with `oat state refresh` before staging when available, but do not stage `.oat/state.md`; it is generated dashboard state and is normally gitignored. Do not defer, batch, or skip these commits under the reasoning that they "aren't related to the implementation." Skipping a bookkeeping commit is the primary cause of cross-session state drift and will cause the next implementation run to fail bookkeeping cross-checks. If bookkeeping commits feel frequent, that is the intended design — they are cheap and they prevent drift.
103
103
 
104
104
  **CRITICAL — Review boundaries require a committed artifact baseline.**
105
- Do not enter checkpoint review, final review, revise, or PR-final handoff with dirty core project artifacts (`discovery.md`, `spec.md`, `design.md`, `plan.md`, `implementation.md`, `state.md`). If one of those boundaries is next and artifact bookkeeping is still uncommitted, stop and create the bookkeeping commit first.
105
+ Do not enter checkpoint review, final review, revise, or PR-final handoff with dirty core project artifacts (`discovery.md`, `spec.md`, `design.md`, `plan.md`, `implementation.md`, `state.md`). If one of those boundaries is next and artifact bookkeeping is still uncommitted, stop and create the bookkeeping commit first. The per-phase review is such a boundary: commit the phase's task ledger (`references/phase-execution.md` Step 7a) before dispatching the per-phase reviewer, and write review-outcome bookkeeping after the review returns (Step 7b).
106
106
 
107
107
  **CRITICAL — Intentional artifact divergence must be recorded.**
108
108
  If implementation intentionally diverges from `spec.md`, `design.md`, or `plan.md`, record the delta in `implementation.md` before the next phase/review boundary. Include what diverged, why it diverged, whether the implementation or original artifact is now source of truth, and any follow-up artifact updates or explicit deferral. Do not leave accepted design drift only in chat, a review artifact, or code comments; final summary generation depends on `implementation.md` preserving the delta.
@@ -384,13 +384,13 @@ and can never be reused as a fresh `allowed` result once the gate is
384
384
  re-enabled; the re-enabled gate requires a new configured generation.
385
385
 
386
386
  New generations persist `implementation_fingerprint` as
387
- `sha256:effective-delta-v1:<digest>`. Resolve the logical integration base from
387
+ `sha256:effective-delta-v2:<digest>`. Resolve the logical integration base from
388
388
  the tracked PR's exact base ref, then the repository's configured remote default
389
389
  branch; missing or ambiguous resolution fails closed. Persist the logical base
390
390
  ref as `implementation_base_ref`; require exactly one merge base between that
391
391
  ref and each compared HEAD.
392
392
 
393
- Prefix the fingerprint input with the bytes `effective-delta-v1\0`. Hash the
393
+ Prefix the fingerprint input with the bytes `effective-delta-v2\0`. Hash the
394
394
  exact NUL-delimited byte stream from Git
395
395
  `--raw -z --no-renames --no-abbrev` output, which includes both base and final
396
396
  modes and full object IDs for blobs, symlinks, deletions, and gitlinks. Run with
@@ -398,13 +398,29 @@ modes and full object IDs for blobs, symlinks, deletions, and gitlinks. Run with
398
398
  format owns path framing and byte ordering; do not parse and reserialize it,
399
399
  abbreviate object IDs, enable rename detection, or hash human patch output.
400
400
 
401
- Exclude only the exact `$PROJECT_PATH/state.md` checkpoint carrier to avoid a
402
- self-referential digest. Use Git's literal exclusion pathspec, not a glob.
403
- Validate that file independently as the structured transition above. Every
404
- other path remains fingerprinted. Set `freshness_head` to `reviewed_head` and
405
- `freshness_fingerprint` to `implementation_fingerprint` when the generation
406
- starts. These rolling fields preserve the accepted tree outcome after later
407
- authorized closeout transitions without changing the immutable reviewed basis.
401
+ Exclude the exact `$PROJECT_PATH/state.md` checkpoint carrier, which would make
402
+ the digest self-referential, and every path under `.oat/projects/` and
403
+ `.oat/repo/`, whose project artifacts and repository records never make the
404
+ gate stale. Use Git's literal exclusion pathspecs
405
+ `:(exclude,literal)$PROJECT_PATH/state.md`, `:(exclude,literal).oat/projects`,
406
+ and `:(exclude,literal).oat/repo`, not globs. A literal directory pathspec
407
+ excludes that directory and everything beneath it, never a sibling whose name
408
+ merely starts the same way. `.oat/templates/`, `.oat/scripts/`,
409
+ `.oat/config*.json`, and `.oat/sync/` stay fingerprinted, as does every other
410
+ path. The `.oat/projects` exclusion names the default location literally; a
411
+ project whose configured `projects.root` lies outside `.oat/projects/` keeps
412
+ its other artifacts fingerprinted (more staleness, never less). Validate the
413
+ state carrier independently as the structured transition above.
414
+
415
+ Stored `sha256:effective-delta-v1:<digest>` values keep v1 semantics and are
416
+ never reinterpreted: recompute them with the `effective-delta-v1\0` prefix and
417
+ only the exact `$PROJECT_PATH/state.md` exclusion. A v1 generation stays v1
418
+ until it goes stale; its replacement generation uses v2.
419
+
420
+ Set `freshness_head` to `reviewed_head` and `freshness_fingerprint` to
421
+ `implementation_fingerprint` when the generation starts. These rolling fields
422
+ preserve the accepted tree outcome after later authorized closeout transitions
423
+ without changing the immutable reviewed basis.
408
424
 
409
425
  An in-flight `pending` or `blocked` generation reuses its persisted resolved
410
426
  configuration and never re-resolves it. Recompute the fingerprint from those
@@ -561,9 +577,14 @@ disposition.
561
577
  closeout-only. A path category alone is insufficient: the corresponding
562
578
  persisted gate or sequence transition must own that descendant boundary;
563
579
  unknown or mixed work is substantive.
564
- - For a qualified `sha256:effective-delta-v1:<digest>` value, require the
580
+ - For a qualified `sha256:effective-delta-v2:<digest>` or
581
+ `sha256:effective-delta-v1:<digest>` value, require the
565
582
  persisted `implementation_base_ref`, `freshness_head`, one current merge base,
566
583
  and 64-character lowercase hexadecimal implementation and freshness digests.
584
+ Recompute with the stored value's own version prefix and exclusion set.
585
+ Under v2, a descendant commit whose changes all fall inside the v2 exclusion
586
+ set leaves the effective delta unchanged; it is neither substantive nor
587
+ unknown and needs no owning transition.
567
588
  Missing or malformed inputs fail closed. Walk descendants after
568
589
  `freshness_head` in commit order. Ignore a checkpoint-persistence commit only
569
590
  after verifying its diff changes the exact state carrier and nothing else.
@@ -587,7 +608,8 @@ disposition.
587
608
  or workflow configuration changes make the prior result `stale`.
588
609
  - Every stale transition preserves prior provenance for audit, requires a
589
610
  current final lifecycle review for the changed basis, and starts a new
590
- generation using the qualified fingerprint format.
611
+ generation using the current qualified fingerprint format,
612
+ `effective-delta-v2`.
591
613
 
592
614
  Before approval-aware sequencing, final HiLL approval, implementation
593
615
  completion, or success output, run the configured gate:
@@ -727,7 +727,7 @@ Dispatch policy: {policy}; selected={selected value | none}; cap={value | none}
727
727
  ```text
728
728
  Dispatch policy: balanced; selected=xhigh; cap=xhigh (codex, enforced — variant oat-phase-implementer-gpt-5-6-terra-xhigh)
729
729
  Dispatch policy: inherit host defaults; selected=none; cap=none (codex, advisory — base role follows provider default)
730
- Dispatch policy: balanced; selected=claude-sonnet-5/high; cap=claude-sonnet-5/high (claude, enforced — native variant oat-phase-implementer-claude-claude-sonnet-5-high)
730
+ Dispatch policy: balanced; selected=claude-sonnet-5-5/high; cap=claude-sonnet-5-5/high (claude, enforced — native variant oat-phase-implementer-claude-claude-sonnet-5-5-high)
731
731
  Cursor materialized-variant example: Dispatch policy: frontier; selected=gpt-5.6-sol-max; cap=gpt-5.6-sol-max (cursor, enforced — native variant oat-phase-implementer-gpt-5-6-sol-max)
732
732
  Dispatch policy: unresolved; selected=none; cap=none (codex, advisory — policy set but no value resolved)
733
733
  ```
@@ -684,8 +684,11 @@ degradation is forbidden for the invalid run.
684
684
  ### Per-Phase Review
685
685
 
686
686
  The root workflow owns implementation review. After validating the phase
687
- report, resolve and dispatch exactly one fresh `oat-reviewer` round at the
688
- configured review ceiling:
687
+ report (sequential phases; see the parallel-group note below), commit Step 7a
688
+ pre-review bookkeeping before resolving or dispatching the reviewer, so the
689
+ reviewed head carries the phase's current task ledger. Then resolve and
690
+ dispatch exactly one fresh `oat-reviewer` round at the configured review
691
+ ceiling:
689
692
 
690
693
  ```bash
691
694
  oat project dispatch-ceiling resolve \
@@ -703,6 +706,17 @@ commit range, task IDs and boundaries, artifacts, verification evidence,
703
706
  configured axes, selection reason, and candidates. Require a timestamped review
704
707
  artifact under the project's `reviews/` directory.
705
708
 
709
+ The Review Scope names review-outcome bookkeeping as out of scope: this
710
+ review's `## Reviews` row and its disposition, the Orchestration Run entry for
711
+ this review's outcome, the deferred phase-outcome and review-orchestration
712
+ project-log entries, and the ledger's record of any review-fix commit. Step 7b
713
+ writes all of them after the review returns, so their absence at the reviewed
714
+ head is not a finding. The task ledger itself stays in scope and must be
715
+ current at the reviewed head, because Step 7a committed it before dispatch.
716
+ In a parallel group the phase worktree under review does not carry the root
717
+ ledger (step 10 of Parallel Group Execution commits it once after fan-in), so
718
+ that phase's Review Scope also names the task ledger as out of scope.
719
+
706
720
  For a managed capped review, bind the exact provider argument to the actual
707
721
  invocation: `providers.codex.dispatchArgs.variant`,
708
722
  `providers.claude.dispatchArgs.variant` for an effort-pinned target,
@@ -755,7 +769,9 @@ and workers never write `project-log.md` or append this entry.
755
769
 
756
770
  No project-log write happens anywhere between a reviewer returning and a fix
757
771
  child being dispatched. The deferred orchestration entry is appended with the
758
- phase-outcome entry at Step 7 and committed by that step's bookkeeping.
772
+ phase-outcome entry at Step 7b and committed by that half's bookkeeping. Step
773
+ 7a's commit lands before the reviewer is dispatched, so it cannot dirty that
774
+ window either.
759
775
 
760
776
  After successful signal and orchestration validation, validate the review
761
777
  artifact scope and commit range.
@@ -796,8 +812,10 @@ worktree in Outstanding Items.
796
812
 
797
813
  ### Optional External Phase Review Gate
798
814
 
799
- After the root-owned per-phase reviewer passes and phase bookkeeping is clean,
800
- run `oat_phase_review_gate` for selected phases:
815
+ After the root-owned per-phase reviewer passes and both halves of Step 7
816
+ bookkeeping are committed, run `oat_phase_review_gate` for selected phases. The
817
+ gate reviews the committed ledger after both Step 7 halves — which, after a fix
818
+ loop or in a parallel group, is newer than the head the per-phase reviewer saw:
801
819
 
802
820
  ```bash
803
821
  oat --json gate review \
@@ -817,6 +835,11 @@ and `handoff` is non-null.
817
835
  implementer under the bounded loop, then re-run root review and the gate.
818
836
  - target execution, artifact validation, or missing-artifact failure: stop.
819
837
 
838
+ The phase row stays `in_progress` until this gate passes and every review
839
+ disposition is settled; the bookkeeping that records the passing gate sets it
840
+ `complete`, and gate retry exhaustion sets it `blocked` (see Step 7b's phase
841
+ row transitions).
842
+
820
843
  Gate retry rounds use the same orchestration retry limit. Gate independence,
821
844
  configured provenance, liveness telemetry, and fail-closed behavior are
822
845
  unchanged.
@@ -879,7 +902,65 @@ target-preserving execution and must be recorded.
879
902
 
880
903
  ### Step 7: Artifact Updates After Each Phase (or Group)
881
904
 
882
- After each phase or parallel group:
905
+ After each phase or parallel group, Step 7 runs in two halves around the
906
+ per-phase review, each with its own commit.
907
+ The split exists so the reviewer never evaluates a head whose task ledger is
908
+ stale by construction, while the tree stays clean for a bounded fix child.
909
+
910
+ #### Step 7a: Pre-Review Bookkeeping
911
+
912
+ Run after the phase report validates and before Per-Phase Review dispatches the
913
+ reviewer. Write the phase's task ledger:
914
+
915
+ - the `implementation.md` task and phase completion rows: each planned task's
916
+ status and commit; keep the phase row `in_progress` (tasks complete, review
917
+ pending), because the phase's terminal status depends on its review;
918
+ - the `state.md` resume pointer (`oat_current_task`, last commit, and
919
+ timestamp), advanced consistently with `implementation.md` so the two
920
+ resume pointers never disagree;
921
+ - when the phase report carried a recovery attempt, after the matching
922
+ handoff-matrix row validates, clear the terminal `pending_attempt` marker,
923
+ preserve `used_attempts`, and append the validated canonical recovery event
924
+ to `implementation.md`;
925
+ - remove legacy `oat_execution_mode: subagent-driven`; and
926
+ - preserve any configured retry override.
927
+
928
+ The task rows, resume pointer, and recovery settlement do not depend on the
929
+ review outcome, which is why they can move ahead of the review; the recovery
930
+ settlement is validated from the phase report, not from the review. A
931
+ terminal-stop branch that ends without a review (`failed-attempt`,
932
+ `direction-required`, or `BLOCKED`) records its event and marker disposition
933
+ through the Step 7a commit block and then stops; it has no Step 7b. Commit it
934
+ through the same scope-resolving branch as Step 7b, including the synced-scope
935
+ `oat project push` path. Why this keeps the fix-child
936
+ preflight clean: the pre-review writes are committed before the reviewer is
937
+ dispatched, so the tree is clean when a bounded fix child is dispatched after
938
+ the review. The Optional External Phase Review Gate later sees this committed
939
+ ledger plus Step 7b's writes.
940
+
941
+ Pre-review bookkeeping is mandatory:
942
+
943
+ ```bash
944
+ oat state refresh
945
+ PROJECT_SCOPE=$(oat project scope "{PROJECT_PATH}" --format value) || { echo "oat: cannot resolve project scope for {PROJECT_PATH}; refusing to commit artifacts" >&2; exit 1; }
946
+ # fail closed: never fall back to branch bookkeeping when scope resolution fails
947
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
948
+ oat project push "{PROJECT_PATH}" --message "chore(oat): record {pNN} task ledger before review" || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
949
+ else
950
+ git add {PROJECT_PATH}/implementation.md {PROJECT_PATH}/state.md {PROJECT_PATH}/plan.md
951
+ [ -f {PROJECT_PATH}/project-log.md ] && git add {PROJECT_PATH}/project-log.md
952
+ git commit -m "chore(oat): record {pNN} task ledger before review"
953
+ fi
954
+ ```
955
+
956
+ A parallel group makes this commit once after fan-in, together with Step 7b
957
+ (step 10 of Parallel Group Execution), because its phase worktrees do not carry
958
+ the root ledger.
959
+
960
+ #### Step 7b: Post-Review Bookkeeping
961
+
962
+ Run after the phase's terminal review outcome (pass, or retry exhaustion).
963
+ Write the review-outcome bookkeeping that Step 7a leaves out:
883
964
 
884
965
  - append an Orchestration Run with phase outcomes, task commits, phase/root
885
966
  review result, fix iterations, dispatch stamps, selection reasons,
@@ -891,10 +972,30 @@ After each phase or parallel group:
891
972
  move an event status backward;
892
973
  - apply the Reviews Ledger Mutation Contract above before every disposition or
893
974
  archive re-point;
894
- - update `state.md` current task, last commit, and timestamp;
895
- - remove legacy `oat_execution_mode: subagent-driven`; and
975
+ - set the phase's `implementation.md` row from the review outcome: `blocked`
976
+ on retry exhaustion; on a passing review, keep the row nonterminal
977
+ (`in_progress`) while any review-fix task added by review-receive is open or
978
+ a selected Optional External Phase Review Gate has not yet passed, and set
979
+ `complete` only under the rule below; update the phase summary for any
980
+ review-fix commits;
981
+ - append the deferred phase-outcome and review-orchestration entries through
982
+ `oat project log append`;
983
+ - update `state.md` last commit and timestamp for any review-fix commit, and
984
+ its current task when the phase outcome changes it; and
896
985
  - preserve any configured retry override.
897
986
 
987
+ Phase row transitions: a passing root review (zero Critical and zero High) can
988
+ still queue Medium or Low fix tasks through review-receive, and the selected
989
+ phase gate runs after this step, so neither makes the phase complete by itself.
990
+ An added review-fix task keeps the row `in_progress` and names the queued task;
991
+ the bookkeeping that completes that task re-evaluates the row. A `blocked` gate
992
+ keeps the row `in_progress` through the bounded fix loop; gate retry exhaustion
993
+ sets it `blocked`. Set the row `complete` only when every review disposition is
994
+ settled and every selected phase gate has passed, in whichever bookkeeping
995
+ commit observes that last condition: this Step 7b commit when nothing is
996
+ queued and no gate is selected, otherwise the commit that records the final
997
+ review-fix task or the passing gate.
998
+
898
999
  Bookkeeping is mandatory:
899
1000
 
900
1001
  ```bash
@@ -7,7 +7,7 @@ disable-model-invocation: true
7
7
  user-invocable: true
8
8
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
9
9
  metadata:
10
- version: 1.1.5
10
+ version: 1.1.6
11
11
  ---
12
12
 
13
13
  # Lite Project
@@ -159,6 +159,28 @@ PROJECT_PATH=$(oat config get activeProject)
159
159
  Confirm `state.md` reports `oat_workflow_mode: lite`, `oat_phase: plan`, and
160
160
  `oat_phase_status: in_progress`. Do not create discovery or design artifacts.
161
161
 
162
+ **Consolidating earlier scaffolds.** When this new Lite project absorbs work
163
+ that earlier project scaffolds already started — those directories are being
164
+ retired into this one rather than continued — record what was absorbed in
165
+ `"$PROJECT_PATH/state.md"` frontmatter as one frontmatter write immediately
166
+ after the scaffold above, before Step 1. `PROJECT_PATH` here is the value
167
+ re-resolved after `oat project new`, never the pre-scaffold value, which still
168
+ names the previously active project. The fields have the same shapes that
169
+ `oat-project-quick-start` records:
170
+
171
+ - `absorbed_projects: [<slug>]` — the project slug of every retired scaffold,
172
+ which also names the scaffold directory under the projects root that this
173
+ project supersedes.
174
+ - `absorbed_backlog_ids: [<BL-id>]` — every backlog ID those scaffolds carried
175
+ into this project.
176
+
177
+ Record both fields only when a consolidation actually happened; an absent field
178
+ and an empty list are equivalent. A resumed Lite project keeps whatever it
179
+ already recorded. These two fields are the only inputs the absorbed-project
180
+ retirement sweep reads at completion, where retiring a scaffold is treated as a
181
+ semantic claim about the planning surfaces rather than the physical removal of
182
+ a directory. The write travels with this project's next `state.md` commit.
183
+
162
184
  ### Step 1: Read Repository Knowledge
163
185
 
164
186
  Read repository instructions and the minimum durable context needed for the
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Glob, Grep, Bash(git:*), Bash(oat:*), Skill
7
7
  metadata:
8
- version: 1.1.2
8
+ version: 1.1.3
9
9
  ---
10
10
 
11
11
  # Project Next
@@ -253,8 +253,8 @@ Otherwise, look up the target skill from the routing table for the current `oat_
253
253
  | Current Phase | Phase Status | Boundary Tier | Quick Plan Readiness | Target Skill |
254
254
  | ------------- | ------------ | ------------- | -------------------- | -------------------------- |
255
255
  | discovery | in_progress | tier 3 | — | `oat-project-discover` |
256
- | discovery | in_progress | tier 2 | — | `oat-project-plan` |
257
- | discovery | complete | tier 1 | — | `oat-project-plan` |
256
+ | discovery | in_progress | tier 2 | — | `oat-project-quick-start` |
257
+ | discovery | complete | tier 1 | — | `oat-project-quick-start` |
258
258
  | plan | in_progress | tier 3 | not ready | `oat-project-quick-start` |
259
259
  | plan | in_progress | tier 2 | not ready | `oat-project-quick-start` |
260
260
  | plan | in_progress | tier 1 | not ready | `oat-project-quick-start` |
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: false
6
6
  allowed-tools: Read, Write, Glob, Grep
7
7
  metadata:
8
- version: 1.2.33
8
+ version: 1.2.34
9
9
  ---
10
10
 
11
11
  # Plan Writing Contract
@@ -121,8 +121,8 @@ asking to write anything:
121
121
 
122
122
  | Provider | Economy | Balanced | High | Frontier |
123
123
  | --------------- | --------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
124
- | Codex | gpt-6-luna/low, gpt-6-luna/medium, gpt-6-luna/high | gpt-6-luna/xhigh, gpt-6-luna/max | gpt-6-sol/low, gpt-6-sol/medium, gpt-6-sol/high | gpt-6-sol/xhigh, gpt-6-astra/high, gpt-6-astra/xhigh |
125
- | Claude | haiku, claude-sonnet-5/medium | claude-opus-5-5/low | claude-opus-5-5/low, claude-opus-5-5/medium, claude-opus-5-5/high | claude-opus-5-5/xhigh, claude-opus-5-5/max, claude-fable-5-1/high |
124
+ | Codex | gpt-6-luna/low, gpt-6-luna/medium, gpt-6-luna/high | gpt-6-luna/xhigh, gpt-6-luna/max | gpt-6.1-sol/low, gpt-6.1-sol/medium, gpt-6.1-sol/high | gpt-6.1-sol/xhigh, gpt-6-astra/high, gpt-6-astra/xhigh |
125
+ | Claude | haiku, claude-sonnet-5-5/medium | claude-opus-5-5/low | claude-opus-5-5/low, claude-opus-5-5/medium, claude-opus-5-5/high | claude-opus-5-5/xhigh, claude-opus-5-5/max, claude-fable-5-1/high |
126
126
  | Cursor (opaque) | `composer-2.5`, `gpt-5.6-luna-high`, `gpt-5.6-luna-xhigh` | `cursor-grok-4.6-medium`, `gpt-5.6-terra-high`, `claude-opus-5-5-low` | `gpt-5.6-sol-medium`, `claude-opus-5-5-low`, `gpt-5.6-sol-high`, `claude-opus-5-5-medium`, `claude-opus-5-5-high` | `gpt-5.6-sol-xhigh`, `gpt-5.6-sol-max`, `claude-opus-5-5-high`, `claude-opus-5-5-xhigh`, `claude-fable-5-1-thinking-high` |
127
127
 
128
128
  In an interactive run, ask the user to select the owning scope explicitly
@@ -5,7 +5,7 @@ disable-model-invocation: false
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Glob, Grep, Bash(git:*), Bash(oat:*), AskUserQuestion
7
7
  metadata:
8
- version: 1.4.2
8
+ version: 1.4.3
9
9
  ---
10
10
 
11
11
  # Progress Router
@@ -276,7 +276,7 @@ Routing matrix by mode:
276
276
  | oat_phase | oat_phase_status | Next Skill |
277
277
  | --------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
278
278
  | discovery | in_progress | Continue `oat-project-discover` |
279
- | discovery | complete | `oat-project-plan` |
279
+ | discovery | complete | `oat-project-quick-start` |
280
280
  | plan | in_progress | Continue `oat-project-quick-start` when the plan is not implementation-ready; otherwise `oat-project-implement` |
281
281
  | plan | complete | `oat-project-implement` when the plan is implementation-ready; otherwise `oat-project-quick-start` |
282
282
  | implement | in_progress | Continue `oat-project-implement`. If drift detected (see drift detection above), also mention `oat-project-reconcile` as an option. |
@@ -4,7 +4,7 @@ description: Use when delegating work to subagents or choosing a model for a tas
4
4
  compatibility: Self-contained; no OAT installation required.
5
5
  user-invocable: true
6
6
  metadata:
7
- version: 1.0.10
7
+ version: 1.0.11
8
8
  ---
9
9
 
10
10
  # Subagent Orchestration
@@ -1,10 +1,10 @@
1
1
  # Evidence and Refresh Policy
2
2
 
3
3
  ```yaml
4
- guidance_version: 2026-09-24
5
- last_verified: 2026-09-24
6
- review_after: 2026-10-08
7
- stale_after: 2026-10-23
4
+ guidance_version: 2026-10-01
5
+ last_verified: 2026-10-01
6
+ review_after: 2026-10-15
7
+ stale_after: 2026-10-30
8
8
  ```
9
9
 
10
10
  This file governs dated provider examples. It does not override a live catalog,
@@ -17,7 +17,9 @@ authorization boundary.
17
17
  - `review-required`: older than 45 days, a newer family is observed, or a material control, price, tool, context, alias, or harness change is detected.
18
18
  - `stale`: older than 90 days, named models are unavailable or deprecated, or the launching surface can no longer express the recorded controls.
19
19
 
20
- The named routes were refreshed against provider catalogues on 2026-09-23.
20
+ The October 1 availability refresh adds GPT-6.1 Sol and Sonnet 5.5 support;
21
+ it migrates active Codex Sol selectors by user direction while preserving
22
+ efforts. Earlier provider observations retain their own dates.
21
23
  The benchmark observations below remain dated to 2026-07-25 and require
22
24
  review before making a new cross-provider performance claim. Each provider
23
25
  reference carries its own verification date; availability refresh does not
@@ -83,8 +85,9 @@ publish a provider-independent effort conversion.
83
85
  explicit user direction. No local task evaluation establishes an Astra
84
86
  advantage, and this preference is not acceptance by the separately
85
87
  maintained model-selection policy.
86
- - GPT-6 Sol and Luna are selectable in the current Codex catalogue and are
87
- the default new-work routes in `provider-codex.md`. GPT-5.6 Sol/Luna/Terra
88
+ - GPT-6.1 Sol and GPT-6 Luna are the default new-work selectors in
89
+ `provider-codex.md`. The Sol migration preserves existing effort choices,
90
+ including medium for intelligent recon. GPT-6 Sol and GPT-5.6 Sol/Luna/Terra
88
91
  remain supported for explicit configurations. The July independent coding
89
92
  data on GPT-5.6 Luna/Terra supported a mechanical floor of Luna high; this
90
93
  is historical evidence, not a measured GPT-6 performance comparison.
@@ -93,7 +96,12 @@ publish a provider-independent effort conversion.
93
96
  evidence. Earlier Opus 5 effort observations are historical and do not
94
97
  establish an Opus 5.5 benchmark result. Consequence adds independent review
95
98
  rather than automatically raising effort.
96
- - Sonnet 5 is a conditional route when measured latency, throughput, access,
99
+ - Sonnet 5.5 is a supported Claude conditional route and the user-selected
100
+ Economy medium candidate. Cursor 3.22.12 native probes matched Sonnet 5.5
101
+ exact-ID pins; its bracket-form pins fell back. Every pin requires its own
102
+ approved evidence and registry entry. Sonnet 5 remains
103
+ supported for compatibility and established workflows. Sonnet is a
104
+ conditional route when measured latency, throughput, access,
97
105
  rate limits, or end-to-end workload economics win. Fable 5 is an
98
106
  eligibility-gated specialist; its missing-domain-concept or long-horizon
99
107
  reviewer instantiation remains provisional, and zero-data-retention
@@ -195,6 +203,10 @@ component it cannot resolve. Probe a non-default rung as well, or a result that
195
203
  merely matches the family default cannot distinguish an honored parameter from
196
204
  an ignored one.
197
205
 
206
+ An exact-ID Cursor pin meets the same evidence gate as a bracket-form pin;
207
+ CLI catalog presence alone never permits generic pass-through. The Sonnet 5.5
208
+ refresh uses explicit exact-ID mappings because its bracket-form pins fell back.
209
+
198
210
  The six Cursor `claude-opus-5` and `claude-opus-4-8` mappings shipped on
199
211
  2026-07-25 met this gate; their resolved identities are listed in
200
212
  `provider-cursor.md`.
@@ -1,7 +1,7 @@
1
1
  ---
2
- guidance_version: 2026-09-23
3
- last_verified: 2026-09-23
4
- review_after: 2026-12-22
2
+ guidance_version: 2026-10-01
3
+ last_verified: 2026-10-01
4
+ review_after: 2026-12-30
5
5
  ---
6
6
 
7
7
  # Claude Model Selection
@@ -17,7 +17,12 @@ the dated model examples below. Launch mechanics for OAT dispatch live in
17
17
  high-volume, mechanically verified work.
18
18
  - `claude-opus-5-5`: normal substantive route and the default for
19
19
  interpretation-heavy implementation, hard reasoning, and consequential work.
20
- - `claude-sonnet-5`: conditional route when measured latency, throughput,
20
+ - `claude-sonnet-5-5`: supported conditional route at `low`, `medium`,
21
+ `high`, `xhigh`, and `max`; qualify it against the relevant Opus route on
22
+ representative work. The bundled Economy tier selects medium by explicit
23
+ user direction; this is separate from task-performance qualification.
24
+ - `claude-sonnet-5`: supported compatibility and established-workflow route
25
+ when measured latency, throughput,
21
26
  access, rate limits, or established-workflow economics beat the relevant
22
27
  Opus route.
23
28
  - `claude-fable-5-1`: eligibility-gated specialist for a directly relevant
@@ -45,6 +50,12 @@ host.
45
50
  is the bottleneck or an evaluated long-horizon workload benefits. Max is
46
51
  exceptional and requires a workload-specific effort sweep or an explicit
47
52
  quality-first exception.
53
+ - Sonnet 5.5: availability and its five efforts are documented in the
54
+ [Sonnet 5.5 overview](https://platform.claude.com/docs/en/models/sonnet-5-5/overview)
55
+ and [effort reference](https://platform.claude.com/docs/en/build-with-claude/effort).
56
+ The existing conditional-route posture applies; availability is not an
57
+ evaluated workload ranking. Check the installed Claude Code version and
58
+ returned assistant model before launch.
48
59
  - Sonnet 5: use medium or high only when measured latency, throughput, access,
49
60
  or workload economics justify the conditional route. Do not preserve xhigh
50
61
  or max as generic workhorse settings.
@@ -65,13 +76,13 @@ These routes are dated guidance and benchmark-derived routing hypotheses.
65
76
  Evaluate them on representative local work before treating fine boundaries as
66
77
  stable.
67
78
 
68
- | Task class | Default | Economy | Escalation | Floor notes |
69
- | ------------------------ | ------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
70
- | `mechanical-recon` | Haiku 4.5 | Same, with strict output and mechanical verification | Opus 5.5 medium | Haiku is below floor for semantic audits and silent-miss-prone exploration. |
71
- | `intelligent-recon` | Opus 5.5 low | Sonnet 5 medium/high only when its measured route wins | Opus 5.5 medium; high when deeper reasoning is needed | Verify silent-miss-prone conclusions; do not use Sonnet low for open-ended recon. |
72
- | `default-implementation` | Opus 5.5 medium | Sonnet 5 medium/high for evaluated bounded throughput | Opus 5.5 high | Fable is not a routine implementation or economy route. |
73
- | `hard-reasoning` | Opus 5.5 high | Opus 5.5 medium only after narrowing and evaluation | Opus 5.5 xhigh for a reasoning-depth bottleneck | Use max only after a workload-specific effort sweep. |
74
- | `consequential` | Opus 5.5 high plus independent review | No routine economy route | Opus 5.5 xhigh when deeper reasoning is also required | Consequence adds review and root authorization; it does not automatically require xhigh or max. |
79
+ | Task class | Default | Economy | Escalation | Floor notes |
80
+ | ------------------------ | ------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
81
+ | `mechanical-recon` | Haiku 4.5 | Same, with strict output and mechanical verification | Opus 5.5 medium | Haiku is below floor for semantic audits and silent-miss-prone exploration. |
82
+ | `intelligent-recon` | Opus 5.5 low | Sonnet 5.5 medium/high only when its measured route wins | Opus 5.5 medium; high when deeper reasoning is needed | Verify silent-miss-prone conclusions; do not use Sonnet low for open-ended recon. |
83
+ | `default-implementation` | Opus 5.5 medium | Sonnet 5.5 medium/high for evaluated bounded throughput | Opus 5.5 high | Fable is not a routine implementation or economy route. |
84
+ | `hard-reasoning` | Opus 5.5 high | Opus 5.5 medium only after narrowing and evaluation | Opus 5.5 xhigh for a reasoning-depth bottleneck | Use max only after a workload-specific effort sweep. |
85
+ | `consequential` | Opus 5.5 high plus independent review | No routine economy route | Opus 5.5 xhigh when deeper reasoning is also required | Consequence adds review and root authorization; it does not automatically require xhigh or max. |
75
86
 
76
87
  ## Root and Subagent Cost Posture
77
88
 
@@ -108,7 +119,9 @@ verified before selection.
108
119
 
109
120
  Eligibility filters the candidate set before capability or economy is compared.
110
121
  A route that fails one of these gates is unavailable regardless of benchmark
111
- standing. The non-Opus constraints are dated observations; reverify against the live
122
+ standing. The table below records existing generations; it does not establish Sonnet 5.5
123
+ retention, service tiers, or context limits. Verify those separately.
124
+ The non-Opus constraints are dated observations; reverify against the live
112
125
  schema and the organization's actual plan before launch. Do not transfer Opus 5
113
126
  service-tier or retention claims to Opus 5.5 without fresh evidence.
114
127