@open-agent-toolkit/cli 0.1.46 → 0.1.48
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.
- package/assets/agents/oat-phase-implementer.md +202 -191
- package/assets/agents/oat-reviewer.md +11 -1
- package/assets/config/dispatch-matrix-recommendation.json +120 -13
- package/assets/docs/cli-utilities/configuration.md +172 -113
- package/assets/docs/cli-utilities/workflow-gates.md +161 -27
- package/assets/docs/contributing/skills.md +14 -8
- package/assets/docs/provider-sync/providers.md +41 -7
- package/assets/docs/provider-sync/scope-and-surface.md +2 -2
- package/assets/docs/reference/cli-reference.md +3 -1
- package/assets/docs/reference/oat-directory-structure.md +27 -26
- package/assets/docs/workflows/projects/artifacts.md +31 -1
- package/assets/docs/workflows/projects/dispatch-ceiling.md +235 -187
- package/assets/docs/workflows/projects/implementation-execution.md +283 -260
- package/assets/docs/workflows/projects/lifecycle.md +26 -5
- package/assets/docs/workflows/projects/reviews.md +27 -2
- package/assets/migration/pjm-restructure.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +247 -133
- package/assets/skills/oat-project-import-plan/SKILL.md +173 -16
- package/assets/skills/oat-project-next/SKILL.md +2 -2
- package/assets/skills/oat-project-plan/SKILL.md +122 -92
- package/assets/skills/oat-project-plan-writing/SKILL.md +246 -15
- package/assets/skills/oat-project-quick-start/SKILL.md +157 -107
- package/assets/skills/oat-project-review-provide/SKILL.md +94 -22
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +64 -39
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +21 -6
- package/dist/commands/gate/index.d.ts +7 -1
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +544 -67
- package/dist/commands/gate/review-verdict.d.ts +16 -0
- package/dist/commands/gate/review-verdict.d.ts.map +1 -1
- package/dist/commands/gate/review-verdict.js +72 -9
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +452 -16
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
- package/dist/commands/providers/codex/materialize.js +6 -1
- package/dist/commands/shared/frontmatter.d.ts +4 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +23 -0
- package/dist/commands/status/index.d.ts +1 -0
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +10 -4
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +10 -3
- package/dist/commands/sync/sync.types.d.ts +1 -0
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/config/oat-config.d.ts +19 -2
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +139 -24
- package/dist/config/resolve.d.ts +8 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +66 -2
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/scanner.d.ts +1 -0
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +17 -1
- package/dist/fs/paths.d.ts +4 -0
- package/dist/fs/paths.d.ts.map +1 -1
- package/dist/fs/paths.js +18 -1
- package/dist/providers/ceiling/registry.d.ts +1 -0
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +12 -5
- package/dist/providers/codex/codec/catalog.d.ts +14 -0
- package/dist/providers/codex/codec/catalog.d.ts.map +1 -0
- package/dist/providers/codex/codec/catalog.js +21 -0
- package/dist/providers/codex/codec/materialize.d.ts.map +1 -1
- package/dist/providers/codex/codec/materialize.js +6 -5
- package/dist/providers/codex/codec/shared.d.ts +19 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +98 -5
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +142 -32
- package/dist/providers/identity/stamp.d.ts.map +1 -1
- package/dist/providers/identity/stamp.js +4 -0
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +4 -0
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-plan-writing
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.8
|
|
4
4
|
description: Use when authoring or mutating plan.md in any OAT workflow. Defines canonical format invariants — stable task IDs, required sections, review table rules, and resume guardrails.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: false
|
|
@@ -23,6 +23,227 @@ This is a sub-phase indicator; the calling skill owns the top-level banner.
|
|
|
23
23
|
|
|
24
24
|
- When invoked by a calling skill, print the sub-banner immediately before plan authoring begins.
|
|
25
25
|
|
|
26
|
+
## Managed Dispatch Readiness and Review Contract
|
|
27
|
+
|
|
28
|
+
All plan-producing workflows and their artifact reviews use this contract:
|
|
29
|
+
spec-driven planning, quick-start, imported plans, and provider-plan-via-import.
|
|
30
|
+
The contract runs before a plan becomes implementation-ready and immediately
|
|
31
|
+
before each artifact review dispatch.
|
|
32
|
+
|
|
33
|
+
1. Resolve the active provider through the CLI source of truth. For artifact
|
|
34
|
+
review, always request the reviewer contract:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
oat project dispatch-ceiling resolve --provider "$ACTIVE_PROVIDER" --role reviewer --preflight --json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Complete Dispatch Ladder Adoption Contract
|
|
41
|
+
|
|
42
|
+
Before any plan becomes implementation-ready, inspect the effective
|
|
43
|
+
`workflow.dispatchCeiling.providers` value and compare its ordered candidate
|
|
44
|
+
ladders with the bundled
|
|
45
|
+
`packages/cli/config/dispatch-matrix-recommendation.json` source (or the
|
|
46
|
+
installed bundle's `config/dispatch-matrix-recommendation.json` asset). A
|
|
47
|
+
complete custom ladder is allowed, but every supported provider must have valid
|
|
48
|
+
ordered `candidates` cells through the named project ceiling. A legacy scalar,
|
|
49
|
+
single fallback route, missing tier, empty candidates array, or malformed
|
|
50
|
+
ordering is not a complete ladder.
|
|
51
|
+
|
|
52
|
+
When the effective ladder is missing or incomplete, show the complete bundled
|
|
53
|
+
recommendation before asking to write anything:
|
|
54
|
+
|
|
55
|
+
| Provider | Economy | Balanced | High | Frontier |
|
|
56
|
+
| --------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | -------------------------------------- |
|
|
57
|
+
| Codex | Luna/low, Luna/medium, Luna/high | Luna/xhigh, Terra/low, Terra/medium, Terra/high, Terra/xhigh | Sol/low, Sol/medium, Sol/high | Sol/xhigh, Sol/max |
|
|
58
|
+
| Claude | haiku, sonnet | sonnet | opus | fable |
|
|
59
|
+
| Cursor (opaque) | `gpt-5.6-luna-low`, `gpt-5.6-luna-medium`, `gpt-5.6-luna-high` | `gpt-5.6-luna-xhigh`, `gpt-5.6-terra-low`, `gpt-5.6-terra-medium`, `gpt-5.6-terra-high`, `gpt-5.6-terra-xhigh` | `gpt-5.6-sol-low`, `gpt-5.6-sol-medium`, `gpt-5.6-sol-high` | `gpt-5.6-sol-xhigh`, `gpt-5.6-sol-max` |
|
|
60
|
+
|
|
61
|
+
Ask the user to select the owning scope explicitly before any adoption write:
|
|
62
|
+
|
|
63
|
+
1. **Shared repository** - team-owned `.oat/config.json`; run
|
|
64
|
+
`oat config adopt dispatch-matrix --shared`.
|
|
65
|
+
2. **Repo-local checkout** - personal `.oat/config.local.json`; run
|
|
66
|
+
`oat config adopt dispatch-matrix --local`.
|
|
67
|
+
3. **User** - cross-repository `~/.oat/config.json`; run
|
|
68
|
+
`oat config adopt dispatch-matrix --user`.
|
|
69
|
+
4. **Do not adopt** - leave setup unresolved and block implementation
|
|
70
|
+
readiness.
|
|
71
|
+
|
|
72
|
+
The selected ownership scope owns only the reusable ladder. The active
|
|
73
|
+
project's named ceiling is a separate project-state constraint. A
|
|
74
|
+
project-specific active policy or ceiling must not be written to user
|
|
75
|
+
`~/.oat/config.json`.
|
|
76
|
+
|
|
77
|
+
Adoption preserves explicit cells. Re-run the resolver and re-check the full
|
|
78
|
+
ladder after adoption. If preserved legacy or partial cells still leave the
|
|
79
|
+
ladder incomplete or missing, identify those cells and block; do not overwrite,
|
|
80
|
+
infer, or mark the plan implementation-ready. In non-interactive mode, an
|
|
81
|
+
incomplete or missing ladder blocks readiness without choosing an ownership
|
|
82
|
+
scope.
|
|
83
|
+
|
|
84
|
+
### Reviewer Ceiling Contract
|
|
85
|
+
|
|
86
|
+
A managed active-provider result is runnable only when the resolver returns
|
|
87
|
+
concrete native dispatch controls or an explicit deferred cross-harness target.
|
|
88
|
+
Otherwise treat the active-provider reviewer contract as unresolved.
|
|
89
|
+
Reviewer resolution uses the final candidate of the configured review ceiling:
|
|
90
|
+
call `--role reviewer` without an ephemeral implementer candidate request.
|
|
91
|
+
Do not select a lower candidate for artifact, phase, project, or final review
|
|
92
|
+
unless a separate reviewed contract explicitly authorizes reviewer lowering and
|
|
93
|
+
defines its bounds. A `## Dispatch Profile` row alone is not such a contract.
|
|
94
|
+
|
|
95
|
+
Bind every concrete managed reviewer target to the actual provider
|
|
96
|
+
invocation before probing generic reviewer availability or selecting an
|
|
97
|
+
execution tier. That target takes precedence over every availability, tier,
|
|
98
|
+
timeout, and inline fallback.
|
|
99
|
+
A concrete managed Codex target takes precedence over tier availability.
|
|
100
|
+
|
|
101
|
+
- Codex: use the exact registered reviewer variant returned by
|
|
102
|
+
`providers.codex.dispatchArgs.variant` when the host can select that role.
|
|
103
|
+
If the exact role is unavailable or the current host cannot select it,
|
|
104
|
+
launch a fresh Codex child with the resolver target's explicit model,
|
|
105
|
+
reasoning effort, and canonical role instructions from
|
|
106
|
+
`.agents/agents/oat-reviewer.md`. If the fresh child cannot preserve the
|
|
107
|
+
target, use only a verified-equivalent inline route or block the review.
|
|
108
|
+
- Claude: require a non-empty `providers.claude.dispatchArgs.model` and put
|
|
109
|
+
that exact value in the actual provider invocation as its `model` argument.
|
|
110
|
+
- Cursor: treat `providers.cursor.dispatchArgs.model` as opaque and put that
|
|
111
|
+
exact, unnormalized string in the actual provider invocation as its `model`
|
|
112
|
+
argument.
|
|
113
|
+
|
|
114
|
+
Build the actual host invocation payload before declaring the target enforced.
|
|
115
|
+
On timeout, retry, or artifact rewrite/re-dispatch, reuse the same exact role or
|
|
116
|
+
complete provider payload, including the exact model argument. If the host
|
|
117
|
+
cannot apply the required role or model argument, fail closed or block unless
|
|
118
|
+
the guarded inline-equivalence rule below applies. Never continue through a
|
|
119
|
+
generic tier fallback.
|
|
120
|
+
|
|
121
|
+
Workflow correctness must not require provider restart or hot reload.
|
|
122
|
+
Runtime materialization may be best effort, but it is not the correctness
|
|
123
|
+
boundary. Never use a managed base role because an exact target is missing or
|
|
124
|
+
unavailable in the current session. Base Codex roles are allowed only for
|
|
125
|
+
explicit inherit/default behavior and the documented managed-uncapped reviewer
|
|
126
|
+
fallback.
|
|
127
|
+
|
|
128
|
+
Inline review of a concrete managed target is permitted only after verifying
|
|
129
|
+
equivalent current-host model and effort controls. Otherwise inline or base
|
|
130
|
+
execution is limited to explicit inherit/default behavior or the documented
|
|
131
|
+
managed-uncapped reviewer fallback.
|
|
132
|
+
|
|
133
|
+
The Auto Artifact-Review Loop below consumes this reviewer dispatch contract.
|
|
134
|
+
Tier selection happens only after the target-preserving route is known and
|
|
135
|
+
changes execution mechanics, not the resolved model/effort contract.
|
|
136
|
+
|
|
137
|
+
## Shared Phase-Review Setup Contract
|
|
138
|
+
|
|
139
|
+
Every plan-producing workflow invokes this procedure after the complete plan
|
|
140
|
+
has stable phase IDs and before the plan artifact review begins. The calling
|
|
141
|
+
skill owns the prompt and the write to `plan.md`; this section owns the shared
|
|
142
|
+
eligibility, preservation, validation, and non-interactive behavior.
|
|
143
|
+
|
|
144
|
+
### 1. Preserve explicit plan state
|
|
145
|
+
|
|
146
|
+
Inspect `plan.md` frontmatter before probing configuration. If an explicit
|
|
147
|
+
existing `oat_phase_review_gate` key is present, preserve the complete value
|
|
148
|
+
unchanged. Do not probe targets, prompt, or mutate the setting. This applies to
|
|
149
|
+
enabled, disabled, resumed, and imported explicit values. Report:
|
|
150
|
+
|
|
151
|
+
```text
|
|
152
|
+
Phase review: preserved existing oat_phase_review_gate setting.
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Implementation preflight remains responsible for rejecting a malformed
|
|
156
|
+
explicit value. Planning must not silently repair, replace, or disable it.
|
|
157
|
+
|
|
158
|
+
### 2. Probe qualifying targets
|
|
159
|
+
|
|
160
|
+
When no explicit setting exists, run the canonical read-only probe:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
oat gate target list --json
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
If `oat` is not available directly, use the repository source CLI with the
|
|
167
|
+
same arguments. Do not select or execute a reviewer during this probe. A target
|
|
168
|
+
qualifies only when all three JSON fields are literal booleans with these
|
|
169
|
+
values:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
target.explicitlyConfigured === true
|
|
173
|
+
target.enabled === true
|
|
174
|
+
target.available === true
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Built-in-only, disabled, unavailable, missing, or malformed entries do not
|
|
178
|
+
qualify. Never infer qualification from target origin, runtime, invocation
|
|
179
|
+
metadata, command text, or a merely non-empty target list.
|
|
180
|
+
|
|
181
|
+
If the probe fails, emit exactly this concise warning and continue planning
|
|
182
|
+
without adding the setting:
|
|
183
|
+
|
|
184
|
+
```text
|
|
185
|
+
Warning: phase review target probe failed; phase review remains disabled.
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
If no qualifying target exists, emit:
|
|
189
|
+
|
|
190
|
+
```text
|
|
191
|
+
Phase review: disabled (no qualifying target); phase review remains disabled.
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Do not invent enablement in either branch.
|
|
195
|
+
|
|
196
|
+
### 3. Offer the canonical choice
|
|
197
|
+
|
|
198
|
+
When at least one target qualifies and an interactive user-response channel is
|
|
199
|
+
available, offer exactly these outcomes:
|
|
200
|
+
|
|
201
|
+
1. **All phases** - enable review for every implementation phase.
|
|
202
|
+
2. **Selected phases** - enable review only for chosen stable phase IDs.
|
|
203
|
+
3. **Disabled** - leave phase review disabled.
|
|
204
|
+
|
|
205
|
+
For all phases, write the existing plan frontmatter shape:
|
|
206
|
+
|
|
207
|
+
```yaml
|
|
208
|
+
oat_phase_review_gate:
|
|
209
|
+
enabled: true
|
|
210
|
+
phases: []
|
|
211
|
+
review_type: code
|
|
212
|
+
exit_nonzero_on: important
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
For selected phases, use the same shape with `phases` populated. Validate the
|
|
216
|
+
selected phase IDs against the actual stable phase IDs in the finished plan.
|
|
217
|
+
Reject unknown IDs and re-prompt instead of persisting them; de-duplicate valid
|
|
218
|
+
IDs and serialize them in plan order, regardless of selection order. Require at
|
|
219
|
+
least one valid phase for this choice.
|
|
220
|
+
|
|
221
|
+
If the user declines or chooses Disabled, do not add
|
|
222
|
+
`oat_phase_review_gate`; emit:
|
|
223
|
+
|
|
224
|
+
```text
|
|
225
|
+
Phase review: disabled (user declined); phase review remains disabled.
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 4. Handle non-interactive planning
|
|
229
|
+
|
|
230
|
+
Non-interactive mode includes `OAT_NON_INTERACTIVE=1` and any environment with
|
|
231
|
+
no user-response channel. Never prompt in this mode. Even when the probe finds
|
|
232
|
+
a qualifying target, do not guess all phases or selected phases and do not
|
|
233
|
+
invent enablement. Leave the setting absent and emit:
|
|
234
|
+
|
|
235
|
+
```text
|
|
236
|
+
Phase review: disabled (non-interactive; no selection recorded); phase review remains disabled.
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### 5. Keep review gates independent from HiLL
|
|
240
|
+
|
|
241
|
+
This setup is independent from HiLL checkpoints. It must not read or change
|
|
242
|
+
`oat_plan_hill_phases`, `oat_auto_review_at_hill_checkpoints`, or
|
|
243
|
+
`oat_hill_completed`. The qualifying target only controls whether the setup
|
|
244
|
+
choice is offered; normal lifecycle gate commands remain provider-neutral.
|
|
245
|
+
They must not add a provider/model `--target` argument.
|
|
246
|
+
|
|
26
247
|
## Auto Artifact-Review Loop
|
|
27
248
|
|
|
28
249
|
This is the canonical contract for bounded automated reviews of generated OAT artifacts. Calling skills own the concrete edits, progress indicators, and commits; this section defines the shared loop they must follow.
|
|
@@ -45,10 +266,11 @@ Use this loop after an artifact has been written and before the calling skill ha
|
|
|
45
266
|
- The bound controls rewrite/re-dispatch cycles after the initial review. A bound of `0` still permits the initial structured review, then surfaces residual findings without retrying.
|
|
46
267
|
|
|
47
268
|
3. **Dispatch `oat-reviewer` in structured mode**
|
|
48
|
-
-
|
|
49
|
-
-
|
|
269
|
+
- When the resolver returned a concrete managed Codex target, use its exact registered reviewer or a fresh child pinned to the same model, effort, and canonical instructions. If neither is possible, run inline only with verified equivalent current-host controls; otherwise block.
|
|
270
|
+
- When the resolver returned a concrete managed Claude or Cursor target, require `providers.claude.dispatchArgs.model` or `providers.cursor.dispatchArgs.model` respectively and pass that exact value in the actual provider invocation's `model` argument. Cursor values are opaque and must not be normalized. If the host cannot apply the model argument, fail closed unless inline execution has verified equivalent controls.
|
|
271
|
+
- For explicit inherit/default behavior or the documented managed-uncapped reviewer fallback, Tier 1 uses the configured `oat-reviewer` subagent when available and authorized; Tier 2 may run the same reviewer prompt inline.
|
|
50
272
|
- Always set `oat_output_mode: structured`; the loop consumes `StructuredFindings` in-memory and the reviewer writes no artifact.
|
|
51
|
-
- Do not downgrade the
|
|
273
|
+
- Do not downgrade the resolved target or checklist when changing execution mechanics.
|
|
52
274
|
|
|
53
275
|
4. **Apply or offer fixes by severity**
|
|
54
276
|
- If the structured review is clean, proceed to outcome recording.
|
|
@@ -57,7 +279,7 @@ Use this loop after an artifact has been written and before the calling skill ha
|
|
|
57
279
|
- If a finding cannot be fixed within the artifact boundary, preserve it as residual and surface it before handoff.
|
|
58
280
|
|
|
59
281
|
5. **Rewrite and re-dispatch within the bound**
|
|
60
|
-
- After applying fixes, rewrite the artifact and re-dispatch `oat-reviewer` with the same target payload.
|
|
282
|
+
- After applying fixes, rewrite the artifact and re-dispatch `oat-reviewer` with the same complete target payload, including the exact Claude or Cursor `dispatchArgs.model` argument.
|
|
61
283
|
- Each rewrite/re-dispatch cycle consumes one retry.
|
|
62
284
|
- Stop when the reviewer returns no findings or when the retry bound is exhausted.
|
|
63
285
|
|
|
@@ -91,16 +313,22 @@ Runtime routing note:
|
|
|
91
313
|
|
|
92
314
|
- Keep `oat_ready_for` canonical as `oat-project-implement`.
|
|
93
315
|
- Declare parallelism via `oat_plan_parallel_groups` in plan.md frontmatter (empty = sequential; nested arrays of phase IDs = parallel groups). `oat-project-implement` reads this field to choose sequential vs worktree-isolated parallel execution.
|
|
94
|
-
-
|
|
95
|
-
|
|
96
|
-
`workflow.dispatchCeiling
|
|
97
|
-
|
|
316
|
+
- Reusable candidate ladders are config-owned and are never copied into
|
|
317
|
+
`plan.md` or project state. Plan-producing skills resolve them from
|
|
318
|
+
`workflow.dispatchCeiling.*`.
|
|
319
|
+
- Project dispatch policy is a named maximum constraint. Persist interactive
|
|
320
|
+
project answers to `state.md` as `oat_dispatch_policy`; never copy
|
|
321
|
+
compiled provider/model targets into that project policy.
|
|
98
322
|
|
|
99
323
|
Additional frontmatter keys (`oat_phase`, `oat_phase_status`, `oat_blockers`, `oat_last_updated`, `oat_generated`, `oat_template`, `oat_import_reference`, `oat_import_source_path`, `oat_import_provider`) are set by calling skills as needed.
|
|
100
324
|
|
|
101
325
|
### Dispatch Profile Overrides
|
|
102
326
|
|
|
103
|
-
`## Dispatch Profile` is optional and should be omitted by default.
|
|
327
|
+
`## Dispatch Profile` is optional and should be omitted by default. A profile
|
|
328
|
+
may narrow a phase to a named ceiling at or below the project ceiling. The
|
|
329
|
+
named ceiling is a maximum candidate tier, not an exact model-family or effort
|
|
330
|
+
preference; the later coordinator chooses exact task targets from the complete
|
|
331
|
+
configured ladder.
|
|
104
332
|
|
|
105
333
|
Only include the section when the user has explicit constraints or preferences. Routine hand-tuning can be worse than runtime selection because the orchestrator has fresher phase context and host capability information at dispatch time.
|
|
106
334
|
|
|
@@ -109,16 +337,19 @@ If a user-authored override is needed, use this table shape:
|
|
|
109
337
|
```markdown
|
|
110
338
|
## Dispatch Profile
|
|
111
339
|
|
|
112
|
-
| Phase |
|
|
113
|
-
| ----- |
|
|
114
|
-
| pNN |
|
|
340
|
+
| Phase | Named ceiling | Rationale |
|
|
341
|
+
| ----- | --------------------------------------- | ----------------------------- |
|
|
342
|
+
| pNN | economy\|balanced\|high\|frontier\|auto | why this constraint is needed |
|
|
115
343
|
```
|
|
116
344
|
|
|
117
345
|
Validation rules for explicit rows:
|
|
118
346
|
|
|
119
347
|
- `Phase` must match a real `pNN` phase in the plan.
|
|
120
|
-
- `
|
|
121
|
-
|
|
348
|
+
- `Named ceiling` must be `economy`, `balanced`, `high`, `frontier`,
|
|
349
|
+
`auto`, or blank, and it must not exceed the project named ceiling.
|
|
350
|
+
- Under a `High` ceiling, configured candidates from `Economy`, `Balanced`, and
|
|
351
|
+
`High` remain eligible and available; the row does not pin Sol, a Claude
|
|
352
|
+
family, a Cursor string, or an effort value.
|
|
122
353
|
- Blank or `auto` means no explicit constraint for that provider.
|
|
123
354
|
- `Rationale` is recommended and should explain why runtime selection should not decide on its own.
|
|
124
355
|
|