@open-agent-toolkit/cli 0.2.55 → 0.2.57

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 (52) hide show
  1. package/assets/agents/oat-phase-implementer.md +123 -9
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/cli-utilities/configuration.md +12 -2
  4. package/assets/docs/docs-tooling/commands.md +36 -5
  5. package/assets/docs/reference/oat-directory-structure.md +56 -4
  6. package/assets/docs/workflows/projects/implementation-execution.md +5 -1
  7. package/assets/docs/workflows/skills/explainer-kit.md +8 -5
  8. package/assets/public-package-versions.json +4 -4
  9. package/assets/skills/analyze/SKILL.md +18 -17
  10. package/assets/skills/oat-brainstorm/SKILL.md +2 -2
  11. package/assets/skills/oat-doctor/SKILL.md +49 -36
  12. package/assets/skills/oat-idea-summarize/SKILL.md +2 -2
  13. package/assets/skills/oat-project-autonomous/SKILL.md +17 -10
  14. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +3 -3
  15. package/assets/skills/oat-project-complete/SKILL.md +18 -8
  16. package/assets/skills/oat-project-discover/SKILL.md +3 -3
  17. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +3 -3
  18. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  19. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +12 -3
  20. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +3 -3
  21. package/assets/skills/oat-project-implement/references/phase-execution.md +218 -4
  22. package/assets/skills/oat-project-implement/references/plan-and-resume.md +5 -2
  23. package/assets/skills/oat-project-implement/scripts/capture-dirty-tree.mjs +1069 -0
  24. package/assets/skills/oat-project-import-plan/SKILL.md +12 -6
  25. package/assets/skills/oat-project-next/SKILL.md +7 -5
  26. package/assets/skills/oat-project-plan/SKILL.md +24 -12
  27. package/assets/skills/oat-project-pr-final/SKILL.md +2 -2
  28. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +3 -3
  29. package/assets/skills/oat-project-quick-start/SKILL.md +11 -6
  30. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +3 -3
  31. package/assets/skills/oat-project-retro/SKILL.md +4 -2
  32. package/assets/skills/oat-project-review-receive/SKILL.md +9 -5
  33. package/assets/skills/oat-project-revise/SKILL.md +6 -6
  34. package/dist/commands/config/index.d.ts +1 -0
  35. package/dist/commands/config/index.d.ts.map +1 -1
  36. package/dist/commands/config/index.js +51 -4
  37. package/dist/commands/docs/index-generate/generator.d.ts +43 -1
  38. package/dist/commands/docs/index-generate/generator.d.ts.map +1 -1
  39. package/dist/commands/docs/index-generate/generator.js +169 -3
  40. package/dist/commands/docs/index-generate/index.d.ts +8 -3
  41. package/dist/commands/docs/index-generate/index.d.ts.map +1 -1
  42. package/dist/commands/docs/index-generate/index.js +340 -24
  43. package/dist/commands/docs/init/scaffold.d.ts +11 -1
  44. package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
  45. package/dist/commands/docs/init/scaffold.js +11 -2
  46. package/dist/config/oat-config.d.ts +14 -0
  47. package/dist/config/oat-config.d.ts.map +1 -1
  48. package/dist/config/oat-config.js +61 -0
  49. package/dist/fs/assets.d.ts +33 -4
  50. package/dist/fs/assets.d.ts.map +1 -1
  51. package/dist/fs/assets.js +127 -12
  52. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-implement
3
- version: 2.3.1
3
+ version: 2.3.2
4
4
  description: Use when plan.md is ready for execution. Dispatches one phase implementer per phase, owns independent phase review and bounded fix routing, and supports plan-declared worktree-isolated parallel phases.
5
5
  oat_gateable: true
6
6
  argument-hint: '[--retry-limit <N>] [--dry-run]'
@@ -192,7 +192,9 @@ If `OAT_AUTONOMOUS=1`, do not present a review-execution choice. Resolve the
192
192
  exact reviewer target through the project dispatch substrate, select the
193
193
  highest target-preserving route before launch, and run
194
194
  `oat-project-review-provide code final` followed immediately by
195
- `oat-project-review-receive`.
195
+ `oat-project-review-receive`. Run each of those by loading its current
196
+ `SKILL.md` and following it, or by dispatching a child that carries it; a
197
+ remembered review or receive outcome does not satisfy this step.
196
198
 
197
199
  - If receive creates fix tasks, return through the normal bounded implement and
198
200
  re-review loop.
@@ -240,7 +242,7 @@ REVIEW_MODEL=$(oat config get workflow.reviewExecutionModel 2>/dev/null || true)
240
242
  ```
241
243
 
242
244
  - **If `REVIEW_MODEL` is `subagent`:** Print `Review execution: subagent (from workflow.reviewExecutionModel).` Dispatch the review subagent directly via the Task tool. No prompt.
243
- - **If `REVIEW_MODEL` is `inline`:** Honor it only when the inline route satisfies the verified-equivalent-controls or documented-exception guard. Otherwise use the exact/pinned route or block. When allowed, print `Review execution: inline (from workflow.reviewExecutionModel).` and run the review in-context per `oat-project-review-provide`.
245
+ - **If `REVIEW_MODEL` is `inline`:** Honor it only when the inline route satisfies the verified-equivalent-controls or documented-exception guard. Otherwise use the exact/pinned route or block. When allowed, print `Review execution: inline (from workflow.reviewExecutionModel).` and run the review in-context by loading the current `oat-project-review-provide/SKILL.md` and following it in this context.
244
246
  - **If `REVIEW_MODEL` is `fresh-session`:** This is a **soft preference with escape hatch** because the agent cannot run the review in a fresh session on the user's behalf. Print the guidance block below, then handle the user's response per the three outcomes listed after it.
245
247
  - **If unset or invalid:** Fall through to the standard 3-tier prompt below.
246
248
 
@@ -457,6 +459,8 @@ artifact paths, exact Reviews event identity, and `receive_pre_head` before
457
459
  invoking receive. `receive_correlation` binds the gate run ID, handoff, source
458
460
  artifact, scope, type, and source filename; set `receive_state:
