@moretea-labs/forge 1.7.0 → 1.7.2

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 (175) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +26 -0
  3. package/CLAUDE.md +2 -0
  4. package/THIRD_PARTY_NOTICES.md +1 -1
  5. package/agents/openai.yaml +1 -1
  6. package/assets/partials-agents/02-operating-mode.partial.md +2 -0
  7. package/assets/plugin-registry.v1.json +3 -3
  8. package/assets/skill-version.json +2 -2
  9. package/assets/templates/helpers/check-architecture-sync.sh +17 -0
  10. package/assets/templates/helpers/inspect-project-state.ts +8 -6
  11. package/assets/templates/helpers/migrate-workflow-docs.ts +9 -7
  12. package/assets/templates/helpers/workflow-contract.ts +5 -1
  13. package/docs/architecture/CURRENT.md +12 -4
  14. package/docs/forge-plugin-management.md +1 -1
  15. package/docs/operations/controller-performance-and-502.md +19 -0
  16. package/docs/operations/homebrew.md +2 -2
  17. package/package.json +5 -2
  18. package/scripts/architecture-event.ts +2 -820
  19. package/scripts/architecture-queue.sh +2 -645
  20. package/scripts/archive-architecture-request.sh +2 -242
  21. package/scripts/archive-workflow.sh +1 -291
  22. package/scripts/benchmark-work-efficiency.ts +0 -0
  23. package/scripts/capability-config.ts +2 -392
  24. package/scripts/capability-resolver.ts +2 -503
  25. package/scripts/capture-plan.sh +1 -332
  26. package/scripts/check-agent-tooling.sh +2 -1531
  27. package/scripts/check-architecture-sync.sh +2 -302
  28. package/scripts/check-brain-manifest.sh +2 -253
  29. package/scripts/check-context-files.sh +2 -47
  30. package/scripts/check-deploy-sql-order.sh +2 -115
  31. package/scripts/check-runtime-architecture.mjs +243 -16
  32. package/scripts/check-skill-version.ts +3 -191
  33. package/scripts/check-source-duplication.mjs +61 -0
  34. package/scripts/check-stable-baseline.ts +0 -0
  35. package/scripts/check-task-sync.sh +2 -63
  36. package/scripts/check-task-workflow.sh +2 -1000
  37. package/scripts/codex-handoff-resume.sh +2 -267
  38. package/scripts/context-contract-sync.sh +2 -514
  39. package/scripts/contract-run.ts +2 -463
  40. package/scripts/contract-worktree.sh +1 -702
  41. package/scripts/ensure-task-workflow.sh +1 -1192
  42. package/scripts/inspect-project-state.ts +4 -279
  43. package/scripts/lib/project-init-lib.sh +7 -2
  44. package/scripts/lib/run-forge-helper.sh +19 -0
  45. package/scripts/lib/run-forge-helper.ts +26 -0
  46. package/scripts/migrate-project-template.sh +1 -33
  47. package/scripts/migrate-workflow-docs.ts +4 -412
  48. package/scripts/new-plan.sh +1 -180
  49. package/scripts/new-spec.sh +1 -47
  50. package/scripts/new-sprint.sh +1 -46
  51. package/scripts/plan-to-todo.sh +1 -771
  52. package/scripts/prepare-codex-handoff.sh +2 -201
  53. package/scripts/prepare-handoff.sh +1 -78
  54. package/scripts/refresh-current-status.sh +2 -467
  55. package/scripts/run-governed-gate.ts +3 -0
  56. package/scripts/select-agent-context-blocks.sh +2 -64
  57. package/scripts/ship-worktrees.sh +1 -531
  58. package/scripts/sprint-backlog.sh +1 -834
  59. package/scripts/stage-runtime-release.ts +2 -1
  60. package/scripts/summarize-failures.sh +2 -123
  61. package/scripts/switch-plan.sh +1 -150
  62. package/scripts/sync-brain-docs.sh +2 -379
  63. package/scripts/sync-generated-authority.mjs +175 -0
  64. package/scripts/verify-contract.sh +2 -593
  65. package/scripts/verify-sprint.sh +1 -500
  66. package/scripts/workflow-contract.ts +4 -201
  67. package/scripts/workstream-sync.sh +2 -261
  68. package/src/cli/agent-jobs/executor-health.ts +1 -1
  69. package/src/cli/commands/plugin.ts +12 -3
  70. package/src/cli/controller/check-runner.ts +7 -2
  71. package/src/cli/controller/context-pack.ts +46 -21
  72. package/src/cli/github/contracts.ts +16 -0
  73. package/src/cli/github/github.ts +2 -16
  74. package/src/cli/github/session.ts +2 -1
  75. package/src/cli/local-bridge/facade-api.ts +37 -47
  76. package/src/cli/local-bridge/server.ts +2 -2
  77. package/src/cli/mcp/legacy-tool-service.ts +10 -33
  78. package/src/cli/mcp/post-finalize-work-attribution.ts +150 -0
  79. package/src/cli/mcp/repository-tools.ts +125 -101
  80. package/src/cli/mcp/server.ts +57 -13
  81. package/src/cli/mcp/tool-contract.ts +14 -0
  82. package/src/cli/mcp/toolset.ts +2 -2
  83. package/src/cli/mcp/transports/http.ts +23 -0
  84. package/src/cli/repositories/command-classifier.ts +2 -2
  85. package/src/cli/repositories/command-executor.ts +24 -6
  86. package/src/cli/repositories/repository-snapshot.ts +5 -2
  87. package/src/cli/repositories/structured-git.ts +57 -3
  88. package/src/cli/repository/inspector.ts +11 -3
  89. package/src/runtime/context/generic-lsp-provider.ts +1 -1
  90. package/src/runtime/context/semantic-navigation-contract.ts +61 -0
  91. package/src/runtime/context/semantic-navigation.ts +9 -61
  92. package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +69 -29
  93. package/src/runtime/control-plane/execution/repository-work-attribution.ts +106 -0
  94. package/src/runtime/control-plane/execution/retained-work-resume.ts +203 -0
  95. package/src/runtime/control-plane/execution/work-completion-authority.ts +58 -0
  96. package/src/runtime/control-plane/execution/work-evidence-policy.ts +200 -0
  97. package/src/runtime/control-plane/execution/work-execution-support.ts +386 -0
  98. package/src/runtime/control-plane/execution/work-finalization-service.ts +1913 -0
  99. package/src/runtime/control-plane/execution/work-handle-authority.ts +150 -0
  100. package/src/runtime/control-plane/execution/work-handle-store.ts +1 -1
  101. package/src/runtime/control-plane/execution/work-operation-service.ts +468 -0
  102. package/src/runtime/control-plane/execution/work-path-scope.ts +37 -0
  103. package/src/runtime/control-plane/execution/work-preparation-service.ts +479 -0
  104. package/src/runtime/control-plane/execution/work-process-evidence.ts +129 -0
  105. package/src/runtime/control-plane/execution/work-task-receipt.ts +4 -43
  106. package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +13 -3
  107. package/src/runtime/control-plane/execution/work-verification-context.ts +56 -0
  108. package/src/runtime/control-plane/execution/work-verification-service.ts +388 -0
  109. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
  110. package/src/runtime/control-plane/facade/controller-round-relay.ts +164 -37
  111. package/src/runtime/control-plane/facade/controller-session-store.ts +183 -24
  112. package/src/runtime/control-plane/facade/goal-workloop-access.ts +15 -1
  113. package/src/runtime/control-plane/facade/goal-workloop.ts +329 -148
  114. package/src/runtime/control-plane/facade/index.ts +2 -0
  115. package/src/runtime/control-plane/facade/plan-contract-store.ts +90 -22
  116. package/src/runtime/control-plane/facade/repository-work-admission.ts +147 -0
  117. package/src/runtime/control-plane/facade/requirement-authority.ts +83 -0
  118. package/src/runtime/control-plane/facade/types.ts +68 -5
  119. package/src/runtime/control-plane/facade/work-contract-store.ts +3 -209
  120. package/src/runtime/control-plane/facade/work-state-machine.ts +250 -0
  121. package/src/runtime/control-plane/global-scheduler/maintenance.ts +14 -7
  122. package/src/runtime/control-plane/global-scheduler/scheduler.ts +5 -1
  123. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +13 -0
  124. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +15 -6
  125. package/src/runtime/control-plane/launcher/launch-reservation-store.ts +54 -5
  126. package/src/runtime/control-plane/launcher/thin-launcher.ts +56 -7
  127. package/src/runtime/control-plane/persistence/requirement-store.ts +0 -12
  128. package/src/runtime/control-plane/repo-actor/registry.ts +4 -2
  129. package/src/runtime/control-plane/routing/route-policy.ts +18 -6
  130. package/src/runtime/control-plane/routing/workspace-admission.ts +70 -0
  131. package/src/runtime/evidence/process-check-execution.ts +18 -0
  132. package/src/runtime/execution/jobs/child-reference.ts +6 -2
  133. package/src/runtime/execution/process-runtime/check-result.ts +53 -18
  134. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +7 -1
  135. package/src/runtime/execution/process-runtime/command-facade.ts +39 -17
  136. package/src/runtime/execution/process-runtime/lightweight-managed.ts +20 -3
  137. package/src/runtime/execution/process-runtime/persisted-check.ts +4 -1
  138. package/src/runtime/execution/process-runtime/runtime.ts +10 -0
  139. package/src/runtime/execution/process-runtime/types.ts +2 -12
  140. package/src/runtime/execution/work-activity.ts +21 -0
  141. package/src/runtime/execution/workers/executor.ts +18 -13
  142. package/src/runtime/gateway/mcp/execution-tools.ts +35 -2930
  143. package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +61 -0
  144. package/src/runtime/gateway/mcp/router.ts +2 -2
  145. package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +21 -2
  146. package/src/runtime/gateway/mcp/runtime-tools.ts +815 -1015
  147. package/src/runtime/plugins/app-store-connect-adapter.ts +93 -28
  148. package/src/runtime/plugins/browser-adapter.ts +256 -1083
  149. package/src/runtime/plugins/browser-handoff-host.ts +2 -25
  150. package/src/runtime/plugins/browser-handoff.ts +18 -3
  151. package/src/runtime/plugins/browser-macos-bridge.ts +121 -16
  152. package/src/runtime/plugins/browser-manifest-surface.ts +603 -0
  153. package/src/runtime/plugins/browser-native-session-service.ts +222 -0
  154. package/src/runtime/plugins/browser-runtime-contract.ts +2 -0
  155. package/src/runtime/plugins/browser-runtime.ts +10 -0
  156. package/src/runtime/plugins/browser-session-store.ts +121 -0
  157. package/src/runtime/plugins/browser-session-types.ts +98 -0
  158. package/src/runtime/plugins/desktop-operator-registration.ts +4 -4
  159. package/src/runtime/plugins/external-adapter.ts +92 -58
  160. package/src/runtime/plugins/macos-capability-broker.ts +0 -8
  161. package/src/runtime/plugins/store.ts +66 -9
  162. package/src/runtime/plugins/types.ts +3 -1
  163. package/src/runtime/recovery/maintenance-executor.ts +61 -25
  164. package/src/runtime/root/package-connector-service.ts +46 -4
  165. package/src/runtime/root/package-runtime-release.ts +3 -2
  166. package/src/runtime/root/package-runtime-service.ts +48 -3
  167. package/src/runtime/root/release-manifest.ts +137 -16
  168. package/src/runtime/root/release-materialize.ts +109 -35
  169. package/src/runtime/root/types.ts +10 -0
  170. package/src/runtime/standalone-recovery/core.ts +425 -194
  171. package/src/runtime/standalone-recovery/entry.ts +1 -1
  172. package/src/runtime/standalone-recovery/installer.ts +1 -1
  173. package/src/runtime/workflow/schedules/engine.ts +113 -87
  174. package/src/runtime/workflow/schedules/settlement.ts +26 -23
  175. package/src/runtime/workflow/schedules/store.ts +79 -10
