@open-agent-toolkit/cli 0.2.41 → 0.2.46

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 (212) hide show
  1. package/assets/agents/oat-phase-implementer.md +11 -1
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/cli-utilities/configuration.md +11 -1
  4. package/assets/docs/cli-utilities/tool-packs.md +55 -9
  5. package/assets/docs/quickstart.md +9 -0
  6. package/assets/docs/reference/cli-reference.md +56 -1
  7. package/assets/docs/reference/file-locations.md +18 -1
  8. package/assets/docs/reference/oat-directory-structure.md +20 -4
  9. package/assets/docs/reference/troubleshooting.md +18 -11
  10. package/assets/docs/workflows/projects/artifacts.md +27 -1
  11. package/assets/docs/workflows/projects/implementation-execution.md +22 -0
  12. package/assets/docs/workflows/projects/index.md +6 -0
  13. package/assets/docs/workflows/projects/lifecycle.md +19 -5
  14. package/assets/docs/workflows/projects/picking-up-projects.md +75 -0
  15. package/assets/docs/workflows/projects/pr-flow.md +22 -1
  16. package/assets/docs/workflows/projects/reviewing-oat-prs.md +60 -0
  17. package/assets/public-package-versions.json +4 -4
  18. package/assets/skills/oat-brainstorm/SKILL.md +135 -32
  19. package/assets/skills/oat-brainstorm/references/destinations.md +9 -6
  20. package/assets/skills/oat-cursor-cloud-projects/SKILL.md +11 -1
  21. package/assets/skills/oat-doctor/SKILL.md +8 -1
  22. package/assets/skills/oat-project-autonomous/SKILL.md +45 -1
  23. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +8 -8
  24. package/assets/skills/oat-project-capture/SKILL.md +29 -9
  25. package/assets/skills/oat-project-complete/SKILL.md +610 -38
  26. package/assets/skills/oat-project-complete/scripts/parse-completion-retry-fields.mjs +265 -0
  27. package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +764 -0
  28. package/assets/skills/oat-project-complete/scripts/resolve-completion-retry.mjs +134 -0
  29. package/assets/skills/oat-project-complete/scripts/validate-nonarchive-lifecycle-receipt.mjs +160 -0
  30. package/assets/skills/oat-project-design/SKILL.md +33 -9
  31. package/assets/skills/oat-project-discover/SKILL.md +16 -3
  32. package/assets/skills/oat-project-document/SKILL.md +10 -4
  33. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +8 -8
  34. package/assets/skills/oat-project-implement/SKILL.md +14 -3
  35. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +18 -6
  36. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +8 -8
  37. package/assets/skills/oat-project-implement/references/phase-execution.md +9 -3
  38. package/assets/skills/oat-project-implement/references/plan-and-resume.md +3 -0
  39. package/assets/skills/oat-project-import-plan/SKILL.md +15 -9
  40. package/assets/skills/oat-project-new/SKILL.md +7 -5
  41. package/assets/skills/oat-project-next/SKILL.md +32 -10
  42. package/assets/skills/oat-project-plan/SKILL.md +18 -3
  43. package/assets/skills/oat-project-pr-final/SKILL.md +23 -2
  44. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +8 -8
  45. package/assets/skills/oat-project-pr-progress/SKILL.md +23 -2
  46. package/assets/skills/oat-project-progress/SKILL.md +23 -9
  47. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +20 -2
  48. package/assets/skills/oat-project-quick-start/SKILL.md +48 -18
  49. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +8 -8
  50. package/assets/skills/oat-project-reconcile/SKILL.md +14 -10
  51. package/assets/skills/oat-project-retro/SKILL.md +3 -3
  52. package/assets/skills/oat-project-retro/references/apply-procedure.md +102 -6
  53. package/assets/skills/oat-project-retro-file/SKILL.md +57 -6
  54. package/assets/skills/oat-project-review-provide/SKILL.md +45 -4
  55. package/assets/skills/oat-project-review-receive/SKILL.md +16 -7
  56. package/assets/skills/oat-project-review-receive-remote/SKILL.md +9 -3
  57. package/assets/skills/oat-project-revise/SKILL.md +12 -3
  58. package/assets/skills/oat-project-spec/SKILL.md +16 -3
  59. package/assets/skills/oat-project-summary/SKILL.md +113 -13
  60. package/assets/skills/oat-wave-execute/SKILL.md +34 -2
  61. package/assets/skills/oat-worktree-bootstrap/SKILL.md +13 -1
  62. package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +13 -1
  63. package/dist/commands/config/index.d.ts +1 -0
  64. package/dist/commands/config/index.d.ts.map +1 -1
  65. package/dist/commands/config/index.js +34 -3
  66. package/dist/commands/doctor/index.d.ts +2 -0
  67. package/dist/commands/doctor/index.d.ts.map +1 -1
  68. package/dist/commands/doctor/index.js +27 -3
  69. package/dist/commands/doctor/synced-projects.d.ts +12 -0
  70. package/dist/commands/doctor/synced-projects.d.ts.map +1 -0
  71. package/dist/commands/doctor/synced-projects.js +208 -0
  72. package/dist/commands/init/gitattributes.d.ts +4 -0
  73. package/dist/commands/init/gitattributes.d.ts.map +1 -0
  74. package/dist/commands/init/gitattributes.js +12 -0
  75. package/dist/commands/init/gitignore.d.ts +8 -1
  76. package/dist/commands/init/gitignore.d.ts.map +1 -1
  77. package/dist/commands/init/gitignore.js +146 -41
  78. package/dist/commands/init/index.d.ts +2 -0
  79. package/dist/commands/init/index.d.ts.map +1 -1
  80. package/dist/commands/init/index.js +3 -0
  81. package/dist/commands/init/managed-block.d.ts +10 -0
  82. package/dist/commands/init/managed-block.d.ts.map +1 -0
  83. package/dist/commands/init/managed-block.js +40 -0
  84. package/dist/commands/init/tools/index.d.ts +1 -0
  85. package/dist/commands/init/tools/index.d.ts.map +1 -1
  86. package/dist/commands/init/tools/index.js +37 -9
  87. package/dist/commands/init/tools/workflows/install-workflows.js +1 -1
  88. package/dist/commands/local/index.d.ts.map +1 -1
  89. package/dist/commands/local/index.js +5 -1
  90. package/dist/commands/local/sync.d.ts +4 -0
  91. package/dist/commands/local/sync.d.ts.map +1 -1
  92. package/dist/commands/local/sync.js +123 -2
  93. package/dist/commands/pjm/adoption.d.ts +2 -0
  94. package/dist/commands/pjm/adoption.d.ts.map +1 -1
  95. package/dist/commands/pjm/adoption.js +1 -1
  96. package/dist/commands/project/archive/archive-utils.d.ts +24 -0
  97. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  98. package/dist/commands/project/archive/archive-utils.js +349 -22
  99. package/dist/commands/project/archive/index.d.ts.map +1 -1
  100. package/dist/commands/project/archive/index.js +1 -0
  101. package/dist/commands/project/archive/push-runner.d.ts +5 -1
  102. package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
  103. package/dist/commands/project/archive/push-runner.js +33 -4
  104. package/dist/commands/project/complete-state/index.d.ts.map +1 -1
  105. package/dist/commands/project/complete-state/index.js +3 -1
  106. package/dist/commands/project/index.d.ts.map +1 -1
  107. package/dist/commands/project/index.js +12 -0
  108. package/dist/commands/project/links/compute.d.ts +9 -0
  109. package/dist/commands/project/links/compute.d.ts.map +1 -0
  110. package/dist/commands/project/links/compute.js +27 -0
  111. package/dist/commands/project/links/index.d.ts +17 -0
  112. package/dist/commands/project/links/index.d.ts.map +1 -0
  113. package/dist/commands/project/links/index.js +72 -0
  114. package/dist/commands/project/links/refresh.d.ts +26 -0
  115. package/dist/commands/project/links/refresh.d.ts.map +1 -0
  116. package/dist/commands/project/links/refresh.js +92 -0
  117. package/dist/commands/project/links/render.d.ts +24 -0
  118. package/dist/commands/project/links/render.d.ts.map +1 -0
  119. package/dist/commands/project/links/render.js +68 -0
  120. package/dist/commands/project/list.d.ts +5 -0
  121. package/dist/commands/project/list.d.ts.map +1 -1
  122. package/dist/commands/project/list.js +182 -9
  123. package/dist/commands/project/migrate/index.d.ts +22 -0
  124. package/dist/commands/project/migrate/index.d.ts.map +1 -0
  125. package/dist/commands/project/migrate/index.js +79 -0
  126. package/dist/commands/project/new/index.d.ts +2 -0
  127. package/dist/commands/project/new/index.d.ts.map +1 -1
  128. package/dist/commands/project/new/index.js +14 -2
  129. package/dist/commands/project/new/scaffold.d.ts +22 -1
  130. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  131. package/dist/commands/project/new/scaffold.js +287 -69
  132. package/dist/commands/project/open/index.d.ts +16 -0
  133. package/dist/commands/project/open/index.d.ts.map +1 -1
  134. package/dist/commands/project/open/index.js +151 -19
  135. package/dist/commands/project/pause/index.d.ts +8 -0
  136. package/dist/commands/project/pause/index.d.ts.map +1 -1
  137. package/dist/commands/project/pause/index.js +129 -19
  138. package/dist/commands/project/prune/index.d.ts +21 -0
  139. package/dist/commands/project/prune/index.d.ts.map +1 -0
  140. package/dist/commands/project/prune/index.js +95 -0
  141. package/dist/commands/project/pull/index.d.ts +28 -0
  142. package/dist/commands/project/pull/index.d.ts.map +1 -0
  143. package/dist/commands/project/pull/index.js +157 -0
  144. package/dist/commands/project/push/index.d.ts +22 -0
  145. package/dist/commands/project/push/index.d.ts.map +1 -0
  146. package/dist/commands/project/push/index.js +100 -0
  147. package/dist/commands/project/scope/index.d.ts +17 -0
  148. package/dist/commands/project/scope/index.d.ts.map +1 -0
  149. package/dist/commands/project/scope/index.js +107 -0
  150. package/dist/commands/project/split/run.d.ts +4 -0
  151. package/dist/commands/project/split/run.d.ts.map +1 -1
  152. package/dist/commands/project/split/run.js +48 -10
  153. package/dist/commands/project/sync/git.d.ts +18 -0
  154. package/dist/commands/project/sync/git.d.ts.map +1 -0
  155. package/dist/commands/project/sync/git.js +60 -0
  156. package/dist/commands/project/sync/record.d.ts +22 -0
  157. package/dist/commands/project/sync/record.d.ts.map +1 -0
  158. package/dist/commands/project/sync/record.js +133 -0
  159. package/dist/commands/project/sync/ref-sync.d.ts +120 -0
  160. package/dist/commands/project/sync/ref-sync.d.ts.map +1 -0
  161. package/dist/commands/project/sync/ref-sync.js +962 -0
  162. package/dist/commands/project/sync/resolve-target.d.ts +27 -0
  163. package/dist/commands/project/sync/resolve-target.d.ts.map +1 -0
  164. package/dist/commands/project/sync/resolve-target.js +159 -0
  165. package/dist/commands/shared/oat-paths.d.ts +4 -1
  166. package/dist/commands/shared/oat-paths.d.ts.map +1 -1
  167. package/dist/commands/shared/oat-paths.js +2 -2
  168. package/dist/commands/shared/project-scope.d.ts +23 -0
  169. package/dist/commands/shared/project-scope.d.ts.map +1 -0
  170. package/dist/commands/shared/project-scope.js +106 -0
  171. package/dist/commands/tools/migrate/index.js +1 -1
  172. package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
  173. package/dist/commands/tools/shared/pack-inventory.js +79 -8
  174. package/dist/commands/tools/shared/pack-lifecycle.js +1 -1
  175. package/dist/commands/tools/shared/pack-reconcile.d.ts.map +1 -1
  176. package/dist/commands/tools/shared/pack-reconcile.js +4 -1
  177. package/dist/commands/tools/shared/project-tools-config.d.ts +6 -2
  178. package/dist/commands/tools/shared/project-tools-config.d.ts.map +1 -1
  179. package/dist/commands/tools/shared/project-tools-config.js +7 -5
  180. package/dist/commands/tools/update/index.d.ts.map +1 -1
  181. package/dist/commands/tools/update/index.js +38 -14
  182. package/dist/commands/tools/update/update-tools.d.ts +2 -0
  183. package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
  184. package/dist/config/oat-config.d.ts +6 -3
  185. package/dist/config/oat-config.d.ts.map +1 -1
  186. package/dist/config/oat-config.js +41 -7
  187. package/dist/config/resolve.d.ts.map +1 -1
  188. package/dist/config/resolve.js +2 -1
  189. package/dist/fs/io.d.ts +2 -1
  190. package/dist/fs/io.d.ts.map +1 -1
  191. package/dist/fs/io.js +5 -2
  192. package/dist/projects/split/finalize.d.ts.map +1 -1
  193. package/dist/projects/split/finalize.js +55 -2
  194. package/dist/projects/split/resume.d.ts +3 -0
  195. package/dist/projects/split/resume.d.ts.map +1 -1
  196. package/dist/projects/split/resume.js +34 -7
  197. package/dist/projects/split/seed-children.d.ts.map +1 -1
  198. package/dist/projects/split/seed-children.js +6 -0
  199. package/dist/projects/split/write-parent.d.ts +7 -0
  200. package/dist/projects/split/write-parent.d.ts.map +1 -1
  201. package/dist/projects/split/write-parent.js +7 -4
  202. package/dist/release/public-package-contract.d.ts.map +1 -1
  203. package/dist/release/public-package-contract.js +1 -0
  204. package/dist/validation/skills.d.ts.map +1 -1
  205. package/dist/validation/skills.js +434 -0
  206. package/package.json +4 -4
  207. package/dist/__tests__/skills/split-flow-fixtures.d.ts +0 -50
  208. package/dist/__tests__/skills/split-flow-fixtures.d.ts.map +0 -1
  209. package/dist/__tests__/skills/split-flow-fixtures.js +0 -161
  210. package/dist/commands/__tests__/helpers.d.ts +0 -12
  211. package/dist/commands/__tests__/helpers.d.ts.map +0 -1
  212. package/dist/commands/__tests__/helpers.js +0 -36
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-review-provide
3
- version: 1.4.1
3
+ version: 1.5.1
4
4
  description: Use when the user explicitly asks to review an OAT project — e.g. "review project", "review the project", "run project review", or confirms a previously offered review. Do NOT auto-invoke on completed work alone. Resolves a project review scope and offers before running.