459
461
  intent_persisted` and commit it before calling `oat-project-review-receive`.
462
+ Calling receive means loading the current `oat-project-review-receive/SKILL.md`
463
+ and following it, or dispatching a child that carries it.
460
464
 
461
465
  On normal return or resume from `intent_persisted`, reconcile all three durable
462
466
  receipt components:
@@ -739,7 +743,10 @@ including a partially completed noncanonical order.
739
743
 
740
744
  For every pending `summary`, `document`, `pr`, or `retro`, dispatch respectively
741
745
  `oat-project-summary`, `oat-project-document`, `oat-project-pr-final`, or
742
- `oat-project-retro`. Dispatch `retro` in generate mode; apply and filing
746
+ `oat-project-retro`. Immediately before each of those steps, load that step's
747
+ current `SKILL.md` and follow it, or dispatch a child that carries it; a
748
+ remembered outcome from an earlier run or an ambiently discovered copy does not
749
+ satisfy the step. Dispatch `retro` in generate mode; apply and filing
743
750
  behavior remains config-gated inside that skill. Every `summary`, `document`,
744
751
  `pr`, and `retro` child receives the authoritative snapshot and must merge state
745
752
  updates without replacing `oat_post_implement_sequence`.
@@ -922,6 +929,8 @@ Choose:
922
929
 
923
930
  **If user chooses sequence (a or b):**
924
931
 
932
+ Immediately before each numbered step below, load that named skill's current `SKILL.md` and follow it, or dispatch a child that carries it; never substitute a remembered outcome.
933
+
925
934
  1. Invoke `oat-project-summary` to generate summary.md
926
935
  2. If docs selected: invoke `oat-project-document`
927
936
  3. Invoke `oat-project-pr-final` — this sets `oat_phase_status: pr_open` and guides to revise/complete
@@ -228,10 +228,10 @@ remains immutable baseline evidence for the original p01-t01 verification.
228
228
  | `oat-project-new/SKILL.md` | `f7ca8635452f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> NEW-01`; `45b699c1c0b5 -> NEW-01`; `ba6d120791c1 -> NEW-01`; `33ce6a6c30aa -> NEW-02`; `0f5a90f34f63 -> NG`; `d0ea3a91261d -> NG` |
229
229
  | `oat-project-quick-start/SKILL.md` | `f7ca8635452f -> NG`; `c493a38b89f2 -> QS-04`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> QS-01`; `141d0a20099b -> QS-01`; `45b699c1c0b5 -> QS-01`; `ba6d120791c1 -> QS-01`; `1a5ee85164ff -> QS-02`; `af8e2bea90d7 -> QS-04`; `a823cf5aeaec -> QS-04`; `7753dc323083 -> QS-04`; `1f557da5e03c -> QS-04`; `1564ca151111 -> NG`; `c24787334ade -> QS-05`; `021ba03c82c5 -> QS-05`; `5d1a9d1b661d -> QS-05`; `318f304ee3b3 -> QS-05`; `cc700d4d2cab -> QS-05`; `7ef6aa642400 -> QS-05`; `4d389b234556 -> QS-05`; `84c506dac106 -> QS-05`; `caf7622a2e02 -> QS-05`; `8917190b2e98 -> QS-06`; `5a028d846aa5 -> QS-06`; `b1d92192b8ca -> QS-06`; `bdbb18955cc4 -> QS-06`; `6d159a2e8f8e -> QS-06`; `61a9849f4dfc -> QS-06`; `31cb92052ea6 -> QS-06`; `39e3fe23dd85 -> QS-07`; `2cb069a2590b -> NG`; `fd0aff270853 -> NG`; `a114b27f8b4b -> NG`; `77dc8e1b728a -> QS-08`; `d3e3fba65b96 -> QS-09`; `71c2a0ba99bf -> QS-09`; `f47f9f9c0d03 -> QS-09`; `224a4b43fb29 -> QS-10`; `744f130d4116 -> QS-12`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> QS-12`; `857e91aa3095 -> NG`; `b4af2220eb91 -> QS-12` |
230
230
  | `oat-project-quick-start/references/docs/autonomy-contract.md` | `* -> NG` |
231
- | `oat-project-discover/SKILL.md` | `8fe35bbfbcd6 -> NG`; `6acc57686847 -> NG`; `4df56b83b98e -> NG`; `660fcdb9dd0d -> NG`; `655d61df0a8f -> NG`; `302f5a4e2f7e -> DISC-03`; `8ee1861bb37c -> DISC-03`; `5c8d5f04f6e2 -> DISC-05`; `73964bb042ab -> DISC-05`; `82cc79370b80 -> DISC-05`; `ff09e8f7774f -> DISC-06`; `323e71dca05d -> DISC-06`; `012bab5b478e -> DISC-06`; `523764981692 -> DISC-06`; `7eaa40e078b9 -> DISC-07`; `b57408be1e7b -> DISC-07`; `4683ea4a7d2f -> DISC-07`; `04454a79d998 -> DISC-08`; `54444ee79fc8 -> DISC-08`; `dd3b5d3d6424 -> DISC-08`; `f64efa435cb2 -> DISC-08`; `1f802b9bc5ad -> DISC-08`; `3fad0405b2bc -> NG`; `2eeba46b7d76 -> DISC-08` |
231
+ | `oat-project-discover/SKILL.md` | `8fe35bbfbcd6 -> NG`; `6acc57686847 -> NG`; `4df56b83b98e -> NG`; `660fcdb9dd0d -> NG`; `655d61df0a8f -> NG`; `302f5a4e2f7e -> DISC-03`; `8ee1861bb37c -> DISC-03`; `50a1cdc5156b -> DISC-05`; `73964bb042ab -> DISC-05`; `82cc79370b80 -> DISC-05`; `ff09e8f7774f -> DISC-06`; `323e71dca05d -> DISC-06`; `012bab5b478e -> DISC-06`; `59b36042ba08 -> DISC-06`; `7eaa40e078b9 -> DISC-07`; `b57408be1e7b -> DISC-07`; `4683ea4a7d2f -> DISC-07`; `04454a79d998 -> DISC-08`; `54444ee79fc8 -> DISC-08`; `dd3b5d3d6424 -> DISC-08`; `f64efa435cb2 -> DISC-08`; `1f802b9bc5ad -> DISC-08`; `3fad0405b2bc -> NG`; `2eeba46b7d76 -> DISC-08` |
232
232
  | `oat-project-design/SKILL.md` | `d942bb5a75dc -> NG`; `5eb3949f32e1 -> NG`; `8bdedbff2084 -> NG`; `655d61df0a8f -> NG`; `cf317c17c586 -> DES-01`; `2fd9e4306093 -> NG`; `30aaa490f54f -> NG`; `5d39260a7350 -> DES-03`; `925238b3a9b8 -> DES-03`; `f44832c14f8f -> DES-03`; `7f6ed9174a80 -> DES-03`; `ea8a45cff484 -> DES-03`; `ae06e7f3590d -> DES-03`; `ad9715bfa9b5 -> DES-03`; `235f4eba81d9 -> DES-03`; `86d15c022ff2 -> DES-03`; `c08ee2c84186 -> DES-03`; `bd3ee332d171 -> DES-03`; `ec88b585a24d -> DES-03`; `a9595a6486f1 -> DES-04`; `accb06cd6f3c -> DES-04`; `806001c2c365 -> DES-04`; `696587b33f1e -> DES-04`; `9c3320eee2f8 -> NG`; `8b653210ce17 -> NG`; `8ad2a4dc63d2 -> DES-05`; `33cc7540d89e -> DES-05`; `51a2b698ba14 -> DES-05`; `81085592cc91 -> DES-05`; `74b952cc1121 -> DES-05`; `da7551391a41 -> DES-05`; `02c93ec05a4a -> DES-06`; `6864967fd8a4 -> DES-06`; `84e9be719156 -> DES-06`; `7ed89c44264b -> DES-06`; `dc7ba56c1cd4 -> DES-06`; `57ccefb935bf -> DES-06`; `9d27238332b2 -> NG`; `a0c758ab26aa -> NG`; `0e17c1a2de0b -> DES-07`; `e9ea8625567c -> DES-07`; `908e710e7304 -> DES-07`; `b3df7f6b838c -> DES-07`; `f2cb6d4a915e -> DES-07`; `2f4a7f0c9fe5 -> DES-07`; `feccfddbb990 -> DES-07`; `62556fd0060a -> DES-07`; `5382604ed237 -> DES-07`; `3b8724979206 -> DES-07`; `f86a1f05edb9 -> DES-07`; `65f2c8b5c7fd -> DES-07`; `96e24cf8a888 -> DES-07`; `bd3ad56d6265 -> DES-08`; `a19d9c6d7b42 -> DES-08`; `3af5412588ba -> DES-08`; `a0f1c66507d0 -> DES-08`; `a97364c2ca8b -> DES-08`; `4725e333dea4 -> DES-07`; `595d3a64c0f4 -> DES-07`; `57923a130802 -> DES-07`; `7d8fdfb4ca6f -> NG`; `033fb711de49 -> NG`; `d30bb6464138 -> DES-08` |
233
233
  | `oat-project-design/references/selective-review-pass.md` | `d4956192b82e -> DES-06`; `7d6e1f926ecb -> DES-06`; `04f918a5fcac -> DES-07` |
234
- | `oat-project-plan/SKILL.md` | `5eb3949f32e1 -> NG`; `64a08153bb9e -> NG`; `655d61df0a8f -> NG`; `56b37486f09d -> PLAN-01`; `cf317c17c586 -> PLAN-02`; `781643b0f2c3 -> NG`; `01fd7cca8253 -> PLAN-04`; `7bc7fa3f2cbb -> NG`; `da28ce0a5f2e -> NG`; `e334f94c4d35 -> NG`; `1fa55762c038 -> NG`; `c0935b5484a2 -> NG`; `6008163054f8 -> PLAN-05`; `571271f4d71b -> PLAN-06`; `746b760289e4 -> PLAN-06`; `de195590ff83 -> NG`; `49640510829a -> PLAN-07`; `4bef7afa7a71 -> PLAN-08`; `e5886632533e -> PLAN-08`; `4cfe1df14372 -> NG`; `d116c97a500c -> PLAN-10`; `aa62facff547 -> PLAN-10`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> PLAN-11`; `1734b2c85c5d -> NG`; `b4af2220eb91 -> PLAN-11` |
234
+ | `oat-project-plan/SKILL.md` | `5eb3949f32e1 -> NG`; `2f0ae331febf -> NG`; `655d61df0a8f -> NG`; `56b37486f09d -> PLAN-01`; `cf317c17c586 -> PLAN-02`; `781643b0f2c3 -> NG`; `01fd7cca8253 -> PLAN-04`; `7bc7fa3f2cbb -> NG`; `da28ce0a5f2e -> NG`; `e334f94c4d35 -> NG`; `1fa55762c038 -> NG`; `c0935b5484a2 -> NG`; `6008163054f8 -> PLAN-05`; `571271f4d71b -> PLAN-06`; `746b760289e4 -> PLAN-06`; `de195590ff83 -> NG`; `49640510829a -> PLAN-07`; `4bef7afa7a71 -> PLAN-08`; `e5886632533e -> PLAN-08`; `4cfe1df14372 -> NG`; `d116c97a500c -> PLAN-10`; `aa62facff547 -> PLAN-10`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> PLAN-11`; `1734b2c85c5d -> NG`; `b4af2220eb91 -> PLAN-11` |
235
235
  | `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
