@open-agent-toolkit/cli 0.1.74 → 0.2.0

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 (77) hide show
  1. package/assets/docs/cli-utilities/configuration.md +18 -12
  2. package/assets/docs/cli-utilities/tool-packs.md +1 -1
  3. package/assets/docs/provider-sync/commands.md +26 -0
  4. package/assets/docs/provider-sync/config.md +17 -6
  5. package/assets/docs/provider-sync/index.md +17 -5
  6. package/assets/docs/provider-sync/manifest-and-drift.md +39 -1
  7. package/assets/docs/provider-sync/providers.md +8 -2
  8. package/assets/docs/provider-sync/scope-and-surface.md +5 -1
  9. package/assets/docs/reference/file-locations.md +9 -3
  10. package/assets/docs/reference/oat-directory-structure.md +11 -3
  11. package/assets/docs/reference/troubleshooting.md +11 -0
  12. package/assets/docs/workflows/index.md +1 -0
  13. package/assets/docs/workflows/skills/index.md +3 -0
  14. package/assets/docs/workflows/wave-workflows.md +77 -0
  15. package/assets/public-package-versions.json +4 -4
  16. package/assets/skills/create-agnostic-skill/SKILL.md +1 -1
  17. package/assets/skills/create-agnostic-skill/references/docs/skills-guide.md +24 -15
  18. package/assets/skills/oat-agent-instructions-analyze/references/docs/provider-reference.md +9 -3
  19. package/assets/skills/oat-agent-instructions-apply/references/docs/provider-reference.md +9 -3
  20. package/assets/skills/oat-wave-execute/SKILL.md +317 -0
  21. package/assets/skills/oat-wave-execute/assets/orchestration-log-template.md +54 -0
  22. package/assets/skills/oat-wave-execute/assets/wrapper-plan-template.md +157 -0
  23. package/assets/skills/oat-wave-execute/scripts/bootstrap-group.sh +195 -0
  24. package/assets/skills/oat-wave-program/SKILL.md +109 -0
  25. package/assets/skills/oat-wave-program/assets/execution-program-template.md +40 -0
  26. package/dist/commands/config/index.d.ts.map +1 -1
  27. package/dist/commands/config/index.js +55 -0
  28. package/dist/commands/init/index.d.ts +6 -2
  29. package/dist/commands/init/index.d.ts.map +1 -1
  30. package/dist/commands/init/index.js +90 -31
  31. package/dist/commands/init/tools/shared/skill-manifest.d.ts +1 -1
  32. package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
  33. package/dist/commands/init/tools/shared/skill-manifest.js +2 -0
  34. package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
  35. package/dist/commands/project/validate-plan/index.js +2 -1
  36. package/dist/commands/project/validate-plan/validate-plan.js +1 -1
  37. package/dist/commands/remove/skill/remove-skill.d.ts +2 -0
  38. package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
  39. package/dist/commands/remove/skill/remove-skill.js +20 -2
  40. package/dist/commands/shared/adopt-stray.d.ts.map +1 -1
  41. package/dist/commands/shared/adopt-stray.js +3 -0
  42. package/dist/commands/shared/cursor-skill-disposition.d.ts +17 -0
  43. package/dist/commands/shared/cursor-skill-disposition.d.ts.map +1 -0
  44. package/dist/commands/shared/cursor-skill-disposition.js +41 -0
  45. package/dist/commands/status/index.d.ts +10 -4
  46. package/dist/commands/status/index.d.ts.map +1 -1
  47. package/dist/commands/status/index.js +99 -31
  48. package/dist/config/oat-config.d.ts +0 -1
  49. package/dist/config/oat-config.d.ts.map +1 -1
  50. package/dist/config/oat-config.js +26 -23
  51. package/dist/config/sync-config.d.ts +6 -2
  52. package/dist/config/sync-config.d.ts.map +1 -1
  53. package/dist/config/sync-config.js +18 -6
  54. package/dist/config/user-sync-config.d.ts +11 -0
  55. package/dist/config/user-sync-config.d.ts.map +1 -0
  56. package/dist/config/user-sync-config.js +61 -0
  57. package/dist/drift/strays.d.ts +1 -1
  58. package/dist/drift/strays.d.ts.map +1 -1
  59. package/dist/drift/strays.js +2 -1
  60. package/dist/engine/compute-plan.d.ts.map +1 -1
  61. package/dist/engine/compute-plan.js +154 -4
  62. package/dist/engine/engine.types.d.ts +2 -2
  63. package/dist/engine/engine.types.d.ts.map +1 -1
  64. package/dist/engine/engine.types.js +1 -0
  65. package/dist/engine/execute-plan.d.ts.map +1 -1
  66. package/dist/engine/execute-plan.js +4 -0
  67. package/dist/fs/io.d.ts.map +1 -1
  68. package/dist/fs/io.js +6 -2
  69. package/dist/manifest/manifest.types.d.ts +12 -12
  70. package/dist/providers/cursor/paths.d.ts.map +1 -1
  71. package/dist/providers/cursor/paths.js +6 -4
  72. package/dist/providers/shared/adapter.types.d.ts +6 -0
  73. package/dist/providers/shared/adapter.types.d.ts.map +1 -1
  74. package/dist/providers/shared/adapter.utils.d.ts +2 -1
  75. package/dist/providers/shared/adapter.utils.d.ts.map +1 -1
  76. package/dist/providers/shared/adapter.utils.js +29 -6
  77. package/package.json +2 -2