5
5
  disable-model-invocation: false
6
6
  user-invocable: true
@@ -108,10 +108,21 @@ OAT stores active project context in `.oat/config.local.json` (`activeProject`,
108
108
 
109
109
  ```bash
110
110
  PROJECT_PATH=$(oat config get activeProject 2>/dev/null || true)
111
- PROJECTS_ROOT="${OAT_PROJECTS_ROOT:-$(oat config get projects.root 2>/dev/null || echo ".oat/projects/shared")}"
112
- PROJECTS_ROOT="${PROJECTS_ROOT%/}"
111
+ if [ -n "$PROJECT_PATH" ]; then
112
+ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat: cannot resolve project scope for $PROJECT_PATH; refusing project arrival" >&2; exit 1; }
113
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
114
+ PROJECT_SLUG=$(basename "$PROJECT_PATH")
115
+ if [ -f "$PROJECT_PATH.json" ] || git ls-remote --exit-code origin "refs/oat/projects/$PROJECT_SLUG" >/dev/null 2>&1; then
116
+ oat project pull "$PROJECT_PATH" || { echo "oat: project pull failed for $PROJECT_PATH; resolve the reported state before continuing" >&2; exit 1; }
117
+ fi
118
+ fi
119
+ fi
113
120
  ```
114
121
 
122
+ The pull runs before directory and `state.md` validation. This materializes an
123
+ absent synced checkout when its discovery record or remote ref exists, adopting
124
+ the remote ref when the current branch does not yet have a record.
125
+
115
126
  Validation rules:
116
127
 
117
128
  - Prefer `PROJECT_PATH` from `activeProject` when it is set and points to an existing directory.
@@ -259,6 +270,18 @@ Before gathering review context, inspect the core project artifacts:
259
270
  - `"$PROJECT_PATH/state.md"`
260
271
  - `.oat/state.md` is generated dashboard state; ignore it for committed artifact baseline checks.
261
272
 
273
+ Resolve the project scope before the baseline check. For `synced`, inspect the
274
+ nested checkout directly so ignored files cannot hide pending bookkeeping:
275
+
276
+ ```bash
277
+ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || exit 1
278
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
279
+ git -C "$PROJECT_PATH" status --porcelain -- discovery.md spec.md design.md plan.md implementation.md state.md
280
+ else
281
+ git status --porcelain -- "$PROJECT_PATH/discovery.md" "$PROJECT_PATH/spec.md" "$PROJECT_PATH/design.md" "$PROJECT_PATH/plan.md" "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md"
282
+ fi
283
+ ```
284
+
262
285
  If any of those files are untracked or modified only because the previous workflow step did not finish its bookkeeping commit:
263
286
 
264
287
  - Stop and tell the user to commit the pending artifact bookkeeping first, or resume the originating workflow skill so it can do that commit.
@@ -998,7 +1021,7 @@ Findings: {N} critical, {N} important, {N} medium, {N} minor
998
1021
 
999
1022
  Run the `oat-project-review-receive` skill to convert findings into plan tasks.
1000
1023
 
1001
- ```
1024
+ ````
1002
1025
 
1003
1026
  ### Step 8.5: Validate Review Orchestration and Append Root Log
1004
1027
 
@@ -1095,6 +1118,21 @@ After writing the review artifact and applying the Step 9 Reviews-table update,
1095
1118
  - Warn that uncommitted review bookkeeping can desync workflow routing/restart behavior
1096
1119
  - In the summary, clearly state: "bookkeeping not committed (user-approved defer)"
1097
1120
 
1121
+ Otherwise commit with the fail-closed scope guard:
1122
+
1123
+ ```bash
1124
+ ACTIVE_REVIEW_PATH="$PROJECT_PATH/reviews/$REVIEW_FILENAME"
1125
+ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat: cannot resolve project scope for $PROJECT_PATH; refusing to commit artifacts" >&2; exit 1; }
1126
+ # fail closed: never fall back to branch bookkeeping when scope resolution fails
1127
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
1128
+ oat project push "$PROJECT_PATH" --message "chore(oat): record {scope} review artifact" || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
1129
+ else
1130
+ git add "$ACTIVE_REVIEW_PATH"
1131
+ [ -f "$PROJECT_PATH/plan.md" ] && git add "$PROJECT_PATH/plan.md"
1132
+ git diff --cached --quiet || git commit -m "chore(oat): record {scope} review artifact"
1133
+ fi
1134
+ ````
1135
+
1098
1136
  ### Step 10: Output Summary
1099
1137
 
1100
1138
  **If subagent used (Tier 1):**
@@ -1152,4 +1190,7 @@ Next: Run the oat-project-review-receive skill to convert findings into plan tas
1152
1190
  - Review artifact + plan bookkeeping committed atomically on the correct branch (or explicitly deferred with user approval)
1153
1191
  - For final scope, deferred findings ledger included in reviewer context
1154
1192
  - User guided to next step (`oat-project-review-receive`)
1193
+
1194
+ ```
1195
+
1155
1196
  ```
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-review-receive
3
- version: 1.6.0
3
+ version: 1.6.1
4
4
  description: Use when the user explicitly asks to receive review findings for an OAT project — e.g. "receive review", "process review", "process the project review", or confirms a previously offered review-receive step. Do NOT auto-invoke merely because a review file exists. Resolves the latest review and offers before acting.
5
5
  disable-model-invocation: false
6
6
  user-invocable: true
@@ -399,6 +399,9 @@ Expected: {expected outcome}
399
399
  git add {files}
400
400
  git commit -m "fix({task_id}): {description}"
401
401
  ```
402
+
403
+ Fix tasks that edit synced artifacts use `oat project push` under the scope
404
+ guard instead of the branch commit template above.
402
405
  ````
403
406
 
404
407
  ````
@@ -526,12 +529,18 @@ Rules:
526
529
  Commit all modified OAT tracking files atomically:
527
530
 
528
531
  ```bash
529
- git add "$PROJECT_PATH/plan.md" "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md"
530
- # Capture the Step 7.5 archive move: stages both the deletion of the original
531
- # review path and the new archived location. Scope to the project's reviews/
532
- # directory — never use repo-wide `git add -A`.
533
- git add "$PROJECT_PATH/reviews/"
534
- git diff --cached --quiet || git commit -m "chore(oat): record review findings and add fix tasks ({scope})"
532
+ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat: cannot resolve project scope for $PROJECT_PATH; refusing to commit artifacts" >&2; exit 1; }
533
+ # fail closed: never fall back to branch bookkeeping when scope resolution fails
534
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
535
+ oat project push "$PROJECT_PATH" --message "chore(oat): record review findings and add fix tasks ({scope})" || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
536
+ else
537
+ git add "$PROJECT_PATH/plan.md" "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md"
538
+ # Capture the Step 7.5 archive move: stages both the deletion of the original
539
+ # review path and the new archived location. Scope to the project's reviews/
540
+ # directory — never use repo-wide `git add -A`.
541
+ git add "$PROJECT_PATH/reviews/"
542
+ git diff --cached --quiet || git commit -m "chore(oat): record review findings and add fix tasks ({scope})"
543
+ fi
535
544
  ```
536
545
 
537
546
  Do not use `git add -A` or glob patterns that reach outside `"$PROJECT_PATH/reviews/"`. Do not include unrelated implementation or code files in this commit. Do not defer this commit without explicit user approval — if deferred, clearly state in the summary that bookkeeping is uncommitted so the original agent knows to commit on return.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-review-receive-remote
3
- version: 1.5.0
3
+ version: 1.5.1
4
4
  description: Use when processing GitHub PR review comments within project context. Fetches PR comments, creates plan tasks, and updates project artifacts.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -267,8 +267,14 @@ Update `state.md`:
267
267
  Commit all modified OAT tracking files atomically:
268
268
 
269
269
  ```bash
270
- git add "$PROJECT_PATH/plan.md" "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md" "$REMOTE_REVIEW_PATH"
271
- git diff --cached --quiet || git commit -m "chore(oat): record remote review findings and add fix tasks (pr-#$PR_NUMBER)"
270
+ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat: cannot resolve project scope for $PROJECT_PATH; refusing to commit artifacts" >&2; exit 1; }
271
+ # fail closed: never fall back to branch bookkeeping when scope resolution fails
272
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
273
+ oat project push "$PROJECT_PATH" --message "chore(oat): record remote review findings and add fix tasks (pr-#$PR_NUMBER)" || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
274
+ else
275
+ git add "$PROJECT_PATH/plan.md" "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md" "$REMOTE_REVIEW_PATH"
276
+ git diff --cached --quiet || git commit -m "chore(oat): record remote review findings and add fix tasks (pr-#$PR_NUMBER)"
277
+ fi
272
278
  ```
273
279
 
274
280
  Do not use `git add -A` or glob patterns. Do not include unrelated implementation or code files. Do not defer this commit without explicit user approval.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-revise
3
- version: 1.0.0
3
+ version: 1.0.1
4
4
  description: Use when a project has an open PR and human feedback needs to be incorporated. Creates revision tasks and re-enters implementation.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -185,6 +185,9 @@ Expected: {expected outcome}
185
185
  git add {files}
186
186
  git commit -m "fix(prev{N}-t01): {description}"
187
187
  ```
188
+
189
+ Fix tasks that edit synced artifacts use `oat project push` under the scope
190
+ guard instead of the branch commit template above.
188
191
  ````
189
192
 
190
193
  ````
@@ -268,8 +271,14 @@ After the delegated skill completes:
268
271
  ### Step 6: Commit Bookkeeping
269
272
 
270
273
  ```bash
271
- git add "$PROJECT_PATH/plan.md" "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md"
272
- git diff --cached --quiet || git commit -m "chore(oat): create revision tasks for {project-name}"
274
+ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat: cannot resolve project scope for $PROJECT_PATH; refusing to commit artifacts" >&2; exit 1; }
275
+ # fail closed: never fall back to branch bookkeeping when scope resolution fails
276
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
277
+ oat project push "$PROJECT_PATH" --message "chore(oat): create revision tasks for {project-name}" || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
278
+ else
279
+ git add "$PROJECT_PATH/plan.md" "$PROJECT_PATH/implementation.md" "$PROJECT_PATH/state.md"
280
+ git diff --cached --quiet || git commit -m "chore(oat): create revision tasks for {project-name}"
281
+ fi
273
282
  ```
274
283
 
275
284
  ### Step 7: Output Summary
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-spec
3
- version: 2.0.1
3
+ version: 2.0.2
4
4
  description: Use when discovery is complete but you're not ready to design yet, and you want to formalize requirements into a structured spec.md as an optional standalone step. Independent of the design workflow — oat-project-design confirms requirements automatically and does not require this skill to be run first.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -437,14 +437,27 @@ Specification - Ready for design phase
437
437
  During implementation of OAT itself, use standard commit format.
438
438
 
439
439
  ```bash
440
- git add "$PROJECT_PATH/"
441
- git commit -m "docs: complete specification for {project-name}
440
+ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat: cannot resolve project scope for $PROJECT_PATH; refusing to commit artifacts" >&2; exit 1; }
441
+ # fail closed: never fall back to branch bookkeeping when scope resolution fails
442
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
443
+ oat project push "$PROJECT_PATH" --message "docs: complete specification for {project-name}
444
+
445
+ Requirements:
446
+ - {N} functional requirements (P0: {n}, P1: {n}, P2: {n})
447
+ - {N} non-functional requirements (P0: {n}, P1: {n}, P2: {n})
448
+
449
+ Ready for design phase" || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
450
+ else
451
+ PROJECT_OUTPUT_PATHS=("$PROJECT_PATH/spec.md" "$PROJECT_PATH/state.md")
452
+ git add -- "${PROJECT_OUTPUT_PATHS[@]}"
453
+ git commit -m "docs: complete specification for {project-name}
442
454
 
443
455
  Requirements:
444
456
  - {N} functional requirements (P0: {n}, P1: {n}, P2: {n})
445
457
  - {N} non-functional requirements (P0: {n}, P1: {n}, P2: {n})
446
458
 
447
459
  Ready for design phase"
460
+ fi
448
461
  ```
449
462
 
450
463
  ### Step 21: Output Summary
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: oat-project-summary
3
- version: 1.5.0
3
+ version: 1.5.1
4
4
  description: Use when the user requests or confirms summarizing an active OAT project — e.g. "summarize the project", "generate the summary", "run oat-project-summary", or confirms a previously offered summary run. Do NOT auto-invoke when implementation completes. Generates summary.md from project artifacts as institutional memory.
5
5
  disable-model-invocation: false
6
6
  user-invocable: true
7
- allowed-tools: Read, Write, Bash(git:*), Bash(oat config:*), Bash(oat decision:*), Bash(oat project log:*), Bash(oat tools:*), Glob, Grep, AskUserQuestion
7
+ allowed-tools: Read, Write, Bash(git:*), Bash(jq:*), Bash(oat config:*), Bash(oat decision:*), Bash(oat pjm:*), Bash(oat project log:*), Bash(oat project push:*), Bash(oat project scope:*), Bash(oat tools:*), Glob, Grep, AskUserQuestion
8
8
  ---
9
9
 
10
10
  # Project Summary
@@ -323,11 +323,34 @@ Run this step after `summary.md` has been authored or refreshed, including the
323
323
  distinct `## Autonomous Execution Learnings` section when its source artifact
324
324
  exists.
325
325
 
326
- When Step 2.5 found entries, run:
326
+ Before the roll-up or decision promotion mutates repository-wide outputs,
327
+ preflight the owned paths and snapshot unrelated staged state:
327
328
 
328
329
  ```bash
329
- PROJECT_LOG_LEDGER_PATH=$(oat config get workflow.projectLogLedgerPath)
330
+ DECISIONS_ROOT=".oat/repo/reference/decisions"
331
+ DECISION_INDEX_PATH="$DECISIONS_ROOT/index.md"
332
+ PROMOTED_DECISION_PATHS=()
333
+ DECISION_INDEX_CHANGED="false"
330
334
  PROJECT_LOG_LEDGER_APPENDED="false"
335
+ PROJECT_LOG_LEDGER_PATH=$(oat config get workflow.projectLogLedgerPath 2>/dev/null || true)
336
+ OWNED_STAGE_PATHS=("$PROJECT_PATH/summary.md" "$PROJECT_PATH/project-log.md" "$DECISIONS_ROOT")
337
+ if [ -n "$PROJECT_LOG_LEDGER_PATH" ]; then
338
+ OWNED_STAGE_PATHS+=("$PROJECT_LOG_LEDGER_PATH")
339
+ fi
340
+ git diff --cached --quiet -- "${OWNED_STAGE_PATHS[@]}" || {
341
+ echo "oat: summary-owned output is already staged; refusing to mix staged state" >&2
342
+ exit 1
343
+ }
344
+ UNRELATED_STAGED_PATCH_BEFORE=$(git diff --cached --binary)
345
+ ```
346
+
347
+ This preflight intentionally leaves unrelated staged paths in place. Step 8
348
+ must reproduce their staged patch byte-for-byte after its exact-path commits.
349
+
350
+ When Step 2.5 found entries, run:
351
+
352
+ ```bash
353
+ test -n "$PROJECT_LOG_LEDGER_PATH" || exit 1
331
354
  PROJECT_LOG_ROLLUP=$(oat project log rollup --project "$PROJECT_PATH" --json)
332
355
  ```
333
356
 
@@ -414,7 +437,12 @@ is missing, stop decision promotion and recommend `oat pjm init`. Never use
414
437
  - Otherwise → create it:
415
438
 
416
439
  ```bash
417
- oat decision new "<title>" --status accepted --context "<context>" --decision "<decision>" --consequences "<consequences>"
440
+ DECISION_CREATE=$(oat decision new "<title>" --status accepted --context "<context>" --decision "<decision>" --consequences "<consequences>" --json)
441
+ DECISION_ID=$(printf '%s\n' "$DECISION_CREATE" | jq -er '.id') || exit 1
442
+ DECISION_RECORD_PATH="$DECISIONS_ROOT/${DECISION_ID}.md"
443
+ test -f "$DECISION_RECORD_PATH" || exit 1
444
+ PROMOTED_DECISION_PATHS+=("$DECISION_RECORD_PATH")
445
+ DECISION_INDEX_CHANGED="true"
418
446
  ```
419
447
 
420
448
  The command generates the deterministic `DR-YYMMDD-slug` ID, fills every decision body section, and regenerates the managed index automatically — do not hand-edit `index.md`. Optionally pass `--created-at "<project completion date>"` when a project completion date is available, so the record's date reflects when the decision was made.
@@ -436,14 +464,75 @@ This is informational only. There is no interactive prompt anywhere in this step
436
464
  ### Step 8: Commit
437
465
 
438
466
  ```bash
439
- git add "$PROJECT_PATH/summary.md"
440
- if [ "$PROJECT_LOG_PROMOTION_APPENDED" = "true" ]; then
441
- git add "$PROJECT_PATH/project-log.md"
442
- fi
467
+ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat: cannot resolve project scope for $PROJECT_PATH; refusing to commit artifacts" >&2; exit 1; }
468
+ # fail closed: never fall back to branch bookkeeping when scope resolution fails
469
+
470
+ PARENT_OUTPUT_PATHS=()
443
471
  if [ "$PROJECT_LOG_LEDGER_APPENDED" = "true" ]; then
444
- git add "$PROJECT_LOG_LEDGER_PATH"
472
+ PARENT_OUTPUT_PATHS+=("$PROJECT_LOG_LEDGER_PATH")
473
+ fi
474
+ if [ "${#PROMOTED_DECISION_PATHS[@]}" -gt 0 ]; then
475
+ PARENT_OUTPUT_PATHS+=("${PROMOTED_DECISION_PATHS[@]}")
476
+ fi
477
+ if [ "$DECISION_INDEX_CHANGED" = "true" ]; then
478
+ PARENT_OUTPUT_PATHS+=("$DECISION_INDEX_PATH")
445
479
  fi
446
- git commit -m "docs: generate summary for {project-name}"
480
+
481
+ PARENT_DURABILITY_COMMIT=""
482
+ if [ "$PROJECT_SCOPE" = "synced" ] && [ "${#PARENT_OUTPUT_PATHS[@]}" -gt 0 ]; then
483
+ git add -- "${PARENT_OUTPUT_PATHS[@]}"
484
+ if [ "$PROJECT_LOG_LEDGER_APPENDED" = "true" ] && [ "$DECISION_INDEX_CHANGED" = "true" ]; then
485
+ PARENT_COMMIT_MESSAGE="docs: update project log ledger and decisions for {project-name}"
486
+ elif [ "$PROJECT_LOG_LEDGER_APPENDED" = "true" ]; then
487
+ PARENT_COMMIT_MESSAGE="docs: update project log ledger for {project-name}"
488
+ else
489
+ PARENT_COMMIT_MESSAGE="docs: promote summary decisions for {project-name}"
490
+ fi
491
+ git commit --only -m "$PARENT_COMMIT_MESSAGE" -- "${PARENT_OUTPUT_PATHS[@]}"
492
+ PARENT_DURABILITY_COMMIT=$(git rev-parse HEAD)
493
+ PARENT_COMMIT_PATHS=$(git diff-tree --no-commit-id --name-only -r "$PARENT_DURABILITY_COMMIT")
494
+ # Inspect the complete output and require exact set equality with the
495
+ # de-duplicated PARENT_OUTPUT_PATHS array before continuing.
496
+ fi
497
+ ```
498
+
499
+ Define this fail-closed parser before either synced summary push. On rejection,
500
+ print the full CLI JSON, run `oat project pull "$PROJECT_PATH"`, resolve its
501
+ reported conflict, and retry the original push.
502
+
503
+ ```bash
504
+ parse_synced_push_receipt() {
505
+ node -e '
506
+ let value;
507
+ try { value = JSON.parse(process.argv[1]); } catch { process.exit(1); }
508
+ if (!["pushed", "up-to-date"].includes(value.status) || !/^[0-9a-f]{40}$/.test(value.sha)) process.exit(1);
509
+ process.stdout.write(value.sha);
510
+ ' "$1"
511
+ }
512
+ ```
513
+
514
+ ```bash
515
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
516
+ SUMMARY_PUSH=$(oat project push "$PROJECT_PATH" --message "docs: generate summary for {project-name}" --json) || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
517
+ SUMMARY_COMMIT_SHA=$(parse_synced_push_receipt "$SUMMARY_PUSH") || { printf '%s\n' "$SUMMARY_PUSH" >&2; echo "Recovery: run oat project pull \"$PROJECT_PATH\", resolve conflicts, then retry this push." >&2; exit 1; }
518
+ else
519
+ PROJECT_OUTPUT_PATHS=("$PROJECT_PATH/summary.md")
520
+ if [ "$PROJECT_LOG_PROMOTION_APPENDED" = "true" ]; then
521
+ PROJECT_OUTPUT_PATHS+=("$PROJECT_PATH/project-log.md")
522
+ fi
523
+ if [ "${#PARENT_OUTPUT_PATHS[@]}" -gt 0 ]; then
524
+ PROJECT_OUTPUT_PATHS+=("${PARENT_OUTPUT_PATHS[@]}")
525
+ fi
526
+ git add -- "${PROJECT_OUTPUT_PATHS[@]}"
527
+ git commit --only -m "docs: generate summary for {project-name}" -- "${PROJECT_OUTPUT_PATHS[@]}"
528
+ SUMMARY_COMMIT_SHA=$(git rev-parse HEAD)
529
+ fi
530
+
531
+ UNRELATED_STAGED_PATCH_AFTER=$(git diff --cached --binary)
532
+ [ "$UNRELATED_STAGED_PATCH_AFTER" = "$UNRELATED_STAGED_PATCH_BEFORE" ] || {
533
+ echo "oat: unrelated staged state changed during summary persistence" >&2
534
+ exit 1
535
+ }
447
536
  ```
448
537
 
449
538
  These conditional paths are required: append-based promotion mutates
@@ -451,12 +540,23 @@ These conditional paths are required: append-based promotion mutates
451
540
  repository ledger. A permitted skip or deduplicated ledger does not add a
452
541
  ledger staging path.
453
542
 
454
- If decision records were promoted in Step 7, also stage `.oat/repo/reference/decisions/` so the new `DR-*.md` records and the regenerated `index.md` land with the summary.
543
+ For a synced project, repository-wide decision and ledger outputs are committed
544
+ on the parent branch before the summary is pushed to its project ref. A new
545
+ decision with no ledger append therefore receives the dedicated guarded parent
546
+ commit above. Record `PARENT_DURABILITY_COMMIT` and the verified exact paths in
547
+ the output summary. Never stage the whole decisions directory.
455
548
 
456
549
  If this is a re-run (incremental update):
457
550
 
458
551
  ```bash
459
- git commit -m "docs: update summary for {project-name}"
552
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
553
+ SUMMARY_PUSH=$(oat project push "$PROJECT_PATH" --message "docs: update summary for {project-name}" --json) || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
554
+ SUMMARY_COMMIT_SHA=$(parse_synced_push_receipt "$SUMMARY_PUSH") || { printf '%s\n' "$SUMMARY_PUSH" >&2; echo "Recovery: run oat project pull \"$PROJECT_PATH\", resolve conflicts, then retry this push." >&2; exit 1; }
555
+ else
556
+ git add -- "${PROJECT_OUTPUT_PATHS[@]}"
557
+ git commit --only -m "docs: update summary for {project-name}" -- "${PROJECT_OUTPUT_PATHS[@]}"
558
+ SUMMARY_COMMIT_SHA=$(git rev-parse HEAD)
559
+ fi
460
560
  ```
461
561
 
462
562
  ### Step 9: Output Summary
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-wave-execute
3
- version: 1.8.0
3
+ version: 1.8.2
4
4
  description: Use when executing a wave of external implementation plans as a wrapper OAT project — scaffolding, drift refresh, parallel worktree groups, briefs, gates, merge choreography, and closeout.
5
5
  argument-hint: '<wave-id> [plan-names...] (e.g. wave-2 http-listener-before-indexing ...)'
6
6
  disable-model-invocation: false
@@ -66,6 +66,10 @@ cross-lane synthesis, the end-of-run synthesis, and all user checkpoints.
66
66
  that commit can fail silently; the ORCHESTRATOR commits the gate artifact on
67
67
  the reviewer's behalf. Keep the tree clean around either path (both consumers:
68
68
  stoa waves 2–3; Orc W1–W4).