236
236
  | `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
237
237
  | `oat-project-implement/references/completion-and-closeout.md` | `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `0a384debbbe7 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `8d7cd69e5b09 -> NG`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `87f1424a8692 -> NG`; `6b1ec05182f0 -> IMPLEMENT-11`; `e6d696a27c91 -> NG`; `c77f8ccb52ad -> NG`; `48de2614c0ba -> IMPLEMENT-11`; `32d53f5212e5 -> IMPLEMENT-11`; `7cdb4a9c57b7 -> IMPLEMENT-11`; `16ffc0aa099b -> IMPLEMENT-11`; `d6868ea10b3f -> IMPLEMENT-11`; `4f05ff5567be -> IMPLEMENT-11`; `c70b47ae7a6d -> IMPLEMENT-11`; `5fafd093b58e -> NG`; `567d43ab0c2e -> NG`; `21ceaf7e658a -> NG`; `249427a9f475 -> NG`; `8a7ec13a9b7c -> NG`; `9aeb7fce2012 -> IMPLEMENT-18`; `f11a7cdda220 -> IMPLEMENT-18`; `4523ac029152 -> NG`; `6e87b08c4046 -> NG`; `baa6052c7f0a -> IMPLEMENT-18`; `27d3fad116b1 -> IMPLEMENT-18`; `2cfbeb4388a5 -> IMPLEMENT-18`; `c56ea56a56db -> NG`; `43e2e3c1380d -> IMPLEMENT-17`; `b49690277fb5 -> NG`; `df12304d6a36 -> NG`; `52eacac11fef -> IMPLEMENT-17`; `60092df6b17b -> IMPLEMENT-17`; `361872c6b00e -> IMPLEMENT-17`; `d2bc711a75fb -> IMPLEMENT-17`; `e0c2ea5032de -> NG`; `e3055dc5dcd1 -> NG`; `d26330f2299f -> NG` |
@@ -244,7 +244,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
244
244
  | `oat-project-summary/SKILL.md` | `68c197c44c18 -> NG`; `35cb2ea1d677 -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> SUMMARY-01`; `f3e49b727752 -> NG`; `f979b2342d28 -> NG`; `803bf40ec423 -> NG`; `c8fced47ef8e -> NG`; `d7ea1e2a4f5f -> NG`; `5f315ab87cb1 -> NG` |
245
245
  | `oat-project-pr-final/SKILL.md` | `601ac2b890f2 -> NG`; `c264a64398f0 -> NG`; `9efcbcee42ea -> NG`; `655d61df0a8f -> NG`; `cf317c17c586 -> PRFINAL-01`; `2de348a391c0 -> PRFINAL-03` |
246
246
  | `oat-project-pr-final/references/docs/autonomy-contract.md` | `* -> NG` |
247
- | `oat-project-complete/SKILL.md` | `6ed459f9e462 -> NG`; `a167d03559fa -> NG`; `79c2eeed668c -> COMPLETE-01`; `2c1514b9d9af -> COMPLETE-01`; `31c750b4fea7 -> COMPLETE-01`; `cfba413b1293 -> COMPLETE-01`; `7fcfce0423ac -> COMPLETE-01`; `7bcbf58b54e9 -> NG`; `4c7f88a7f942 -> COMPLETE-02`; `6a1a95acc8cc -> COMPLETE-02`; `3b559956b3eb -> COMPLETE-03`; `14d161cdf99b -> COMPLETE-03`; `fffe5eea5ebd -> NG`; `e7dc6fdc4eb3 -> COMPLETE-01`; `e5460e437299 -> NG`; `882b61c9096c -> NG`; `9ffa1c752505 -> NG` |
247
+ | `oat-project-complete/SKILL.md` | `6ed459f9e462 -> NG`; `a167d03559fa -> NG`; `79c2eeed668c -> COMPLETE-01`; `2c1514b9d9af -> COMPLETE-01`; `31c750b4fea7 -> COMPLETE-01`; `cfba413b1293 -> COMPLETE-01`; `7fcfce0423ac -> COMPLETE-01`; `7bcbf58b54e9 -> NG`; `4c7f88a7f942 -> COMPLETE-02`; `6a1a95acc8cc -> COMPLETE-02`; `3b559956b3eb -> COMPLETE-03`; `14d161cdf99b -> COMPLETE-03`; `fffe5eea5ebd -> NG`; `e7dc6fdc4eb3 -> COMPLETE-01`; `e5460e437299 -> NG`; `882b61c9096c -> NG`; `9ffa1c752505 -> NG`; `8c5e599f6bac -> NG` |
248
248
  | `oat-project-review-provide/SKILL.md` | `1f4b981cac8b -> NG`; `adaeca152bb2 -> NG`; `2f7c201c3c06 -> NG`; `88f79700afdc -> NG`; `655d61df0a8f -> NG`; `efafde9ef5a0 -> NG`; `d2a3861d6323 -> REVIEWPROVIDE-02`; `65f5b9cf49cd -> REVIEWPROVIDE-04`; `962cb38d246a -> REVIEWPROVIDE-04`; `1a568483ba0b -> REVIEWPROVIDE-04`; `610e27edfe85 -> REVIEWPROVIDE-04`; `bb0096e95c47 -> REVIEWPROVIDE-06`; `55f6357a987d -> REVIEWPROVIDE-06`; `1bee61f8531c -> REVIEWPROVIDE-07`; `3d35091607a1 -> REVIEWPROVIDE-08`; `fb40c4341c4c -> NG`; `b22d16885150 -> NG`; `d2b25906242e -> REVIEWPROVIDE-08`; `fd8ebf72b3c4 -> NG`; `fcb9de611ff3 -> NG`; `d2a838dfb18d -> NG`; `c3d50ea7cf69 -> NG`; `09b1b8dd445c -> NG`; `7acc8f3718d2 -> REVIEWPROVIDE-09`; `b2fa883fc4a2 -> NG`; `fe4421531b4c -> NG` |
249
249
  | `oat-project-review-receive/SKILL.md` | `9b8a3743d626 -> NG`; `df49c8c6f192 -> NG`; `4ee8730382d3 -> NG`; `655d61df0a8f -> NG`; `765f897d67ac -> NG`; `53b58d16dd32 -> NG`; `fb8755a3bdf4 -> NG`; `c8ab5dd90075 -> NG`; `1f7dd98dff2f -> NG`; `56f78c6740e6 -> NG`; `76f5fb5a88cd -> NG`; `085abfa3599f -> REVIEWRECEIVE-01`; `3ad3aadb8c60 -> NG`; `a7d114059bb6 -> NG`; `ac88cfaa83d9 -> NG`; `594bbf70346c -> REVIEWRECEIVE-08`; `f31f07284718 -> REVIEWRECEIVE-02`; `aba178a21441 -> REVIEWRECEIVE-04`; `a37e601cd731 -> REVIEWRECEIVE-05`; `20e05e1a4381 -> REVIEWRECEIVE-06`; `90001dadf75f -> REVIEWRECEIVE-07`; `f8fd58180ecf -> NG`; `c3abcdc02d9f -> NG`; `f2ebdd6abb9b -> NG` |
250
250
  | `oat-project-review-provide/SKILL.md` | `2e794bf4fc4a -> REVIEWPROVIDE-08`; `5441ab977b46 -> REVIEWPROVIDE-08` |
@@ -60,6 +60,7 @@ Before each phase:
60
60
  worktree: {assigned checkout}
61
61
  parallel_group: {group or null}
62
62
  expected_base_sha: {group base or PHASE_BASE_HEAD}
63
+ recovered_patch: {artifact reference for a same-target continuation, or null}
63
64
  commit_convention: {from plan.md}
64
65
  request_id: {generic dispatch request ID}
65
66
  phase_recovery_limit: {resolved 0-20 limit}
@@ -212,6 +213,200 @@ Handle and exact-target continuity use these mutually compatible branches:
212
213
  Handle unavailability alone does not make automatic recovery ineligible or
213
214
  stop it. It selects the second branch only when all its conditions hold.
214
215
 
216
+ **Recovering a lost child's uncommitted work.** A fresh child never starts on a
217
+ dirty tree. When the lost or unresumable child left uncommitted work behind,
218
+ neither continuity branch above may run until that work is captured into an
219
+ immutable, verified artifact and the worktree is returned to its clean base.
220
+ Run this ordered sequence, and treat every nonzero exit as a park-the-phase
221
+ STOP rather than a best-effort restore:
222
+
223
+ 1. Resolve the capture script through this skill's installed root rather than a
224
+ repository-relative path, so a user-scope install resolves too:
225
+
226
+ ```bash
227
+ set -eu
228
+ CAPTURE_SCRIPT=""
229
+ REPO_ROOT=$(git -C "$PHASE_WORKTREE" rev-parse --show-toplevel 2>/dev/null || true)
230
+ for CAPTURE_ROOT in "${SKILL_DIR:-}" \
231
+ "${HOME:-}/.agents/skills/oat-project-implement" \
232
+ "${REPO_ROOT:+$REPO_ROOT/.agents/skills/oat-project-implement}"; do
233
+ [ -n "$CAPTURE_ROOT" ] || continue
234
+ [ -f "$CAPTURE_ROOT/scripts/capture-dirty-tree.mjs" ] || continue
235
+ CAPTURE_SCRIPT="$CAPTURE_ROOT/scripts/capture-dirty-tree.mjs"
236
+ break
237
+ done
238
+ [ -n "$CAPTURE_SCRIPT" ] || {
239
+ echo "capture-script-unavailable" >&2
240
+ exit 1
241
+ }
242
+ ```
243
+
244
+ The guard terminates; it never falls through to an empty command, because
245
+ `node ""` reads its program from stdin and exits zero at EOF, which is what a
246
+ non-interactive harness always presents — an unverified artifact would sail
247
+ through as a pass. Shell variables do not survive across separate tool
248
+ invocations, so every block below that runs the script repeats this
249
+ resolution and this guard in the same block rather than relying on
250
+ `CAPTURE_SCRIPT` carrying over. An empty `CAPTURE_SCRIPT` is a
251
+ `capture-script-unavailable` STOP: report it verbatim
252
+ with the probed roots and the recovery command
253
+ `oat tools install workflows --scope <user|project>` or
254
+ `oat tools update --pack workflows --scope <user|project>`, leave the
255
+ worktree as it is, and park the phase. Never fall back to a
256
+ repository-relative path.
257
+
258
+ 2. Establish that the former child cannot still be writing: its handle is
259
+ terminated, or its worktree is quiescent.
260
+ 3. Capture the work. The script establishes quiescence from two byte-identical
261
+ worktree snapshots, classifies the dirt, captures the index, worktree, and
262
+ untracked components binary-safely, writes a `manifest.json` carrying the
263
+ `HEAD` SHA, the affected paths, the `git diff --cached --stat` summary, and a
264
+ SHA-256 digest and byte size for every artifact file, derives the
265
+ `restorePlan` step 4 follows, and proves the artifact replays into a pristine
266
+ replica of that same `HEAD` before it seals the result. Only a sealed
267
+ artifact can be verified later:
268
+
269
+ ```bash
270
+ set -eu
271
+ CAPTURE_SCRIPT=""
272
+ REPO_ROOT=$(git -C "$PHASE_WORKTREE" rev-parse --show-toplevel 2>/dev/null || true)
273
+ for CAPTURE_ROOT in "${SKILL_DIR:-}" \
274
+ "${HOME:-}/.agents/skills/oat-project-implement" \
275
+ "${REPO_ROOT:+$REPO_ROOT/.agents/skills/oat-project-implement}"; do
276
+ [ -n "$CAPTURE_ROOT" ] || continue
277
+ [ -f "$CAPTURE_ROOT/scripts/capture-dirty-tree.mjs" ] || continue
278
+ CAPTURE_SCRIPT="$CAPTURE_ROOT/scripts/capture-dirty-tree.mjs"
279
+ break
280
+ done
281
+ [ -n "$CAPTURE_SCRIPT" ] || {
282
+ echo "capture-script-unavailable" >&2
283
+ exit 1
284
+ }
285
+
286
+ node "$CAPTURE_SCRIPT" \
287
+ --worktree "$PHASE_WORKTREE" \
288
+ --artifact-dir "$ARTIFACT_DIR" \
289
+ --writer-identity "$FORMER_CHILD_IDENTITY" \
290
+ --bounded-file "<in-phase path>" \
291
+ --bounded-file "<another in-phase path>"
292
+ ```
293
+
294
+ The phase file boundary is mandatory, not a template flourish: repeat
295
+ `--bounded-file` once per in-phase path from the plan, because capture
296
+ refuses to run without one and dirt outside the boundary is
297
+ `unsupported-dirt` rather than something a continuation may re-commit.
298
+ Repeat the flag rather than packing paths into one delimited value; a
299
+ filename may legitimately contain a comma.
300
+
301
+ A nonzero exit is a STOP. Report its reason — `active-writer`,
302
+ `unsupported-dirt`, or `round-trip-failed` — verbatim, leave the worktree as
303
+ it is, and park the phase.
304
+
305
+ 4. Restore only the affected paths, following the `restorePlan` the script
306
+ emitted, and always with `git --literal-pathspecs` so a filename cannot act
307
+ as pathspec magic: `restore-from-head` runs
308
+ `git --literal-pathspecs restore --staged --worktree --source=HEAD -- <path>`,
309
+ `unstage-and-remove` runs
310
+ `git --literal-pathspecs restore --staged -- <path>` and then deletes the
311
+ file, and `remove-untracked` deletes the captured untracked path. The script
312
+ never restores; this lifecycle does, and only the actions the plan names.
313
+ 5. Brief the fresh same-target continuation with `recovered_patch`.
314
+ 6. The continuation resolves the script the same way and re-verifies the
315
+ artifact before it applies anything:
316
+
317
+ ```bash
318
+ set -eu
319
+ # `recovered_patch` is optional and all-or-nothing. Without one there is
320
+ # nothing to verify and nothing to apply, so the verifier is skipped
321
+ # entirely; a partial brief is a named stop rather than an unbound-variable
322
+ # death. Never dereference an artifact variable outside the branch: under
323
+ # `set -u` an unset one exits here, and an empty one fails verification —
324
+ # either way an artifact-free retry parks before the ledger reconciliation
325
+ # it needs to reach.
326
+ if [ -z "${ARTIFACT_DIR:-}${MANIFEST_DIGEST:-}${ARTIFACT_SIZE:-}" ]; then
327
+ : # No recovered_patch: continue to the ledger reconciliation.
328
+ elif [ -z "${ARTIFACT_DIR:-}" ] || [ -z "${MANIFEST_DIGEST:-}" ] ||
329
+ [ -z "${ARTIFACT_SIZE:-}" ]; then
330
+ echo "artifact-verification-failed: a partial recovered_patch is unusable; artifact, manifest_digest and size travel together" >&2
331
+ exit 1
332
+ else
333
+ CAPTURE_SCRIPT=""
334
+ REPO_ROOT=$(git -C "$PHASE_WORKTREE" rev-parse --show-toplevel 2>/dev/null || true)
335
+ for CAPTURE_ROOT in "${SKILL_DIR:-}" \
336
+ "${HOME:-}/.agents/skills/oat-project-implement" \
337
+ "${REPO_ROOT:+$REPO_ROOT/.agents/skills/oat-project-implement}"; do
338
+ [ -n "$CAPTURE_ROOT" ] || continue
339
+ [ -f "$CAPTURE_ROOT/scripts/capture-dirty-tree.mjs" ] || continue
340
+ CAPTURE_SCRIPT="$CAPTURE_ROOT/scripts/capture-dirty-tree.mjs"
341
+ break
342
+ done
343
+ [ -n "$CAPTURE_SCRIPT" ] || {
344
+ echo "capture-script-unavailable" >&2
345
+ exit 1
346
+ }
347
+
348
+ EXPECTED_HEAD=$(git -C "$PHASE_WORKTREE" rev-parse --verify HEAD)
349
+ node "$CAPTURE_SCRIPT" --verify \
350
+ --artifact-dir "$ARTIFACT_DIR" \
351
+ --manifest-digest "$MANIFEST_DIGEST" \
352
+ --size "$ARTIFACT_SIZE" \
353
+ --expected-head "$EXPECTED_HEAD"
354
+ fi
355
+ ```
356
+
357
+ `--expected-head` is mandatory and reconciles the artifact's captured base
358
+ with the `HEAD` about to be patched. Integrity is not base agreement: a hunk
359
+ whose context happens to match applies cleanly at the wrong commit and
360
+ silently produces wrong content, so a base mismatch is a STOP.
361
+
362
+ An `artifact-verification-failed` exit is a STOP. Verification is read-only
363
+ and conditional: it runs only when the brief carries a `recovered_patch`.
364
+ A continuation briefed without one has no artifact to resolve a script for,
365
+ so it skips verification and continues to the ledger reconciliation, and its
366
+ apply step is a no-op. The continuation completes every fail-closed
367
+ precondition — input validation, the base and immutable-history checks,
368
+ artifact verification when an artifact was briefed, and pending-attempt
369
+ reconciliation — before it applies or commits anything,
370
+ so a precondition stop leaves the branch exactly at `recovery_base_head`
371
+ with the artifact untouched and re-verifiable; re-brief from current
372
+ authoritative state rather than assuming the earlier brief still holds. Only
373
+ then, and only when an artifact was briefed and verified, does it apply
374
+ `git apply --index` for the `index` component, `git apply` for the
375
+ `worktree` component, and byte copies plus the manifest's recorded
376
+ executable bit for the `untracked` component, review the result, and commit
377
+ it as its first action. The artifact is immutable between the verification
378
+ and the application: nothing may write to it in between, and a
379
+ re-verification is required if anything might have. A continuation briefed
380
+ without a `recovered_patch` applies nothing, commits nothing here, records
381
+ no artifact reference, and proceeds to its own work with the tree as it
382
+ found it.
383
+
384
+ 7. Record the artifact reference and manifest digest in the continuation event
385
+ (`cont-<project>-<phase>-fix-N`). That first commit is a recovery commit,
386
+ not a planned task commit: expect exactly one, require the continuation to
387
+ report it with the artifact reference and manifest digest, and do not count
388
+ it against any task's one-commit rule. It is also immutable and becomes part
389
+ of the phase's base. If a later stop parks the phase after it landed, brief
390
+ the retry with `recovery_base_head` set to the reconciled current HEAD —
391
+ which includes that recovery commit and any candidate or ledger-only commit
392
+ already durably made — and without the already-committed artifact;
393
+ re-supplying it would apply the same work twice, and holding the original
394
+ base would make the exact-HEAD check unsatisfiable. That retry runs no
395
+ verifier: with `recovered_patch` null there is nothing to verify, and a
396
+ contract that referenced the artifact variables anyway would park the retry
397
+ under `set -u` before it reached the reconciliation. Carry the recovery
398
+ commit as provenance in the continuation event, and capture dirt that
399
+ accumulated afterwards as its own new `recovered_patch`.
400
+
401
+ An unresolvable capture script (`capture-script-unavailable`), an active writer
402
+ (`active-writer`), unsupported dirt (`unsupported-dirt`), a failed round trip
403
+ (`round-trip-failed`), and an unreadable, unproven, base-mismatched, or tampered
404
+ artifact (`artifact-verification-failed`) are terminal stops. None of
405
+ them authorizes a partial or best-effort restore, a widened scope, or a
406
+ fallback target. Supported dirt is exactly staged and unstaged hunks in tracked
407
+ paths, binary changes, and untracked regular files; everything else, including
408
+ staged renames, submodules, and in-progress merge or rebase state, stops.
409
+
215
410
  Attempt accounting uses exactly one of these alternatives:
216
411
 
217
412
  1. **Pending completion:** a matching `pending_attempt` may continue only after
@@ -264,7 +459,10 @@ If the exact target is lost or cannot continue, stop before editing.
264
459
  Architecture, security, product, or requirements changes stop for direction.
265
460
  Non-mechanical widening or destructive work stops before editing. Retry
266
461
  exhaustion and every governance cap stop automatic recovery. A dirty worktree
267
- or dirty history blocks continuation. Inability to establish correctness,
462
+ or dirty history blocks continuation, except for the single verified, named
463
+ `recovered_patch` artifact the sequence above produced and the continuation
464
+ verified; unverified, unsupported, or unnamed dirt still blocks. Inability to
465
+ establish correctness,
268
466
  missing original-request provenance, missing exact-target provenance, an
269
467
  unverifiable commit range, or a malformed recovery event stops for direction.
270
468
  If focused and phase verification cannot establish correctness, stop for
@@ -301,8 +499,20 @@ phase_verification: { relevant phase command }
301
499
  dispatch_target: { exact original launcher-owned target }
302
500
  dispatch_axes: { unchanged original axes }
303
501
  dispatch_stamp: { original formal Dispatch line }
502
+ recovered_patch: { artifact, manifest_digest, size, stat, components }
304
503
  ```
