@open-agent-toolkit/cli 0.1.62 → 0.1.64

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 (61) hide show
  1. package/assets/agents/oat-phase-implementer.md +9 -1
  2. package/assets/agents/oat-reviewer.md +8 -1
  3. package/assets/docs/cli-utilities/configuration.md +29 -0
  4. package/assets/docs/cli-utilities/tool-packs.md +29 -1
  5. package/assets/docs/contributing/skills.md +22 -0
  6. package/assets/docs/workflows/projects/artifacts.md +30 -0
  7. package/assets/docs/workflows/projects/autonomy.md +154 -0
  8. package/assets/docs/workflows/projects/cursor-cloud.md +151 -0
  9. package/assets/docs/workflows/projects/dispatch-ceiling.md +13 -0
  10. package/assets/docs/workflows/projects/index.md +6 -0
  11. package/assets/public-package-versions.json +4 -4
  12. package/assets/skills/oat-cursor-cloud-projects/SKILL.md +318 -0
  13. package/assets/skills/oat-cursor-cloud-projects/references/cursor-cloud-mechanics.md +173 -0
  14. package/assets/skills/oat-project-autonomous/SKILL.md +439 -0
  15. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +294 -0
  16. package/assets/skills/oat-project-design/SKILL.md +79 -1
  17. package/assets/skills/oat-project-discover/SKILL.md +76 -1
  18. package/assets/skills/oat-project-document/SKILL.md +24 -1
  19. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +294 -0
  20. package/assets/skills/oat-project-implement/SKILL.md +18 -1
  21. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +72 -7
  22. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +17 -9
  23. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +294 -0
  24. package/assets/skills/oat-project-implement/references/plan-and-resume.md +56 -0
  25. package/assets/skills/oat-project-plan-writing/SKILL.md +48 -12
  26. package/assets/skills/oat-project-pr-final/SKILL.md +31 -4
  27. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +294 -0
  28. package/assets/skills/oat-project-quick-start/SKILL.md +50 -2
  29. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +294 -0
  30. package/assets/skills/oat-project-review-provide/SKILL.md +9 -1
  31. package/assets/skills/oat-project-review-receive/SKILL.md +9 -1
  32. package/assets/skills/oat-project-summary/SKILL.md +76 -14
  33. package/assets/templates/summary.md +24 -0
  34. package/dist/commands/gate/index.d.ts.map +1 -1
  35. package/dist/commands/gate/index.js +4 -1
  36. package/dist/commands/init/tools/index.d.ts.map +1 -1
  37. package/dist/commands/init/tools/index.js +67 -45
  38. package/dist/commands/init/tools/shared/skill-manifest.d.ts +1 -1
  39. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  40. package/dist/commands/init/tools/shared/skill-manifest.js +2 -0
  41. package/dist/commands/init/tools/workflows/index.d.ts +2 -1
  42. package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
  43. package/dist/commands/init/tools/workflows/index.js +13 -11
  44. package/dist/commands/init/tools/workflows/install-workflows.d.ts +2 -0
  45. package/dist/commands/init/tools/workflows/install-workflows.d.ts.map +1 -1
  46. package/dist/commands/init/tools/workflows/install-workflows.js +4 -0
  47. package/dist/commands/project/new/scaffold.d.ts +1 -0
  48. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  49. package/dist/commands/project/new/scaffold.js +23 -4
  50. package/dist/commands/tools/remove/index.js +2 -2
  51. package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
  52. package/dist/commands/tools/remove/remove-tools.js +23 -0
  53. package/dist/commands/tools/update/index.d.ts.map +1 -1
  54. package/dist/commands/tools/update/index.js +7 -1
  55. package/dist/commands/tools/update/update-tools.d.ts +9 -0
  56. package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
  57. package/dist/commands/tools/update/update-tools.js +25 -5
  58. package/dist/providers/identity/family.d.ts +1 -1
  59. package/dist/providers/identity/family.d.ts.map +1 -1
  60. package/dist/providers/identity/family.js +2 -0
  61. package/package.json +2 -2
