@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.
- package/assets/agents/oat-phase-implementer.md +123 -9
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/configuration.md +12 -2
- package/assets/docs/docs-tooling/commands.md +36 -5
- package/assets/docs/reference/oat-directory-structure.md +56 -4
- package/assets/docs/workflows/projects/implementation-execution.md +5 -1
- 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-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 +218 -4
- 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/dist/commands/config/index.d.ts +1 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +51 -4
- package/dist/commands/docs/index-generate/generator.d.ts +43 -1
- package/dist/commands/docs/index-generate/generator.d.ts.map +1 -1
- package/dist/commands/docs/index-generate/generator.js +169 -3
- package/dist/commands/docs/index-generate/index.d.ts +8 -3
- package/dist/commands/docs/index-generate/index.d.ts.map +1 -1
- package/dist/commands/docs/index-generate/index.js +340 -24
- package/dist/commands/docs/init/scaffold.d.ts +11 -1
- package/dist/commands/docs/init/scaffold.d.ts.map +1 -1
- package/dist/commands/docs/init/scaffold.js +11 -2
- package/dist/config/oat-config.d.ts +14 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +61 -0
- package/dist/fs/assets.d.ts +33 -4
- package/dist/fs/assets.d.ts.map +1 -1
- package/dist/fs/assets.js +127 -12
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-implement
|
|
3
|
-
version: 2.3.
|
|
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
|
|
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`.
|
|
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`; `
|
|
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,
|
|
@@ -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
|
-
|
|
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`
|
|
701
|
-
|
|
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
|
|
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
|