305
504
 
505
+ `recovered_patch` is optional and present only when the sequence above captured
506
+ a lost child's uncommitted work that is not yet committed. The same field
507
+ appears in the `mode: implement` Phase Scope above; it is null on an ordinary
508
+ first dispatch, and null again on any retry briefed after the recovery commit
509
+ landed, whose `recovery_base_head` is the reconciled current HEAD. Its `artifact` is a readable path outside the
510
+ worktree, never a mutable worktree path; `manifest_digest` and `size` are the
511
+ values the capture printed and both are required by `--verify`; `stat` is the
512
+ captured `git diff --cached --stat` summary; and `components` lists the `index`, `worktree`, and `untracked`
513
+ entries the artifact actually holds. The same field carries a recovered patch
514
+ into a same-target `implement` continuation.
515
+
306
516
  Recover mode never replays planned tasks and never consumes review findings.
307
517
  Require its Phase Recovery Continuation Report, matching canonical event,
308
518
  ledger reconciliation, immutable-history proof, focused/phase verification,
@@ -691,14 +901,18 @@ Count only whole-phase scopes: `pNN` or `pNN-pMM`.
691
901
  - Example: no prior passed whole-phase review, current checkpoint `p03` → review `p01-p03`.
692
902
 
693
903
  For the final implementation phase use `oat-project-review-provide code final`
