@open-agent-toolkit/cli 0.2.56 → 0.2.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agents/oat-phase-implementer.md +166 -10
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/contributing/smoke-testing.md +44 -0
- package/assets/docs/workflows/projects/implementation-execution.md +6 -2
- package/assets/docs/workflows/skills/explainer-kit.md +8 -5
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/analyze/SKILL.md +18 -17
- package/assets/skills/oat-brainstorm/SKILL.md +2 -2
- package/assets/skills/oat-doctor/SKILL.md +49 -36
- package/assets/skills/oat-idea-summarize/SKILL.md +2 -2
- package/assets/skills/oat-project-autonomous/SKILL.md +17 -10
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +3 -3
- package/assets/skills/oat-project-complete/SKILL.md +18 -8
- package/assets/skills/oat-project-design/SKILL.md +15 -1
- package/assets/skills/oat-project-discover/SKILL.md +3 -3
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +12 -3
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-implement/references/phase-execution.md +225 -7
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +5 -2
- package/assets/skills/oat-project-implement/scripts/capture-dirty-tree.mjs +1069 -0
- package/assets/skills/oat-project-import-plan/SKILL.md +12 -6
- package/assets/skills/oat-project-next/SKILL.md +7 -5
- package/assets/skills/oat-project-plan/SKILL.md +24 -12
- package/assets/skills/oat-project-pr-final/SKILL.md +2 -2
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-quick-start/SKILL.md +11 -6
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-retro/SKILL.md +4 -2
- package/assets/skills/oat-project-review-receive/SKILL.md +9 -5
- package/assets/skills/oat-project-revise/SKILL.md +6 -6
- package/package.json +2 -2
|
@@ -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`; `
|
|
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`; `
|
|
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
|
|
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,
|
|
@@ -395,9 +605,13 @@ Both accepted success and accepted terminal-stop branches must:
|
|
|
395
605
|
- for a Phase Implementation Report, verify task count; for a Phase Recovery
|
|
396
606
|
Continuation Report, verify the original task and commit instead;
|
|
397
607
|
- only for a Phase Implementation Report, verify each planned task commit is
|
|
398
|
-
exactly one append-only commit in plan order, changes only declared
|
|
399
|
-
|
|
400
|
-
|
|
608
|
+
exactly one append-only commit in plan order, changes only declared or
|
|
609
|
+
mechanically derived in-phase files, meaning the task's declared files plus
|
|
610
|
+
the mechanical additions permitted by, and reported under, the phase
|
|
611
|
+
implementer's cross-cutting option sweep, and has passing task verification;
|
|
612
|
+
a plan-list-only file set is not the acceptance boundary; never require a
|
|
613
|
+
Phase Recovery Continuation Report to replay or restate all planned task
|
|
614
|
+
outcomes;
|
|
401
615
|
- for each reported attempted recovery (`recovered` or `failed-attempt`), verify
|
|
402
616
|
attempt accounting, the immutable original commit and original request,
|
|
403
617
|
exact-target provenance, one in-scope append-only recovery commit when
|
|
@@ -691,14 +905,18 @@ Count only whole-phase scopes: `pNN` or `pNN-pMM`.
|
|
|
691
905
|
- Example: no prior passed whole-phase review, current checkpoint `p03` → review `p01-p03`.
|
|
692
906
|
|
|
693
907
|
For the final implementation phase use `oat-project-review-provide code final`
|
|
694
|
-
|
|
908
|
+
— loading the current `oat-project-review-provide/SKILL.md` and following it, or
|
|
909
|
+
dispatching a child that carries it — and do not duplicate the already completed
|
|
910
|
+
root-owned per-phase review.
|
|
695
911
|
|
|
696
912
|
Example: `["p01", "p04"]` → pause after p01 completes and after p04 completes;
|
|
697
913
|
skip p02, p03.
|
|
698
914
|
|
|
699
915
|
If this is the final implementation phase checkpoint, run
|
|
700
|
-
`oat-project-review-provide code final`
|
|
701
|
-
|
|
916
|
+
`oat-project-review-provide code final` — loading the current
|
|
917
|
+
`oat-project-review-provide/SKILL.md` and following it, or dispatching a child
|
|
918
|
+
that carries it — and do not run a duplicate final phase-only lifecycle
|
|
919
|
+
review.
|
|
702
920
|
|
|
703
921
|
Defer only a checkpoint on the final implementation phase; non-final checkpoint
|
|
704
922
|
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
|
|
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
|