@@ -0,0 +1,318 @@
1
+ ---
2
+ name: oat-cursor-cloud-projects
3
+ version: 1.0.1
4
+ description: Use when OAT work is mentioned in a Cursor Cloud environment. Orients agents to cloud detection, repo-rooted project homes, user-first assets, CLI availability, and Cursor dispatch context without owning lifecycle execution.
5
+ disable-model-invocation: false
6
+ user-invocable: true
7
+ allowed-tools: Read, Write, Bash, Glob, Grep
8
+ ---
9
+
10
+ # OAT in Cursor Cloud
11
+
12
+ Orient OAT work in Cursor Cloud before any project lifecycle skill runs. This
13
+ skill is a harness-layer adapter: it resolves environment and asset context,
14
+ then returns control to the provider-agnostic OAT lifecycle.
15
+
16
+ ## When to Use
17
+
18
+ Use automatically when both are true:
19
+
20
+ - the request involves OAT projects, skills, tools, config, gates, or project
21
+ artifacts; and
22
+ - the current host may be a Cursor Cloud agent.
23
+
24
+ Also use when the user asks how OAT is configured in Cursor Cloud, when multiple
25
+ repositories make project location ambiguous, or before Cursor-specific review
26
+ dispatch.
27
+
28
+ Do not use this skill as the project orchestrator. Explicit autonomous
29
+ end-to-end requests route to `oat-project-autonomous` after orientation.
30
+
31
+ ## Prerequisites
32
+
33
+ - A shell and Node/npm are available.
34
+ - Read `references/cursor-cloud-mechanics.md` only when model-family identity,
35
+ dispatch-surface catalogs, or degraded review evidence is needed.
36
+
37
+ ## Mode Assertion
38
+
39
+ **OAT MODE: Cursor Cloud Orientation**
40
+
41
+ **Purpose:** Establish trusted cloud, repository, asset, CLI, and dispatch
42
+ context without taking ownership of a lifecycle phase.
43
+
44
+ **BLOCKED Activities:**
45
+
46
+ - Creating, approximating, or mutating project artifacts when `oat` is missing.
47
+ - Selecting a repo asset over an existing user-scope asset because its version
48
+ is higher.
49
+ - Treating semver comparison as source arbitration.
50
+ - Placing projects in the workspace root, user home, or a cross-repo shared
51
+ directory outside the target repository.
52
+ - Reimplementing provider dispatch mechanics from
53
+ `oat-dispatch-subagents/references/provider-cursor.md`.
54
+ - Assuming one Cursor model catalog is a superset of another.
55
+
56
+ **ALLOWED Activities:**
57
+
58
+ - Detecting Cursor Cloud from environment and run metadata.
59
+ - Resolving the target repository and repo-rooted project home.
60
+ - Resolving user, repo, and bundled asset paths.
61
+ - Verifying or installing the supported OAT CLI.
62
+ - Comparing skill versions as a freshness check.
63
+ - Loading Cursor mechanics and org-layer context skills when relevant.
64
+ - Recording environment anomalies and degraded routes in project learnings.
65
+
66
+ **Self-Correction Protocol:**
67
+
68
+ If you catch yourself:
69
+
70
+ - Reading a repo copy while a user copy exists → STOP and re-read the user copy
71
+ by absolute path.
72
+ - Switching source because the repo semver is higher → STOP, retain the user
73
+ source, log the anomaly, and refresh the user tier.
74
+ - Hand-authoring an OAT artifact because the CLI is unavailable → STOP and
75
+ restore the CLI first.
76
+ - Copying model launch instructions into this skill → STOP and defer to the
77
+ dispatch provider reference.
78
+
79
+ **Recovery:**
80
+
81
+ 1. Re-resolve the target repository and absolute user paths.
82
+ 2. Record any stale-tier or unavailable-surface anomaly.
83
+ 3. Return to the lifecycle skill with the corrected context, or stop when
84
+ freshness/CLI integrity cannot be restored.
85
+
86
+ ## Progress Indicators (User-Facing)
87
+
88
+ Print this banner once when orientation performs work:
89
+
90
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
91
+ OAT ▸ CURSOR CLOUD ORIENTATION
92
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
93
+
94
+ Print each indicator only when that step starts:
95
+
96
+ - `[1/5] Detecting Cursor Cloud context…`
97
+ - `[2/5] Verifying the OAT CLI…`
98
+ - `[3/5] Resolving the target repository and project home…`
99
+ - `[4/5] Selecting user-first OAT assets…`
100
+ - `[5/5] Loading required harness and context guidance…`
101
+
102
+ ## Process
103
+
104
+ ### Step 0: Detect Cursor Cloud
105
+
106
+ Treat positive run metadata as authoritative. When the `cursor-cloud` MCP is
107
+ available, call `run-info`; use `environment-info` when repository layout,
108
+ environment provenance, or setup status matters.
109
+
110
+ Environment markers are deterministic supporting evidence:
111
+
112
+ - `CURSOR_AGENT=1`;
113
+ - `CURSOR_CONVERSATION_ID` beginning with `bc-`;
114
+ - `AWS_PROFILE=cursor-cloud-agent`;
115
+ - `HOSTNAME=cursor`.
116
+
117
+ One strong marker or positive MCP metadata is sufficient to apply this
118
+ orientation. Record which signal resolved the context. If no signal is present,
119
+ return control without imposing Cursor-specific guidance.
120
+
121
+ Do not infer model family from self-report. When dispatch identity is needed,
122
+ follow `references/cursor-cloud-mechanics.md`.
123
+
124
+ ### Step 1: Verify the OAT CLI
125
+
126
+ Before reading or changing OAT project state:
127
+
128
+ ```bash
129
+ if command -v oat >/dev/null 2>&1; then
130
+ oat --version
131
+ else
132
+ npm install -g @open-agent-toolkit/cli@latest
133
+ oat --version
134
+ fi
135
+ ```
136
+
137
+ If installation fails, report the exact non-secret error and stop OAT artifact
138
+ work. Never approximate `oat project new`, state transitions, templates,
139
+ manifest behavior, or configured gates manually.
140
+
141
+ An OAT source checkout may use its repository-supported source CLI command for
142
+ development verification, but that does not prove the globally installed CLI
143
+ is ready for unrelated repositories.
144
+
145
+ ### Step 2: Resolve Repository and Project Home
146
+
147
+ First identify the repository that owns the requested product/code change.
148
+ Projects always live under that repository's configured OAT projects root.
149
+
150
+ Resolve from the target repository:
151
+
152
+ ```bash
153
+ PROJECTS_ROOT="${OAT_PROJECTS_ROOT:-$(oat config get projects.root 2>/dev/null || echo ".oat/projects/shared")}"
154
+ PROJECTS_ROOT="${PROJECTS_ROOT%/}"
155
+ PROJECT_PATH=$(oat config get activeProject 2>/dev/null || true)
156
+ ```
157
+
158
+ Rules:
159
+
160
+ - **Single-repo workspace:** the sole target repository owns `.oat/`, local
161
+ config, project artifacts, commits, and PRs.
162
+ - **Multi-repo workspace:** choose the repository whose code and branch own the
163
+ primary objective. Resolve its local config from that repo, not from the
164
+ workspace parent or whichever repo happened to be the shell's first cwd.
165
+ - **Cross-repo objective:** anchor the OAT project in one explicitly selected
166
+ primary repository. Record secondary repositories and their write/commit
167
+ boundaries in the project plan; never create a workspace-level project home.
168
+
169
+ If repository ownership is ambiguous and choosing would alter branch, PR, or
170
+ artifact ownership, stop for explicit direction. Once resolved, run lifecycle
171
+ commands from the target repository or pass their supported project path.
172
+
173
+ ### Step 3: Resolve Assets with User Scope First
174
+
175
+ Apply one source order independently to every asset file:
176
+
177
+ 1. user scope;
178
+ 2. target-repository scope when the user asset is absent;
179
+ 3. bundled CLI asset when both installed tiers are absent.
180
+
181
+ User locations:
182
+
183
+ | Asset | User source |
184
+ | -------- | --------------------------- |
185
+ | Skill | `~/.agents/skills/<skill>/` |
186
+ | Template | `~/.oat/templates/<file>` |
187
+ | Script | `~/.oat/scripts/<file>` |
188
+
189
+ Repository locations are `.agents/skills/`, `.oat/templates/`, and
190
+ `.oat/scripts/` within the target repository.
191
+
192
+ The user tier is provisioned from `@latest` at environment boot and is the
193
+ canonical execution tier. Repository copies in this fleet are not customized;
194
+ a difference indicates staleness, not a local override.
195
+
196
+ #### Absolute-path loading contract
197
+
198
+ The p02-t01 environment probe proved OAT-level discovery of
199
+ `~/.agents/skills/` but could not verify fresh Cursor model auto-surfacing.
200
+ Therefore, resolve and read the selected user asset by absolute path as the
201
+ **primary mechanism**:
202
+
203
+ ```bash
204
+ USER_SKILLS_ROOT="${HOME}/.agents/skills"
205
+ USER_TEMPLATES_ROOT="${HOME}/.oat/templates"
206
+ USER_SCRIPTS_ROOT="${HOME}/.oat/scripts"
207
+ ```
208
+
209
+ Do not rely on ambient skill discovery or a provider hot reload for
210
+ correctness. Auto-surfacing is a convenience only.
211
+
212
+ #### Skill version verification
213
+
214
+ When both user and repo copies of a skill exist, compare their frontmatter
215
+ `version:` values. This check verifies the expected invariant:
216
+
217
+ ```text
218
+ user version >= repo version
219
+ ```
220
+
221
+ It never chooses the source:
222
+
223
+ - user version equal to or higher than repo → read the user copy;
224
+ - repo version higher than user → still read the user copy, append an anomaly
225
+ to `oat-execution-learnings.md`, and flag the user tier for refresh with
226
+ `oat tools update` or an environment rebuild;
227
+ - if freshness is safety-critical, refresh and re-verify before continuing;
228
+ stop if the user tier cannot be refreshed safely.
229
+
230
+ Never silently switch to the repo copy. Apply per-file precedence to templates
231
+ and scripts without using skill semver as their arbitration mechanism.
232
+
233
+ ### Step 4: Load Cursor Dispatch Context When Needed
234
+
235
+ For Cursor review/worker dispatch:
236
+
237
+ 1. Read `references/cursor-cloud-mechanics.md`.
238
+ 2. Resolve and read the selected user-scope
239
+ `oat-dispatch-subagents/references/provider-cursor.md` by absolute path,
240
+ falling back to repo/bundled tiers only when the user skill is absent.
241
+ 3. Let `oat-project-dispatch-subagents` adapt lifecycle scope and policy.
242
+ 4. Let `oat-dispatch-subagents` own capability, catalog, route, launch,
243
+ recovery, and generic evidence.
244
+
245
+ This skill supplies identity and catalog context only. Do not restate or alter
246
+ the provider dispatch algorithm.
247
+
248
+ ### Step 5: Surface Adjacent Skills and Record Degradation
249
+
250
+ - If the user explicitly requested goal-to-PR or resume-to-PR autonomy, load
251
+ `oat-project-autonomous` from the selected user-first source.
252
+ - Discover context/research skills supplied by the active organization or
253
+ environment when integrated systems require them. Do not hard-depend on,
254
+ name, or emulate an absent org layer.
255
+ - When an expected skill, MCP server, CLI surface, or credential is absent,
256
+ record the gap in the active project's `oat-execution-learnings.md`. Continue
257
+ only through a documented integrity-preserving route.
258
+
259
+ Return an orientation summary:
260
+
261
+ ```text
262
+ Cursor Cloud: {detected | not detected} via {signal}
263
+ Target repository: {absolute path}
264
+ Projects root: {repo-relative or absolute configured path}
265
+ Active project: {path | none}
266
+ OAT CLI: {version | blocked}
267
+ Asset tier: user-first; absolute-path loading primary
268
+ Freshness: {verified | anomaly logged | refresh required}
269
+ Dispatch context: {not needed | mechanics loaded}
270
+ ```
271
+
272
+ ## Examples
273
+
274
+ ### Basic Usage
275
+
276
+ ```text
277
+ /oat-cursor-cloud-projects
278
+ ```
279
+
280
+ ### Conversational
281
+
282
+ ```text
283
+ I need to continue an OAT project in this Cursor Cloud workspace.
284
+ ```
285
+
286
+ ```text
287
+ Which OAT skill and template copies should this cloud agent use?
288
+ ```
289
+
290
+ ## Troubleshooting
291
+
292
+ **Multiple repositories contain `.oat/`:** Resolve the repository that owns the
293
+ change and branch. Do not select by lexical order or create a workspace-level
294
+ project.
295
+
296
+ **User skill is older than repo skill:** Keep the user skill as source, log the
297
+ anomaly, run `oat tools update` or rebuild the environment, and block
298
+ safety-critical work until freshness is restored.
299
+
300
+ **Skill does not auto-surface:** Read its user-scope `SKILL.md` by absolute path.
301
+ Do not require an agent restart for correctness.
302
+
303
+ **Cursor model names disagree across commands:** Treat each command/tool as a
304
+ separate dispatch surface and snapshot its current catalog. See
305
+ `references/cursor-cloud-mechanics.md`.
306
+
307
+ ## Success Criteria
308
+
309
+ - ✅ Cursor Cloud context was resolved from metadata or deterministic markers.
310
+ - ✅ `oat` was verified before project artifact work.
311
+ - ✅ The project home is anchored inside the target repository in both single-
312
+ and multi-repo environments.
313
+ - ✅ Existing user assets won independently for skills, templates, and scripts.
314
+ - ✅ Skill version comparison verified freshness without changing source.
315
+ - ✅ User assets were read by absolute path as the primary mechanism.
316
+ - ✅ Cursor dispatch mechanics remained delegated to the canonical provider
317
+ reference.
318
+ - ✅ Missing surfaces and freshness anomalies were recorded rather than hidden.
@@ -0,0 +1,173 @@
1
+ # Cursor Cloud Mechanics
2
+
3
+ Load this reference only when Cursor-specific model-family identity, dispatch
4
+ catalog evidence, or degraded review provenance is needed. It supplies context
5
+ to the dispatch substrate; it does not define launch or recovery mechanics.
6
+
7
+ ## Deterministic Producer Family
8
+
9
+ Never ask a model to identify its own family. Self-report is not dispatch
10
+ evidence.
11
+
12
+ Resolve identity in this order:
13
+
14
+ 1. Call the `cursor-cloud` MCP `run-info` tool for the current run.
15
+ 2. Read `originalModelName` from the returned run metadata.
16
+ 3. Preserve the exact slug as producer identity evidence.
17
+ 4. Normalize a lowercase copy only for family classification.
18
+ 5. Map the normalized value with the ordered rules below.
19
+
20
+ | Match, in order | Family |
21
+ | --------------------------------------------------------------------- | ---------- |
22
+ | contains `claude` or `anthropic` | `claude` |
23
+ | contains `gpt`, `openai`, `codex`, or an OpenAI reasoning-series slug | `openai` |
24
+ | contains `grok` or `xai` | `xai` |
25
+ | contains `composer` | `composer` |
26
+ | contains `glm` | `glm` |
27
+ | no rule matches | `unknown` |
28
+
29
+ Match Grok/xAI before interpreting any generic `cursor-` prefix. For example,
30
+ `cursor-grok-4.5-high` is family `xai`, not family `cursor` or `unknown`.
31
+
32
+ If `run-info` is unavailable or omits `originalModelName`, record producer
33
+ family as `unknown` with the missing evidence. Do not substitute conversational
34
+ self-report, a guessed family, or a model name observed in a different run.
35
+ Blocking cross-family review must fail closed when the owning review contract
36
+ cannot preserve its independence requirement.
37
+
38
+ Use `environment-info` for environment/version provenance and repository setup,
39
+ not as a replacement for current-run model identity unless it explicitly
40
+ contains the same authoritative run field.
41
+
42
+ ## Per-Surface Catalog Rule
43
+
44
+ Treat every Cursor dispatch surface as a distinct curated catalog with its own
45
+ names and availability:
46
+
47
+ 1. Cursor Cloud native Task/subagent surface.
48
+ 2. Cursor IDE native agent surface.
49
+ 3. Cursor CLI subagent model enum.
50
+ 4. Cursor CLI full model list.
51
+
52
+ These catalogs cross-cut; they do not form nested supersets. A model available
53
+ on one surface is not evidence that another surface accepts the same slug.
54
+ Aliases and effort suffixes are opaque per surface.
55
+
56
+ Verified snapshot on 2026-07-13:
57
+
58
+ - the Cursor Cloud native surface included a Sol `xhigh` selector and did not
59
+ expose the corresponding Sol `max` selector;
60
+ - the Cursor CLI subagent enum exposed the Sol `max` selector and not that
61
+ native `xhigh` selector.
62
+
63
+ This snapshot documents the divergence; it is not a permanent allowlist.
64
+ Provisioning the CLI adds a differently shaped surface so cloud-native and CLI
65
+ routes together can reach their union. It does not make either individual
66
+ catalog authoritative for the other.
67
+
68
+ Before every dispatch:
69
+
70
+ 1. Identify the exact surface that will accept the launch.
71
+ 2. Snapshot that surface's current catalog from its own tool schema, enum, or
72
+ list command.
73
+ 3. Record source, observation time, and exact candidate strings.
74
+ 4. Intersect only that snapshot with the already-resolved policy candidates.
75
+ 5. Pass the resulting context to `oat-dispatch-subagents`.
76
+
77
+ Do not:
78
+
79
+ - reuse a catalog snapshot from another surface;
80
+ - assume a successful main-agent selector is accepted by a subagent enum;
81
+ - rewrite, trim, or translate an opaque model slug;
82
+ - select from a stale design-time list when current catalog evidence exists;
83
+ - fall through to another surface after a launch has been accepted.
84
+
85
+ ## Dispatch Ownership
86
+
87
+ After identity and catalog context are captured, read and follow
88
+ `oat-dispatch-subagents/references/provider-cursor.md` from the user-first asset
89
+ source selected by the orientation skill.
90
+
91
+ That provider reference owns Cursor launch, acceptance, continuation, retry,
92
+ and recovery mechanics. `oat-project-dispatch-subagents` owns lifecycle scope
93
+ and policy adaptation. Do not duplicate those contracts here.
94
+
95
+ ## Degraded Route Evidence
96
+
97
+ Degradation is a pre-launch selection outcome, not a post-accept fallback.
98
+ Record it in the canonical dispatch record plus project learnings.
99
+
100
+ Use this shape for the Cursor-specific evidence supplied to the generic record:
101
+
102
+ ```yaml
103
+ producer_identity:
104
+ source: cursor-cloud.run-info.originalModelName
105
+ exact_model: gpt-5.6-sol-xhigh
106
+ family: openai
107
+ dispatch_surface:
108
+ name: cursor-cloud-native
109
+ catalog_snapshot:
110
+ source: tool-schema
111
+ observed_at: 2026-07-13T21:00:00Z
112
+ candidates:
113
+ - exact-opaque-selector
114
+ selection:
115
+ selection_source: policy-resolved
116
+ selection_reason: cross-family-candidate-available
117
+ selected_target: exact-opaque-selector
118
+ independence:
119
+ achieved: cross-family-and-context
120
+ producer_family: openai
121
+ reviewer_family: claude
122
+ family_independent: true
123
+ context_independent: true
124
+ degradation:
125
+ present: false
126
+ reason: null
127
+ dispatch_record: dispatch-unique-id
128
+ learnings_entry: null
129
+ ```
130
+
131
+ Allowed `independence.achieved` values:
132
+
133
+ - `cross-family-and-context`;
134
+ - `same-family-context-independent`;
135
+ - `context-only`;
136
+ - `none`.
137
+
138
+ When no second family is dispatchable but the owning non-blocking review
139
+ contract allows same-family review:
140
+
141
+ ```yaml
142
+ selection:
143
+ selection_source: policy-resolved
144
+ selection_reason: no-cross-family-candidate-on-selected-surface
145
+ independence:
146
+ achieved: same-family-context-independent
147
+ family_independent: false
148
+ context_independent: true
149
+ degradation:
150
+ present: true
151
+ reason: catalog-contained-one-dispatchable-family
152
+ learnings_entry: oat-execution-learnings.md#<entry>
153
+ ```
154
+
155
+ Include the exact configured invocation evidence required by the generic record
156
+ schema. Keep runtime confirmation separate and non-authoritative. Never record
157
+ credentials or secret values.
158
+
159
+ For a blocking review, `none` is not an acceptable achieved independence level.
160
+ If no route meets the owning contract, emit a boundary record rather than
161
+ claiming degraded success.
162
+
163
+ ## Accepted-Launch Terminality
164
+
165
+ Catalog divergence is resolved before launch. Once a launch is accepted, that
166
+ route is terminal:
167
+
168
+ - continue or retry only through the accepted handle and identical payload as
169
+ permitted by the dispatch engine;
170
+ - after bounded recovery, record the terminal blocker;
171
+ - never reinterpret another catalog as a runtime fallback;
172
+ - never launch a cheaper or differently shaped target to replace an accepted
173
+ route.