@@ -2,7 +2,7 @@
2
2
 
3
3
  Agent Skills ecosystem research and notes across providers.
4
4
 
5
- _Last updated: February 2026_
5
+ _Last updated: July 2026_
6
6
 
7
7
  ---
8
8
 
@@ -194,15 +194,20 @@ Legend: ✅ documented support | ⚠️ provider-specific semantics | 💤 ignor
194
194
  **Skill locations:**
195
195
 
196
196
  - Project:
197
+ - `.agents/skills/<skill-name>/SKILL.md` (**portable canonical path**)
197
198
  - `.cursor/skills/<skill-name>/SKILL.md`
198
199
  - `.claude/skills/<skill-name>/SKILL.md` (**Claude compatibility**)
199
200
  - `.codex/skills/<skill-name>/SKILL.md` (**Codex compatibility**)
200
201
  - Personal:
202
+ - `~/.agents/skills/<skill-name>/SKILL.md` (**portable canonical path**)
201
203
  - `~/.cursor/skills/<skill-name>/SKILL.md`
202
204
  - `~/.claude/skills/<skill-name>/SKILL.md` (**Claude compatibility**)
203
205
  - `~/.codex/skills/<skill-name>/SKILL.md` (**Codex compatibility**)
204
206
 
205
- **Notable:** Cursor explicitly reads from `.claude/skills/` and `.codex/skills/` for cross-tool compatibility. This means skills authored in `.claude/skills/` are automatically available in Cursor without symlinking.
207
+ **Notable:** Cursor reads `.agents/skills/` natively at project and user scope, so
208
+ portable canonical skills need no Cursor mirror. `.cursor/skills/` remains a
209
+ supported home for Cursor-only skills. Cursor also reads `.claude/skills/` and
210
+ `.codex/skills/` for compatibility.
206
211
 
207
212
  **Documented frontmatter fields:**
208
213
 
@@ -341,13 +346,13 @@ Installs skills from GitHub repos, local paths, or GitLab URLs to any supported
341
346
  Author skills in `.agents/skills/` (canonical) and distribute to provider-specific directories:
342
347
 
343
348
  ```bash
344
- # Claude Code + Cursor (Cursor reads .claude/skills/ natively)
349
+ # Claude Code
345
350
  ln -s ../../.agents/skills/my-skill .claude/skills/my-skill
346
351
 
347
352
  # GitHub Copilot
348
353
  ln -s ../../.agents/skills/my-skill .github/skills/my-skill
349
354
 
350
- # Codex reads .agents/skills/ natively at project level — no symlink needed
355
+ # Cursor, Codex, and Gemini read .agents/skills/ natively — no symlink needed
351
356
  ```
352
357
 
353
358
  For automated distribution, use **OAT sync** (for local/internal skills) or **`npx skills add`** (for remote/community skills):
@@ -360,9 +365,11 @@ oat sync --scope all
360
365
  npx skills add github-user/skill-repo -a claude-code -a github-copilot
361
366
  ```
362
367
 
363
- **Result: one canonical source, two symlinks, four tools.**
368
+ **Result: one canonical source, two symlinks, five tools.**
364
369
 
365
- **Note:** Cursor already reads `.claude/skills/` natively, so the Claude Code symlink covers both. Codex reads `.agents/skills/` at project level (per Vercel skills docs), eliminating its symlink entirely.
370
+ **Note:** Cursor, Codex, and Gemini read `.agents/skills/` directly at project
371
+ and user scope. Keep `.cursor/skills/` for intentionally Cursor-only skills,
372
+ not as a generated mirror of canonical content.
366
373
 
367
374
  ---
368
375
 
@@ -516,31 +523,33 @@ The proposal has community interest but no official timeline or maintainer respo
516
523
 
517
524
  **Source:** https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices, https://github.com/agentskills/agentskills/tree/main/skills-ref
518
525
 
519
- ### Q: Cursor reads `.claude/skills/` natively does this make `.agents/skills/` + symlinks unnecessary?
526
+ ### Q: Does Cursor's native `.agents/skills/` support eliminate all provider views?
520
527
 
521
- **Answer:** No. While Cursor reading `.claude/skills/` is convenient, it only covers two of four required tools:
528
+ **Answer:** No. Cursor, Codex, and Gemini need no skill mirror, but Claude Code
529
+ and GitHub Copilot still use provider-specific paths:
522
530
 
523
531
  | Tool | Native Path | Reads `.claude/skills/`? | Reads `.agents/skills/`? |
524
532
  | -------------- | ----------------- | ------------------------ | ------------------------ |
525
533
  | Claude Code | `.claude/skills/` | ✅ (native) | ❌ |
526
- | Cursor | `.cursor/skills/` | ✅ (cross-compat) | |
534
+ | Cursor | `.agents/skills/` | ✅ (compatibility) | ✅ (native) |
527
535
  | Codex CLI | `.agents/skills/` | ❌ | ✅ (native) |
528
- | GitHub Copilot | `.github/skills/` | ✅ (cross-compat) | ❌ |
529
- | Gemini CLI | `.gemini/skills/` | ❌ | ✅ (native alias) |
536
+ | GitHub Copilot | `.github/skills/` | ✅ (compatibility) | ❌ |
537
+ | Gemini CLI | `.agents/skills/` | ❌ | ✅ (native alias) |
530
538
 
531
539
  **Recommended approach:** Author skills in `.agents/skills/` (tool-agnostic canonical source), then symlink only where needed:
532
540
 
533
541
  ```bash