694
- and do not duplicate the already completed root-owned per-phase review.
904
+ — loading the current `oat-project-review-provide/SKILL.md` and following it, or
905
+ dispatching a child that carries it — and do not duplicate the already completed
906
+ root-owned per-phase review.
695
907
 
696
908
  Example: `["p01", "p04"]` → pause after p01 completes and after p04 completes;
697
909
  skip p02, p03.
698
910
 
699
911
  If this is the final implementation phase checkpoint, run
700
- `oat-project-review-provide code final` and do not run a duplicate final
701
- phase-only lifecycle review.
912
+ `oat-project-review-provide code final` — loading the current
913
+ `oat-project-review-provide/SKILL.md` and following it, or dispatching a child
914
+ that carries it — and do not run a duplicate final phase-only lifecycle
915
+ review.
702
916
 
703
917
  Defer only a checkpoint on the final implementation phase; non-final checkpoint
704
918
  behavior remains unchanged. The final checkpoint continues through final
@@ -222,9 +222,12 @@ When `OAT_AUTONOMOUS=1`, a configured checkpoint never waits for a user:
222
222
 
223
223
  1. Use the scope calculation in `phase-execution.md` and dispatch
224
224
  `oat-project-review-provide` with `oat_review_invocation: auto` through the
225
- project dispatch substrate.
225
+ project dispatch substrate, loading the current
226
+ `oat-project-review-provide/SKILL.md` and following it or dispatching a child
227
+ that carries it.
226
228
  2. Validate the returned artifact and invoke `oat-project-review-receive`
227
- immediately. Its auto-review disposition path must run without user
229
+ immediately, loading the current `oat-project-review-receive/SKILL.md` and
230
+ following it rather than a remembered receive procedure. Its auto-review disposition path must run without user
228
231
  prompts.
229
232
  3. If receive creates fix tasks, execute them through the normal implement
230
233
  route and repeat the same bounded review/receive cycle. Do not mark the