@@ -1,335 +1,4 @@
1
1
  #!/bin/bash
2
2
  set -euo pipefail
3
-
4
3
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
- if REPO_ROOT="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null)"; then
6
- cd "$REPO_ROOT"
7
- elif [[ "$SCRIPT_DIR" == */.ai/harness/scripts ]]; then
8
- cd "$SCRIPT_DIR/../../.."
9
- else
10
- cd "$SCRIPT_DIR/.."
11
- fi
12
-
13
- _WF_LIB=".ai/hooks/lib/workflow-state.sh"
14
- if [[ -f "$_WF_LIB" ]]; then
15
- # shellcheck source=/dev/null
16
- . "$_WF_LIB"
17
- fi
18
-
19
- usage() {
20
- cat <<'USAGE_EOF'
21
- Usage:
22
- scripts/capture-plan.sh --slug <slug> [--title <title>] [--status Draft|Approved]
23
- [--source <codex-plan|waza-think|forge-plan|forge-sprint>]
24
- [--orchestration-kind <kind>] [--source-ref <ref>]
25
- [--route <route>] [--body-file <file>] [--execute]
26
-
27
- Reads a finished planning note from stdin or --body-file and stores it as a
28
- repo-local plans/plan-*.md artifact with a complete Evidence Contract.
29
- USAGE_EOF
30
- }
31
-
32
- normalize_slug() {
33
- printf '%s' "$1" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/-/g; s/^-+//; s/-+$//; s/-{2,}/-/g'
34
- }
35
-
36
- is_transient_plan_slug() {
37
- case "$1" in
38
- think-plan-[0-9]*|codex-plan-[0-9]*|approved-plan-[0-9]*)
39
- return 0
40
- ;;
41
- esac
42
- return 1
43
- }
44
-
45
- artifact_stem_for_capture() {
46
- local plan_file="$1"
47
- local slug="$2"
48
- local title="$3"
49
- local stem stamp title_slug
50
-
51
- stem="$(basename "$plan_file" .md | sed -E 's/^plan-//')"
52
- if [[ "$stem" =~ ^[0-9]{8}-[0-9]{4}-.+ ]] && is_transient_plan_slug "$slug"; then
53
- title_slug="$(normalize_slug "$title")"
54
- if [[ -n "$title_slug" && "$title_slug" != "$slug" ]]; then
55
- stamp="$(printf '%s' "$stem" | sed -E 's/^([0-9]{8}-[0-9]{4})-.+$/\1/')"
56
- printf '%s-%s' "$stamp" "$title_slug"
57
- return 0
58
- fi
59
- fi
60
-
61
- printf '%s' "$stem"
62
- }
63
-
64
- ACTIVE_PLAN_MARKER=".ai/harness/active-plan"
65
- LEGACY_ACTIVE_PLAN_MARKER=".claude/.active-plan"
66
- ACTIVE_WORKTREE_MARKER=".ai/harness/active-worktree"
67
-
68
- write_active_plan_marker() {
69
- local plan_file="$1"
70
- mkdir -p "$(dirname "$ACTIVE_PLAN_MARKER")" "$(dirname "$LEGACY_ACTIVE_PLAN_MARKER")" "$(dirname "$ACTIVE_WORKTREE_MARKER")"
71
- printf '%s' "$plan_file" > "$ACTIVE_PLAN_MARKER"
72
- printf '%s' "$plan_file" > "$LEGACY_ACTIVE_PLAN_MARKER"
73
- pwd -P > "$ACTIVE_WORKTREE_MARKER"
74
- }
75
-
76
- extract_task_breakdown() {
77
- local body="$1"
78
- local section tasks
79
-
80
- section="$(
81
- printf '%s\n' "$body" | awk '
82
- BEGIN { in_section = 0 }
83
- /^## Task Breakdown[[:space:]]*$/ { in_section = 1; next }
84
- in_section && /^## / { exit }
85
- in_section { print }
86
- '
87
- )"
88
- tasks="$(printf '%s\n' "$section" | grep -E '^[[:space:]]*-[[:space:]]\[[ xX]\][[:space:]]+' || true)"
89
- if [[ -n "$tasks" ]]; then
90
- printf '%s\n' "$tasks"
91
- return 0
92
- fi
93
-
94
- tasks="$(printf '%s\n' "$body" | grep -E '^[[:space:]]*-[[:space:]]\[[ xX]\][[:space:]]+' || true)"
95
- if [[ -n "$tasks" ]]; then
96
- printf '%s\n' "$tasks"
97
- return 0
98
- fi
99
-
100
- return 1
101
- }
102
-
103
- slug=""
104
- title=""
105
- status="Draft"
106
- source_name="host-plan-or-forge-plan"
107
- route="planning"
108
- orchestration_kind="host-plan"
109
- source_ref=""
110
- body_file=""
111
- execute=0
112
- set_active=1
113
-
114
- while [[ $# -gt 0 ]]; do
115
- case "$1" in
116
- --slug)
117
- [[ -n "${2:-}" ]] || { echo "Error: --slug requires a value" >&2; usage; exit 1; }
118
- slug="$2"
119
- shift 2
120
- ;;
121
- --title)
122
- [[ -n "${2:-}" ]] || { echo "Error: --title requires a value" >&2; usage; exit 1; }
123
- title="$2"
124
- shift 2
125
- ;;
126
- --status)
127
- [[ -n "${2:-}" ]] || { echo "Error: --status requires a value" >&2; usage; exit 1; }
128
- status="$2"
129
- shift 2
130
- ;;
131
- --source)
132
- [[ -n "${2:-}" ]] || { echo "Error: --source requires a value" >&2; usage; exit 1; }
133
- source_name="$2"
134
- shift 2
135
- ;;
136
- --orchestration-kind)
137
- [[ -n "${2:-}" ]] || { echo "Error: --orchestration-kind requires a value" >&2; usage; exit 1; }
138
- orchestration_kind="$2"
139
- shift 2
140
- ;;
141
- --source-ref)
142
- [[ -n "${2:-}" ]] || { echo "Error: --source-ref requires a value" >&2; usage; exit 1; }
143
- source_ref="$2"
144
- shift 2
145
- ;;
146
- --route)
147
- [[ -n "${2:-}" ]] || { echo "Error: --route requires a value" >&2; usage; exit 1; }
148
- route="$2"
149
- shift 2
150
- ;;
151
- --body-file)
152
- [[ -n "${2:-}" ]] || { echo "Error: --body-file requires a value" >&2; usage; exit 1; }
153
- body_file="$2"
154
- shift 2
155
- ;;
156
- --execute)
157
- execute=1
158
- shift
159
- ;;
160
- --no-active)
161
- set_active=0
162
- shift
163
- ;;
164
- --help|-h)
165
- usage
166
- exit 0
167
- ;;
168
- *)
169
- echo "Unknown argument: $1" >&2
170
- usage
171
- exit 1
172
- ;;
173
- esac
174
- done
175
-
176
- [[ -n "$slug" ]] || { echo "--slug is required" >&2; usage; exit 1; }
177
- slug="$(normalize_slug "$slug")"
178
- [[ -n "$slug" ]] || { echo "Slug is empty after normalization" >&2; exit 1; }
179
- [[ -n "$title" ]] || title="$slug"
180
-
181
- case "$status" in
182
- Draft|Approved)
183
- ;;
184
- *)
185
- echo "Status must be Draft or Approved (got: $status)" >&2
186
- exit 1
187
- ;;
188
- esac
189
-
190
- if [[ "$execute" -eq 1 && "$status" != "Approved" ]]; then
191
- echo "--execute requires --status Approved" >&2
192
- exit 1
193
- fi
194
-
195
- body=""
196
- if [[ -n "$body_file" ]]; then
197
- [[ -f "$body_file" ]] || { echo "Body file not found: $body_file" >&2; exit 1; }
198
- body="$(cat "$body_file")"
199
- elif [[ ! -t 0 ]]; then
200
- body="$(cat)"
201
- fi
202
-
203
- if [[ -z "$(printf '%s' "$body" | tr -d '[:space:]')" ]]; then
204
- echo "No captured planning content provided. Pipe content on stdin or use --body-file." >&2
205
- exit 1
206
- fi
207
-
208
- timestamp="$(date +%Y%m%d-%H%M)"
209
- mkdir -p plans plans/archive .claude
210
-
211
- plan_file="plans/plan-${timestamp}-${slug}.md"
212
- counter=2
213
- while [[ -f "$plan_file" ]]; do
214
- plan_file="plans/plan-${timestamp}-${slug}-v${counter}.md"
215
- counter=$((counter + 1))
216
- done
217
- artifact_stem="$(artifact_stem_for_capture "$plan_file" "$slug" "$title")"
218
-
219
- tasks="$(extract_task_breakdown "$body" || true)"
220
- if [[ -z "$tasks" ]]; then
221
- tasks="- [ ] Execute captured plan: ${title}"
222
- fi
223
-
224
- cat > "$plan_file" <<PLAN_EOF
225
- # Plan: ${title}
226
-
227
- > **Status**: ${status}
228
- > **Created**: ${timestamp}
229
- > **Slug**: ${slug}
230
- > **Planning Source**: ${source_name}
231
- > **Orchestration Kind**: ${orchestration_kind}
232
- > **Source Ref**: ${source_ref:-"(none)"}
233
- > **Spec**: \`docs/spec.md\`
234
- > **Research**: See \`docs/researches/\`
235
- > **Task Contract**: \`tasks/contracts/${artifact_stem}.contract.md\`
236
- > **Task Review**: \`tasks/reviews/${artifact_stem}.review.md\`
237
- > **Implementation Notes**: \`tasks/notes/${artifact_stem}.notes.md\`
238
-
239
- ## Agentic Routing
240
- - Selected route: ${route}
241
- - Routing reason: Captured from ${source_name} planning output.
242
- - Source ref: ${source_ref:-"(none)"}
243
- - Due diligence:
244
- - P1 map: See captured planning output below.
245
- - P2 trace: See captured planning output below.
246
- - P3 decision rationale: See captured planning output below.
247
-
248
- ## Workflow Inventory
249
- Complete this inventory before implementation. If any line is unknown, keep the plan in Draft and fill it before projection.
250
-
251
- - Active plan: \`${plan_file}\`
252
- - Sprint contract: \`tasks/contracts/${artifact_stem}.contract.md\`
253
- - Sprint review: \`tasks/reviews/${artifact_stem}.review.md\`
254
- - Implementation notes: \`tasks/notes/${artifact_stem}.notes.md\`
255
- - Deferred-goal ledger: \`tasks/todos.md\`
256
- - Current checks: \`.ai/harness/checks/latest.json\`
257
- - Run snapshots: \`.ai/harness/runs/\`
258
- - Scope authority: \`tasks/contracts/${artifact_stem}.contract.md\` \`allowed_paths\`
259
- - Concurrency rule: \`.ai/harness/active-plan\` selects the active plan for this worktree when present; \`.ai/harness/active-worktree\` records the owning worktree; \`.claude/.active-plan\` is a legacy fallback during transition. If another worktree already owns active work, open or switch to the matching worktree instead of serializing unrelated plans.
260
- - Execution isolation: approved contract-level work projects through \`scripts/plan-to-todo.sh --plan ${plan_file}\` and may start \`scripts/contract-worktree.sh start --plan ${plan_file}\`.
261
-
262
- ## Approach
263
- ### Strategy
264
- Use the captured planning output below as the execution source of truth.
265
-
266
- ### Trade-offs
267
- | Option | Pros | Cons | Decision |
268
- |--------|------|------|----------|
269
- | Captured plan | Preserves the approved Codex Plan or Waza think decision | Requires the captured text to be concrete enough to execute | Use |
270
-
271
- ## Detailed Design
272
- ### File Changes
273
- | File | Action | Description |
274
- |------|--------|-------------|
275
- | See captured planning output | Follow | Implement only the approved scope named below |
276
-
277
- ### Code Snippets
278
- See captured planning output.
279
-
280
- ### Data Flow
281
- See captured planning output.
282
-
283
- ## Risk Assessment
284
- | Risk | Likelihood | Impact | Mitigation |
285
- |------|------------|--------|------------|
286
- | Captured plan lacks enough detail | Medium | Execution may need clarification | Stop before implementation if the captured output contradicts repo rules or lacks concrete file targets |
287
-
288
- ## Task Contracts
289
- - Contract file: \`tasks/contracts/${artifact_stem}.contract.md\`
290
- - Review file: \`tasks/reviews/${artifact_stem}.review.md\`
291
- - Implementation notes file: \`tasks/notes/${artifact_stem}.notes.md\`
292
- - Template: \`.claude/templates/contract.template.md\`
293
- - Verification command: \`bash scripts/verify-contract.sh --contract tasks/contracts/${artifact_stem}.contract.md --strict\`
294
- - Active plan rule: this captured plan is written to \`.ai/harness/active-plan\`, the owning worktree is written to \`.ai/harness/active-worktree\`, and the plan is mirrored to \`.claude/.active-plan\` unless --no-active is used. Do not infer active execution from the latest non-archived plan.
295
-
296
- ## Handoff
297
-
298
- - Checks file: \`.ai/harness/checks/latest.json\`
299
- - Session continuation: \`.ai/harness/session/continuation.md\`
300
-
301
- ## Evidence Contract
302
-
303
- - **State/progress path**: \`${plan_file}\` task breakdown, \`tasks/todos.md\` deferred-goal ledger, \`tasks/contracts/${artifact_stem}.contract.md\`, \`tasks/reviews/${artifact_stem}.review.md\`, and \`tasks/notes/${artifact_stem}.notes.md\`
304
- - **Verification evidence**: \`.ai/harness/checks/latest.json\`, \`.ai/harness/runs/\`, and the commands named in the captured planning output
305
- - **Impact review**: after direct checks, reassess user intent, affected domains, downstream consumers, state transitions, and residual risks
306
- - **Stop condition**: all task breakdown items are complete and sprint verification reports direct checks plus declared scope passing
307
- - **Rollback surface**: before execution remove \`${plan_file}\`; after execution revert branch \`codex/${slug}\` or the generated task artifacts
308
-
309
- ## Captured Planning Output
310
-
311
- ${body}
312
-
313
- ## Annotations
314
- <!-- [NOTE]: prefixed inline. Claude processes all and revises. -->
315
-
316
- ## Task Breakdown
317
- ${tasks}
318
- PLAN_EOF
319
-
320
- if [[ "$set_active" -eq 1 ]]; then
321
- write_active_plan_marker "$plan_file"
322
- fi
323
-
324
- if declare -F workflow_clear_pending_orchestration >/dev/null 2>&1; then
325
- workflow_clear_pending_orchestration
326
- else
327
- rm -f .ai/harness/planning/pending.json
328
- fi
329
-
330
- echo "Captured plan: $plan_file"
331
-
332
- if [[ "$execute" -eq 1 ]]; then
333
- [[ -f "scripts/plan-to-todo.sh" ]] || { echo "Missing scripts/plan-to-todo.sh" >&2; exit 1; }
334
- bash "scripts/plan-to-todo.sh" --plan "$plan_file"
335
- fi
4
+ exec "$SCRIPT_DIR/lib/run-forge-helper.sh" "capture-plan.sh" "$@"