534
542
  # Two symlinks needed:
535
- ln -s ../../.agents/skills/my-skill .claude/skills/my-skill # Claude Code + Cursor + Copilot
543
+ ln -s ../../.agents/skills/my-skill .claude/skills/my-skill # Claude Code + Copilot compatibility
536
544
  ln -s ../../.agents/skills/my-skill .github/skills/my-skill # GitHub Copilot (native path)
537
- # Codex reads .agents/skills/ natively — no symlink needed
538
- # Gemini reads .agents/skills/ natively — no symlink needed
545
+ # Cursor, Codex, and Gemini read .agents/skills/ natively — no symlink needed
539
546
  ```
540
547
 
541
548
  **One canonical source, two symlinks, five tools.** (Copilot reads `.claude/skills/` cross-compat, so the `.github/skills` symlink is optional but recommended for explicitness.)
542
549
 
543
- **Note (updated Feb 2026):** Codex now reads `.agents/skills/` natively at both project level (`$CWD/.agents/skills` up to `$REPO_ROOT/.agents/skills`) and user level (`$HOME/.agents/skills`). Gemini CLI also reads `.agents/skills/` natively at both workspace and user scopes. No symlinks needed for Codex or Gemini at any scope.
550
+ **Note (updated July 2026):** Cursor, Codex, and Gemini read
551
+ `.agents/skills/` natively at project and user scope. No skill symlinks are
552
+ needed for those providers.
544
553
 
545
554
  **Source:** https://cursor.com/docs/context/skills, https://code.visualstudio.com/docs/copilot/customization/agent-skills, https://developers.openai.com/codex/skills, https://github.com/vercel-labs/skills
546
555
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Quick reference for skills, subagents, hooks, and agent instructions across all major AI coding tools.
4
4
 
5
- _Last updated: February 2026_
5
+ _Last updated: July 2026_
6
6
 
7
7
  ---
8
8
 
@@ -144,11 +144,17 @@ The package manager for the agent skills ecosystem. Installs skills across 27+ a
144
144
 
145
145
  **Skill locations:**
146
146
 
147
- - Project: `.cursor/skills/<skill-name>/SKILL.md`
148
- - Personal: `~/.cursor/skills/<skill-name>/SKILL.md`
147
+ - **Portable project skills:** `.agents/skills/<skill-name>/SKILL.md`
148
+ - **Portable personal skills:** `~/.agents/skills/<skill-name>/SKILL.md`
149
+ - **Cursor-only project skills:** `.cursor/skills/<skill-name>/SKILL.md`
150
+ - **Cursor-only personal skills:** `~/.cursor/skills/<skill-name>/SKILL.md`
149
151
  - **Claude compatibility:** `.claude/skills/` (project) and `~/.claude/skills/` (personal)
150
152
  - **Codex compatibility:** `.codex/skills/` (project) and `~/.codex/skills/` (personal)
151
153
 
154
+ OAT keeps portable skills canonical under `.agents/skills`; it does not
155
+ generate `.cursor/skills` mirrors. Cursor-specific skill directories remain
156
+ supported as intentional local extensions and migration sources.
157
+
152
158
  ### Subagents
153
159
 
154
160
  | Resource | URL |
@@ -2,7 +2,7 @@
2
2
 
3
3
  Quick reference for skills, subagents, hooks, and agent instructions across all major AI coding tools.
4
4
 
5
- _Last updated: February 2026_
5
+ _Last updated: July 2026_
6
6
 
7
7
  ---
8
8
 
@@ -144,11 +144,17 @@ The package manager for the agent skills ecosystem. Installs skills across 27+ a
144
144
 
145
145
  **Skill locations:**
146
146
 
147
- - Project: `.cursor/skills/<skill-name>/SKILL.md`
148
- - Personal: `~/.cursor/skills/<skill-name>/SKILL.md`
147
+ - **Portable project skills:** `.agents/skills/<skill-name>/SKILL.md`
148
+ - **Portable personal skills:** `~/.agents/skills/<skill-name>/SKILL.md`
149
+ - **Cursor-only project skills:** `.cursor/skills/<skill-name>/SKILL.md`
150
+ - **Cursor-only personal skills:** `~/.cursor/skills/<skill-name>/SKILL.md`
149
151
  - **Claude compatibility:** `.claude/skills/` (project) and `~/.claude/skills/` (personal)
150
152
  - **Codex compatibility:** `.codex/skills/` (project) and `~/.codex/skills/` (personal)
151
153
 
154
+ OAT keeps portable skills canonical under `.agents/skills`; it does not
155
+ generate `.cursor/skills` mirrors. Cursor-specific skill directories remain
156
+ supported as intentional local extensions and migration sources.
157
+
152
158
  ### Subagents
153
159
 
154
160
  | Resource | URL |
@@ -0,0 +1,317 @@
1
+ ---
2
+ name: oat-wave-execute
3
+ version: 1.5.0
4
+ description: Use when executing a wave of external implementation plans as a wrapper OAT project — scaffolding, drift refresh, parallel worktree groups, briefs, gates, merge choreography, and closeout.
5
+ argument-hint: '<wave-id> [plan-names...] (e.g. wave-2 http-listener-before-indexing ...)'
6
+ disable-model-invocation: false
7
+ user-invocable: true
8
+ allowed-tools: Read, Write, Edit, Bash, Grep, Glob, Task
9
+ ---
10
+
11
+ # Execute a Wave of External Plans
12
+
13
+ Run one **wave** of the external-plan program as a wrapper OAT project. This skill
14
+ owns the **mechanical layer** — everything that waves 0–1 proved stable and that
15
+ hand-re-derivation repeatedly broke. It deliberately does NOT own judgment.
16
+
17
+ Provenance: extracted per `DR-260713-extract-oat-wave-execute` after the source
18
+ program's waves 0–1 and hardened across its waves 2–5.
19
+
20
+ Log every friction/deviation to the project's `orchestration-log.md` so later
21
+ waves inherit evidence, not anecdotes.
22
+
23
+ Historical `DR-*` and `BL-*` slugs in this skill (including the provenance
24
+ record above) are evidence citations in the source program's repository; they
25
+ are not required artifacts in the consuming repo.
26
+
27
+ ## Ownership Boundary
28
+
29
+ **This skill owns (mechanical):** integration/phase branch naming, worktree
30
+ bootstrap, wave-boundary drift refresh, wrapper-project scaffold (from the bundled
31
+ templates), brief templates, gate-prompt template + scaling, merge choreography,
32
+ bookkeeping cadence, closeout sequence.
33
+
34
+ **The orchestrator owns (judgment — never delegate to this skill or to workers):**
35
+ parallel-group composition from live recon evidence, review-finding dispositions,
36
+ verification of load-bearing worker claims, merge-order decisions under live drift,
37
+ cross-lane synthesis, the end-of-run synthesis, and all user checkpoints.
38
+
39
+ ## Standing Rules (violations caused every wave-1 incident)
40
+
41
+ 1. **Branch naming:** integration branch `wave-N-execution`; phase branches
42
+ `wave-N/pNN`. Phase branches MUST NOT nest under the integration branch name
43
+ (git refs cannot be both leaf and directory).
44
+ 2. **Merge commits use a conventional type:** `chore(pNN): merge wave-N/pNN — <lane> (review passed)`.
45
+ Bare `merge(...)` fails commitlint. Keep headers ≤ 100 chars.
46
+ 3. **Clean orchestrator tree before group merges** — a dirty unrelated file leaves
47
+ `git merge --no-ff` uncommitted and drags the full hook chain into recovery.
48
+ Gate reviewers now COMMIT their own artifacts (waves 2–3 evidence): keep the
49
+ tree clean around gate runs and expect a gate-authored commit on return.
50
+ 4. **Pre-declare CUMULATIVE churn in every brief:** declarations cover everything
51
+ landed since each source plan's AUTHORED COMMIT (drift checks compare against
52
+ that commit, not the group base), naming files + rough regions. Zero false
53
+ drift-STOPs across 32 consecutive briefed lanes through wave 4
54
+ (DR-260715-cumulative-churn-manifests).
55
+ 5. **Resolve full SHAs with `git rev-parse`** — never hand-expand short SHAs.
56
+ 6. **Gate scope must fit the timeout:** bound wrapper-plan gate reviewers to the
57
+ wrapper artifacts + the drift-refresh record (not all N source plans), or raise
58
+ the gate timeout. On a gate timeout, check the project `reviews/` directory for
59
+ a completed artifact carrying the gate `runId` BEFORE re-running. For larger
60
+ waves (~6+ lanes), prefer per-phase gates over one monolithic final gate; if a
61
+ final gate must cover the whole wave, scope its prompt to the integration
62
+ diff plus the review-chain artifacts, not a re-review of every lane.
63
+ 7. **Guard every formatter-ignored-file × staged-glob interaction:** a
64
+ single-glob staged-file task can fail when every matched file is ignored by
65
+ the repo's formatter. Audit every glob task and pair canonical-file
66
+ exclusions with the staged-task's matching ignore filter (source-program
67
+ example: oxfmt exited non-zero for ignored `*.md`/`*.json`, requiring both
68
+ `.oxfmtrc.json` `ignorePatterns` and `.lintstagedrc.mjs` filtering).
69
+ 8. **Gate timeout diagnostics** (the upstream stdin-hang fix landed in oat
70
+ 0.1.65 — gate children now get `stdin: 'ignore'`; the historical
71
+ `< /dev/null` workaround is retired and harmless if still present):
72
+ timeout + ZERO output bytes = launch defect (do not spend remediation
73
+ attempts re-running unchanged); timeout + a complete artifact = late
74
+ completion (recover the artifact by `runId` per rule 6). Verify the CLI is
75
+ ≥0.1.65 (`oat --version`) before dropping the workaround on a new host.
76
+ 9. **Verified bookkeeping edits** (`DR-260713-bookkeeping-table-mutations`):
77
+ never mutate plan/implementation status tables with exact-string replacement —
78
+ oxfmt re-padding makes it silently no-op. Use anchored regex + a substitution
79
+ count assertion + a post-state grep, every time. This discipline caught its
80
+ own subsequent no-ops twice in wave 2; treat an assert failure as normal
81
+ operation, not an incident.
82
+ 10. **Integration gates after every fan-in:** they are the only detector for
83
+ cumulative-timing defect classes. Never skip them because every lane passed
84
+ independently; the wave-5 embed-teardown defect was caught only after fan-in.
85
+
86
+ Plus inherited invariants: commit-verification via `git log` before retrying after
87
+ any ambiguous hook outcome; every agent runs the repo's formatter on markdown it
88
+ writes; follow the repo's runtime/environment setup before package commands;
89
+ repair native-dependency ABI mismatches using the repo's documented rebuild
90
+ procedure; rebuild edited workspace-package output before running consumer tests
91
+ (stale output mimics real failures). Source-program examples were `pnpm
92
+ format:fix`, `nvm use`, and `pnpm rebuild -r better-sqlite3` on
93
+ `NODE_MODULE_VERSION` errors.
94
+
95
+ ## Inputs
96
+
97
+ - `<wave-id>` — e.g. `wave-2`. Derives project `wave-N-execution`, branches per
98
+ rule 1.
99
+ - Lane list: resolve from the live execution-program artifact
100
+ (`.oat/repo/reference/external-plans/*-execution-program.md`, owned by
101
+ `oat-wave-program`); fall back to the plan indexes' wave hints only when no
102
+ program artifact exists. Verify every named plan file exists before
103
+ scaffolding; a missing file is a STOP (report, don't guess).
104
+ - Concurrency ceiling: default **3** worktrees (operator-set; revisit per wave).
105
+
106
+ ## Process
107
+
108
+ ### Step 1: Preflight
109
+
110
+ 1. From the repo root on up-to-date `main`: `git checkout -b wave-N-execution`.
111
+ 2. Follow the repo's runtime/environment setup, install dependencies, and run
112
+ its build/type baseline gates (source-program example: `nvm use && pnpm
113
+ install --frozen-lockfile`, rebuild `better-sqlite3` if Node changed, then
114
+ `pnpm build && pnpm type-check`).
115
+ 3. Record `BASE_SHA=$(git rev-parse HEAD)`.
116
+
117
+ ### Step 2: Wave-boundary drift refresh (recon dispatch)
118
+
119
+ Dispatch ONE economical recon subagent (read-only) over all wave plans:
120
+
121
+ - Re-run each plan's `## Drift check` against `BASE_SHA`; classify
122
+ PASS / MINOR-DRIFT (describe) / STOP (quote the plan's own condition + evidence).
123
+ - AUDIT each plan's drift-check FILE COVERAGE against its stated scope: a plan
124
+ whose implementation surface includes files its drift-check command omits gets
125
+ a wrapper rule-1 addendum (wave-2 p07 precedent — the gap became a mandatory
126
+ in-worktree extension and the anticipated conflict never materialized).
127
+ - Extract each plan's COMPLETE write-surface list and mechanically intersect
128
+ every pair — flag every file written by 2+ plans, however minor (this feeds
129
+ group composition; include generated files like `apps/documentation/index.md`
130
+ when plans run docs gates, and CLI/help/parity files that many lanes touch).
131
+ - Return a compact per-plan table + shared-surfaces section. Conclusions only.
132
+
133
+ A tripped STOP parks that lane at plan time (recorded in the wrapper plan; lane
134
+ excluded from groups) — never mid-run. **Reconciliation contract:** when recon
135
+ reveals a stale plan premise, the reconciliation must be NON-NARROWING (WHERE
136
+ the work happens may change; WHAT must be true may not), recorded exactly once
137
+ in the Drift Refresh Record with pointer-only references elsewhere — a
138
+ reconciliation that waives a source-plan requirement is a plan-gate Important
139
+ (wave-4 evidence).
140
+
141
+ ### Step 3: Scaffold the wrapper project
142
+
143
+ 1. `oat project new wave-N-execution --mode quick --no-commit`.
144
+ 2. **Verify scaffold substitution AND advance the lifecycle** in `state.md`.
145
+ On oat ≥0.1.65, verify that the basic scaffold placeholders
146
+ (`{ OAT_HILL_CHECKPOINTS }`, `{ OAT_PHASE }`, `{ OAT_WORKFLOW_MODE }`) were
147
+ already substituted; fix them only if unexpected survivors remain. The
148
+ lifecycle advance and wave-specific values remain orchestrator-owned:
149
+ `oat_dispatch_policy` (managed/high unless the operator says otherwise),
150
+ `associated_issues` (the wave's backlog items),
151
+ **`oat_parallel_execution: true`**, and — once plan.md is written —
152
+ **`oat_phase: plan` + `oat_phase_status: complete`**. Also refresh the
153
+ state.md BODY prose (Status/Current Phase/Artifacts/Progress/Next Milestone)
154
+ — frontmatter alone is not enough; two waves hit body-drift findings.
155
+ 3. Write `plan.md` from `assets/wrapper-plan-template.md` — pointer-only tasks,
156
+ the wrapper execution contract verbatim, drift-refresh record marked
157
+ **non-authoritative recon evidence**, HiLL at the final phase (confirm against
158
+ `workflow.hillCheckpointDefault`). **Template directive hygiene:** the
159
+ templates' `{ curly-brace }` placeholders AND their authoring directives
160
+ (e.g. "Keep both code + artifact rows below") are instantiation instructions —
161
+ substitute/apply them and REMOVE them from the instantiated artifact; a
162
+ surviving directive is reviewer-visible noise (sol wave-2 finding class).
163
+ 4. Write `discovery.md` (inherited contract + this wave's decisions) and
164
+ `orchestration-log.md` from `assets/orchestration-log-template.md` (day one).
165
+ 5. **[JUDGMENT] Compose parallel groups** from the recon write surfaces: groups of
166
+ ≤ ceiling, write-disjoint within a group; shared-file plans in different groups.
167
+ A lane that must run alone (merges-first, or a solo finale) stays UNGROUPED —
168
+ ungrouped phases execute sequentially in plan order, and `validate-plan`
169
+ REJECTS singleton groups. Cross-model review steps on
170
+ locking/security/containment/dependency lanes. Recon must intersect ALL
171
+ per-plan write surfaces mechanically, not just headline files (wave-3 g1
172
+ missed a two-lane CLI-file overlap that merged conflict-free only by region
173
+ luck).
174
+ 6. `oat project validate-plan --project-path <path>`, run the repo's formatter
175
+ over the project dir (source-program example: `pnpm format:fix`), and commit
176
+ the scaffold.
177
+
178
+ ### Step 4: Plan gate
179
+
180
+ Run the cross-runtime artifact gate with a **bounded** prompt (rule 6): review the
181
+ wrapper artifacts for plan invariants, contract consistency, frontmatter validity,
182
+ and whether any task restates/narrows its source plan — the external plans are
183
+ immutable inputs, NOT review targets. Disposition findings in-artifact
184
+ (gate-invoked artifact review), commit, and proceed at `fixes_completed` per
185
+ wave-0/1 precedent.
186
+
187
+ ### Step 5: Execute via `oat-project-implement`
188
+
189
+ The lifecycle skill owns execution. This skill contributes the templates it uses:
190
+
191
+ - **Worktree bootstrap:** run
192
+ `scripts/bootstrap-group.sh <wave-prefix> <BASE_SHA> pNN...` — e.g.
193
+ `scripts/bootstrap-group.sh wave-2 $(git rev-parse HEAD) p01 p02 p03`
194
+ (wraps the `oat-worktree-bootstrap-auto` contract: create at explicit base,
195
+ propagate local config, verify base ancestry, repo bootstrap and
196
+ proportionate baseline via the `OAT_WAVE_BOOTSTRAP_CMD` /
197
+ `OAT_WAVE_BASELINE_CMD` env hooks — a pnpm-shaped repo defaults to
198
+ `pnpm run worktree:init` / `pnpm type-check`, any other repo skips the step
199
+ with a STATUS line — verify provider-view parity with the root checkout,
200
+ structured STATUS lines; as of 1.3.0 the script relocates its
201
+ `.bootstrap-*.log` files into `$TMPDIR` itself).
202
+ When lanes carry provider review steps that require worktree trust, pre-trust
203
+ the new paths using that provider's configuration (for Codex, the
204
+ source-program example is `~/.codex/config.toml`).
205
+ - **Implementer briefs:** self-contained Phase Scope (resolver-stamped dispatch
206
+ fields), the contract pointer ("your ENTIRE contract is <external plan>; nothing
207
+ in the wrapper narrows it"), **region-level expected-churn pre-declaration**
208
+ (rule 4: name the churned file AND the region vs the lane's target region —
209
+ three-for-three effective in wave-2 group 2), env rules, DoD gates before
210
+ commit, one commit per task with the plan's message, bundle STOP semantics
211
+ where applicable (`DR-260713-bundle-stop-semantics-park`), the bookkeeping
212
+ boundary (workers never touch `.oat/projects/`), and the structured PHASE
213
+ REPORT format. Cross-model review steps in briefs name the RUNTIME-RESOLVED
214
+ reviewer (the plan stays provider-neutral; dispatch resolves — currently
215
+ Codex per the source repo's config). Adapt lane-type addenda to the consuming
216
+ repo. Worked source-program examples: "background a previously-inline step"
217
+ lanes budget a full direct-caller audit; new shell scripts honor the repo's
218
+ oldest supported shell; disposal/wiring prefers the framework teardown seam
219
+ (Fastify `onClose` in one lane) over a concurrently restructured file; a
220
+ defaulted schema field (Zod in one lane) budgets type-surface consumer fixes;
221
+ an MCP tool rename moves its expected-tool list, additive snapshot, tool-list
222
+ tests, and version-pin tests together; and time-driven HTTP tests avoid a fake
223
+ clock that freezes the request event loop. These are briefing patterns, not
224
+ requirements for Fastify, vitest, Zod, or MCP.
225
+ - **Reviewer briefs:** read-only, per-phase; checklist = source plan
226
+ `## Review focus`; implementer claims are inputs to VERIFY, not trust.
227
+ Lanes with embedded cross-model reviews get DISPOSITION-VERIFICATION briefs:
228
+ verify each fix and each rejection's parity claim against the cited siblings
229
+ instead of re-reviewing (wave-3 caught a partially-false rejection claim this
230
+ way). Every fix disposition, including a root-verified bounded fix, must
231
+ produce a minimal stored verification record stating what was verified, how
232
+ it was verified, and where the evidence is recorded; the wave-5 final gate
233
+ blocked on exactly this audit gap. For a fix continuation, prefer resuming the
234
+ original implementer handle while it is alive: this is cheaper and retains
235
+ design context. Launch a fresh same-target agent only when that handle is
236
+ gone. Rename/refactor-class revision reviews get a PURITY BAR: diff the
237
+ changed handler bodies against the ORIGINAL at base — tests alone are silent
238
+ on migrated-behavior drift (wave-3 p-rev1 Critical was caught only by this).
239
+ LOGIC-BEARING lanes' reviewers must design ≥1 adversarial probe of their own
240
+ beyond the implementer's pins (DR-260715-adversarial-probe-reviewer: the
241
+ wave-4 overlap-corruption Critical was found ONLY by a reviewer probe —
242
+ every gate and pinned test was green); runtime-
243
+ probe ambiguous behavioral claims; on containment/security surfaces require a
244
+ weaker-anywhere analysis (any input previously rejected that is now accepted is
245
+ Critical). Adapt contract-propagation checks to the lane type; the
246
+ source-program example required a new `DoctorJsonResponse` field to travel with
247
+ diagnostics docs and exact-match doctor JSON tests. Write the artifact to the
248
+ ROOT checkout `reviews/` and run the repo's formatter over it (source-program
249
+ example: `pnpm format:fix`).
250
+ - **Merge choreography:** after all group verdicts — serialized `git merge
251
+ --no-ff` in plan order, rebasing each phase branch on the updated tip first
252
+ (rules 2–3). Immediately before EVERY `git merge`, run `pwd` and
253
+ `git branch --show-current` and assert that they identify the intended repo
254
+ root and integration branch; stop on either mismatch. This closes the
255
+ cwd-persistence wrong-branch failure observed in wave 5. Integration DoD gates
256
+ after fan-in run TO COMPLETION BEFORE any group bookkeeping edits start
257
+ (DR-260714-integration-gates-run-before);
258
+ then the group bookkeeping commit. Before dispatch, inspect every worktree's
259
+ sync commit content and stop on provider-view deletions or unrelated managed
260
+ path churn. This is a **regression guard for the named stale-local-binary
261
+ failure class**: a stale locally resolved `node_modules/.bin/oat` can shadow
262
+ the global CLI and make two desired-state sync versions thrash managed files.
263
+ On any parity mismatch, compare `node_modules/.bin/oat --version` with
264
+ `oat --version`; do not treat it as unexplained toolkit corruption.
265
+ **Conflict-resolution contract
266
+ (DR-260715-conflict-resolution-contract):** on rebase/merge conflicts —
267
+ keep-both where lanes appended to shared surfaces; then in-worktree BUILD +
268
+ touched-package suites BEFORE amending (mechanical splices break seams:
269
+ braces, stacked branches, duplicated keys — wave-4 evidence); then inspect
270
+ the amended commit's file stat against the expected list; NEVER `git add -A`
271
+ in a worktree (stale synced local state gets swept). At every
272
+ merge/bookkeeping boundary, run a standing config-integrity check that tracked
273
+ `.oat/config.json` keys remain present; this check originated with
274
+ `BL-260715-investigate-oat-config-json` in the source program's repo. Update
275
+ canonical sections in place, the run-entry table, review rows, and state;
276
+ remove worktrees + branches after merge.
277
+
278
+ ### Step 6: Closeout
279
+
280
+ Follow `oat-project-implement`'s completion route, plus the wave-specific order.
281
+ Run these steps strictly in this numbered sequence. The load-bearing constraint:
282
+ the end-of-run synthesis and its `summary.md` roll-up MUST come before backlog
283
+ archival and before the project-archive seal (`oat-project-complete`) — never
284
+ archive anything first.
285
+
286
+ 1. **Final verification** — integration DoD gates green on the integration branch.
287
+ 2. **End-of-run synthesis in `orchestration-log.md`, then roll it up into
288
+ `summary.md`** (this is the "before any archive step" gate): convention
289
+ verdicts with evidence, adjustments-as-rules for later waves, graduated-entries
290
+ ledger, rolled into `summary.md` `## Workflow Observations`.
291
+ 3. **Serialized backlog archival** — `oat backlog archive` with real summaries,
292
+ one commit.
293
+ 4. **Root final review.**
294
+ 5. **Cross-runtime final gate** — judgment-sweep dispositions; watch for the known
295
+ gate row-stomp on the final Reviews row (restore `passed` if regressed).
296
+ 6. **Pre-approval sequence** per `workflow.postImplementSequence`, then a single
297
+ HiLL. File follow-up-ledger backlog items at closeout (on main post-merge, or
298
+ pre-gate if the operator prefers them in the PR).
299
+ 7. **`oat-project-complete` BEFORE merge** (standing order: review → complete →
300
+ merge; an open PR is expected, not a blocker — the archive-aware PR body sync
301
+ handles it).
302
+ 8. **After the operator merges:** reconcile (squash-merge means content-diff the
303
+ branch vs main; cherry-pick stragglers), reset the working branch, clean stale
304
+ phase branches, and run `oat-wave-program` `wave-close <wave-id>` so the
305
+ program ledger records the merge (PR, SHA, completion-record link) and flips
306
+ the wave's plan rows to `done`.
307
+
308
+ ## Success Criteria
309
+
310
+ - Zero convention re-derivation errors (branch naming, merge types, SHAs, gate
311
+ scoping — the wave-1 incident class).
312
+ - Every lane: drift check honored, one verified commit per task, review round
313
+ dispositioned, DoD + integration gates green.
314
+ - Orchestration log current at every group boundary; synthesis written before
315
+ archive; follow-up ledger graduated.
316
+ - Deviations from THIS skill logged with a skill-abstraction tag — that is the
317
+ evidence signal for future skill revisions.
@@ -0,0 +1,54 @@
1
+ ---
2
+ oat_generated: false
3
+ purpose: orchestration-observations
4
+ oat_last_updated: { YYYY-MM-DD }
5
+ ---
6
+
7
+ # Orchestration Log: wave-N-execution
8
+
9
+ Running log of orchestration and subagent observations for this project. Two
10
+ audiences: (1) evaluating this wave's execution specifically, and (2) collecting
11
+ general feedback on OAT orchestration/tooling and on the `oat-wave-execute` skill
12
+ itself — bugs, friction, and things that worked well.
13
+
14
+ **Logging contract (for the orchestrator and any lifecycle skill touching this
15
+ project):** append an entry whenever something breaks, surprises, requires a
16
+ workaround, or works notably well. Structural entries (dispatch stamps, gate
17
+ results, STOP/park events, bootstrap statuses, disposition maps) are appended as
18
+ one-liners referencing artifacts by path; judgment entries are agent-authored.
19
+ Never delete entries; strike through with a correction note if one turns out
20
+ wrong. Version-stamp tool-related observations. Keep entries short and factual.
21
+ Run { repo formatter write command } (source-program example: `pnpm format:fix`)
22
+ on this file after writing. Tag entries that bear on the
23
+ wave-skill's design with a **Skill signal (strengthens/contradicts/gap):** line —
24
+ those drive the upstream implementation.
25
+
26
+ **Entry format:**
27
+
28
+ ### YYYY-MM-DD · [project | general] · [bug | friction | worked-well | feedback] · <area>
29
+ What happened (1-3 sentences). Impact/workaround. Follow-up (backlog / upstream / none).
30
+
31
+ **Structural entry format (skill-appended):**
32
+
33
+ ### YYYY-MM-DD · structural · <skill> · <scope>
34
+ One-line mirror of the skill's structured output. Reference artifacts by path.
35
+
36
+ ---
37
+
38
+ ## Entries
39
+
40
+ { appended chronologically, append-only }
41
+
42
+ ---
43
+
44
+ ## End-of-run synthesis (pending — do not skip at project completion)
45
+
46
+ At project completion, BEFORE any archive step, the orchestrator writes:
47
+ (1) verdicts on the conventions this wave exercised, with evidence entries cited;
48
+ (2) a ruling on every "Skill signal"-tagged entry — what the `oat-wave-execute`
49
+ skill should change; (3) adjustments adopted for later waves, stated as rules;
50
+ (4) a graduated-entries ledger (backlog IDs / upstream refs / closed-with-evidence
51
+ / open-with-owner).
52
+
53
+ Roll-up ordering (critical): `summary.md` `## Workflow Observations` and any
54
+ repo-level ledger updates happen BEFORE `oat-project-complete` archives this file.