69
+ Before persisting a gate artifact, resolve the wrapper project's scope with
70
+ `oat project scope "$PROJECT_PATH" --format value` and fail closed. A synced
71
+ wrapper uses `oat project push`; other scopes retain the existing gate-artifact
72
+ branch commit.
69
73
  4. **Pre-declare CUMULATIVE churn in every brief:** declarations cover everything
70
74
  landed since each source plan's AUTHORED COMMIT (drift checks compare against
71
75
  that commit, not the group base), naming files + rough regions. Zero false
@@ -234,6 +238,31 @@ carry the stored verification records required by the fix-disposition contract b
234
238
  `passed` is the only
235
239
  terminal state for gate rows (Orc operator-audit S8).
236
240
 
241
+ Persist the gate artifact and its dispositions through the wrapper project's
242
+ scope-aware bookkeeping route:
243
+
244
+ ```bash
245
+ PROJECT_PATH=$(oat config get activeProject 2>/dev/null || true)
246
+ if [ -z "$PROJECT_PATH" ]; then
247
+ echo "oat: no active wrapper project; refusing wave gate bookkeeping" >&2
248
+ exit 1
249
+ fi
250
+ PROJECT_SCOPE=$(oat project scope "$PROJECT_PATH" --format value) || { echo "oat: cannot resolve project scope for $PROJECT_PATH; refusing wave gate bookkeeping" >&2; exit 1; }
251
+ # fail closed: never fall back to branch bookkeeping when scope resolution fails
252
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
253
+ oat project push "$PROJECT_PATH" --message "chore(oat): record wave plan gate" || { echo "oat: project push failed; run oat project pull, resolve the reported state, and retry" >&2; exit 1; }
254
+ else
255
+ PROJECT_OUTPUT_PATHS=()
256
+ while IFS= read -r output_path; do
257
+ PROJECT_OUTPUT_PATHS+=("$output_path")
258
+ done < <(git diff --name-only -- "$PROJECT_PATH")
259
+ [ "${#PROJECT_OUTPUT_PATHS[@]}" -gt 0 ] || exit 1
260
+ git add -- "${PROJECT_OUTPUT_PATHS[@]}"
261
+ git diff --cached --quiet -- "${PROJECT_OUTPUT_PATHS[@]}" ||
262
+ git commit --only -m "chore(oat): record wave plan gate" -- "${PROJECT_OUTPUT_PATHS[@]}"
263
+ fi
264
+ ```
265
+
237
266
  ### Step 5: Execute via `oat-project-implement`
238
267
 
239
268
  The lifecycle skill owns execution. This skill contributes the templates it uses:
@@ -326,7 +355,10 @@ The lifecycle skill owns execution. This skill contributes the templates it uses
326
355
  `.oat/config.json` keys remain present; this check originated with
327
356
  `BL-260715-investigate-oat-config-json` in the source program's repo. Update
328
357
  canonical sections in place, the run-entry table, review rows, and state;
329
- remove worktrees + branches after merge.
358
+ remove worktrees + branches after merge. Wrapper-project artifact bookkeeping
359
+ at this boundary uses the same fail-closed scope guard and `oat project push`
360
+ when the wrapper is synced; code merge commits remain on the integration
361
+ branch unchanged.
330
362
 
331
363
  ### Step 6: Closeout
332
364
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-worktree-bootstrap
3
- version: 1.2.1
3
+ version: 1.3.1
4
4
  description: Use when creating or resuming a git worktree for OAT implementation. Creates or validates a worktree and runs OAT bootstrap checks.
5
5
  argument-hint: '<branch-name> [--base <ref>] [--path <root>] [--existing]'
6
6
  disable-model-invocation: true
@@ -161,11 +161,23 @@ After config propagation, sync configured `localPaths` into the worktree:
161
161
 
162
162
  ```bash
163
163
  oat local sync "{target-path}" 2>/dev/null || true
164
+ TARGET_ACTIVE_PROJECT=$(cd "{target-path}" && oat config get activeProject 2>/dev/null || true)
165
+ if [ -n "$TARGET_ACTIVE_PROJECT" ]; then
166
+ (
167
+ cd "{target-path}"
168
+ PROJECT_SCOPE=$(oat project scope "$TARGET_ACTIVE_PROJECT" --format value) || exit 1
169
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
170
+ oat project pull "$TARGET_ACTIVE_PROJECT"
171
+ fi
172
+ )
173
+ fi
164
174
  ```
165
175
 
166
176
  - Uses the `localPaths` array from `.oat/config.json` to copy local-only directories (e.g., `.oat/ideas/`, `.oat/projects/local/`) into the worktree.
167
177
  - Non-blocking: if sync fails or no `localPaths` are configured, bootstrap continues.
168
178
  - Does not overwrite existing paths in the target (use `--force` to override).
179
+ - `oat local sync` skips nested synced-project checkouts; the explicit pull
180
+ above materializes or reconciles the active synced project instead.
169
181
 
170
182
  ### Step 3: Resolve and Run the Repository Bootstrap
171
183
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-worktree-bootstrap-auto
3
- version: 1.5.6
3
+ version: 1.6.1
4
4
  description: Use when an orchestrator/subagent needs autonomous worktree bootstrap. Non-interactive companion to oat-worktree-bootstrap.
5
5
  argument-hint: '<branch-name> [--base <ref>] [--path <root>] [--baseline-policy <strict|allow-failing>]'
6
6
  disable-model-invocation: false
@@ -210,10 +210,22 @@ fi
210
210
 
211
211
  ```bash
212
212
  oat local sync "$TARGET_PATH" 2>/dev/null || true
213
+ TARGET_ACTIVE_PROJECT=$(cd "$TARGET_PATH" && oat config get activeProject 2>/dev/null || true)
214
+ if [ -n "$TARGET_ACTIVE_PROJECT" ]; then
215
+ (
216
+ cd "$TARGET_PATH"
217
+ PROJECT_SCOPE=$(oat project scope "$TARGET_ACTIVE_PROJECT" --format value) || exit 1
218
+ if [ "$PROJECT_SCOPE" = "synced" ]; then
219
+ oat project pull "$TARGET_ACTIVE_PROJECT"
220
+ fi
221
+ )
222
+ fi
213
223
  ```
214
224
 
215
225
  - Copies configured `localPaths` (e.g., `.oat/ideas/`, `.oat/projects/local/`) into the worktree.
216
226
  - Non-blocking: if sync fails or no `localPaths` are configured, bootstrap continues.
227
+ - `oat local sync` skips nested synced-project checkouts; the explicit pull
228
+ above materializes or reconciles the active synced project non-interactively.
217
229
 
218
230
  ### Step 2.7: Verify Resolved Base in Worktree HEAD
219
231
 
@@ -9,6 +9,7 @@ interface ConfigCommandDependencies {
9
9
  buildCommandContext: (options: Parameters<typeof buildCommandContext>[0]) => CommandContext;
10
10
  resolveProjectRoot: (cwd: string) => Promise<string>;
11
11
  readOatConfig: (repoRoot: string) => Promise<OatConfig>;
12
+ readOatConfigForDefaultScopeRepair: (repoRoot: string) => Promise<OatConfig>;
12
13
  writeOatConfig: (repoRoot: string, config: OatConfig) => Promise<void>;
13
14
  readOatLocalConfig: (repoRoot: string) => Promise<OatLocalConfig>;
14
15
  writeOatLocalConfig: (repoRoot: string, config: OatLocalConfig) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAmBzC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAehB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyGpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,mCAAmC,EAAE,OAAO,mCAAmC,CAAC;IAChF,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAgiFD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAmBzC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAgBhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0GpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,kCAAkC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7E,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,mCAAmC,EAAE,OAAO,mCAAmC,CAAC;IAChF,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAqkFD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}