@moretea-labs/forge 1.7.0 → 1.7.1
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/AGENTS.md +2 -0
- package/CHANGELOG.md +13 -0
- package/CLAUDE.md +2 -0
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/agents/openai.yaml +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +2 -0
- package/assets/plugin-registry.v1.json +3 -3
- package/assets/skill-version.json +2 -2
- package/assets/templates/helpers/check-architecture-sync.sh +17 -0
- package/assets/templates/helpers/inspect-project-state.ts +8 -6
- package/assets/templates/helpers/migrate-workflow-docs.ts +9 -7
- package/assets/templates/helpers/workflow-contract.ts +5 -1
- package/docs/architecture/CURRENT.md +12 -4
- package/docs/forge-plugin-management.md +1 -1
- package/docs/operations/controller-performance-and-502.md +19 -0
- package/docs/operations/homebrew.md +2 -2
- package/package.json +5 -2
- package/scripts/architecture-event.ts +2 -820
- package/scripts/architecture-queue.sh +2 -645
- package/scripts/archive-architecture-request.sh +2 -242
- package/scripts/archive-workflow.sh +1 -291
- package/scripts/benchmark-work-efficiency.ts +0 -0
- package/scripts/capability-config.ts +2 -392
- package/scripts/capability-resolver.ts +2 -503
- package/scripts/capture-plan.sh +1 -332
- package/scripts/check-agent-tooling.sh +2 -1531
- package/scripts/check-architecture-sync.sh +2 -302
- package/scripts/check-brain-manifest.sh +2 -253
- package/scripts/check-context-files.sh +2 -47
- package/scripts/check-deploy-sql-order.sh +2 -115
- package/scripts/check-runtime-architecture.mjs +243 -16
- package/scripts/check-skill-version.ts +3 -191
- package/scripts/check-source-duplication.mjs +61 -0
- package/scripts/check-stable-baseline.ts +0 -0
- package/scripts/check-task-sync.sh +2 -63
- package/scripts/check-task-workflow.sh +2 -1000
- package/scripts/codex-handoff-resume.sh +2 -267
- package/scripts/context-contract-sync.sh +2 -514
- package/scripts/contract-run.ts +2 -463
- package/scripts/contract-worktree.sh +1 -702
- package/scripts/ensure-task-workflow.sh +1 -1192
- package/scripts/inspect-project-state.ts +4 -279
- package/scripts/lib/project-init-lib.sh +7 -2
- package/scripts/lib/run-forge-helper.sh +19 -0
- package/scripts/lib/run-forge-helper.ts +26 -0
- package/scripts/migrate-project-template.sh +1 -33
- package/scripts/migrate-workflow-docs.ts +4 -412
- package/scripts/new-plan.sh +1 -180
- package/scripts/new-spec.sh +1 -47
- package/scripts/new-sprint.sh +1 -46
- package/scripts/plan-to-todo.sh +1 -771
- package/scripts/prepare-codex-handoff.sh +2 -201
- package/scripts/prepare-handoff.sh +1 -78
- package/scripts/refresh-current-status.sh +2 -467
- package/scripts/run-governed-gate.ts +3 -0
- package/scripts/select-agent-context-blocks.sh +2 -64
- package/scripts/ship-worktrees.sh +1 -531
- package/scripts/sprint-backlog.sh +1 -834
- package/scripts/stage-runtime-release.ts +2 -1
- package/scripts/summarize-failures.sh +2 -123
- package/scripts/switch-plan.sh +1 -150
- package/scripts/sync-brain-docs.sh +2 -379
- package/scripts/sync-generated-authority.mjs +175 -0
- package/scripts/verify-contract.sh +2 -593
- package/scripts/verify-sprint.sh +1 -500
- package/scripts/workflow-contract.ts +4 -201
- package/scripts/workstream-sync.sh +2 -261
- package/src/cli/agent-jobs/executor-health.ts +1 -1
- package/src/cli/commands/plugin.ts +12 -3
- package/src/cli/controller/check-runner.ts +7 -2
- package/src/cli/controller/context-pack.ts +46 -21
- package/src/cli/github/contracts.ts +16 -0
- package/src/cli/github/github.ts +2 -16
- package/src/cli/github/session.ts +2 -1
- package/src/cli/local-bridge/facade-api.ts +37 -47
- package/src/cli/local-bridge/server.ts +2 -2
- package/src/cli/mcp/legacy-tool-service.ts +10 -33
- package/src/cli/mcp/post-finalize-work-attribution.ts +150 -0
- package/src/cli/mcp/repository-tools.ts +85 -89
- package/src/cli/mcp/server.ts +57 -13
- package/src/cli/mcp/tool-contract.ts +14 -0
- package/src/cli/mcp/toolset.ts +2 -2
- package/src/cli/mcp/transports/http.ts +23 -0
- package/src/cli/repositories/command-classifier.ts +2 -2
- package/src/cli/repositories/command-executor.ts +24 -6
- package/src/cli/repositories/repository-snapshot.ts +5 -2
- package/src/cli/repositories/structured-git.ts +57 -3
- package/src/cli/repository/inspector.ts +11 -3
- package/src/runtime/context/generic-lsp-provider.ts +1 -1
- package/src/runtime/context/semantic-navigation-contract.ts +61 -0
- package/src/runtime/context/semantic-navigation.ts +9 -61
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +18 -25
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +106 -0
- package/src/runtime/control-plane/execution/retained-work-resume.ts +203 -0
- package/src/runtime/control-plane/execution/work-completion-authority.ts +58 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +200 -0
- package/src/runtime/control-plane/execution/work-execution-support.ts +386 -0
- package/src/runtime/control-plane/execution/work-finalization-service.ts +1913 -0
- package/src/runtime/control-plane/execution/work-handle-authority.ts +96 -0
- package/src/runtime/control-plane/execution/work-handle-store.ts +1 -1
- package/src/runtime/control-plane/execution/work-operation-service.ts +468 -0
- package/src/runtime/control-plane/execution/work-path-scope.ts +37 -0
- package/src/runtime/control-plane/execution/work-preparation-service.ts +479 -0
- package/src/runtime/control-plane/execution/work-process-evidence.ts +129 -0
- package/src/runtime/control-plane/execution/work-task-receipt.ts +4 -43
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +13 -3
- package/src/runtime/control-plane/execution/work-verification-context.ts +56 -0
- package/src/runtime/control-plane/execution/work-verification-service.ts +388 -0
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
- package/src/runtime/control-plane/facade/controller-round-relay.ts +164 -37
- package/src/runtime/control-plane/facade/controller-session-store.ts +183 -24
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +15 -1
- package/src/runtime/control-plane/facade/goal-workloop.ts +329 -148
- package/src/runtime/control-plane/facade/index.ts +2 -0
- package/src/runtime/control-plane/facade/plan-contract-store.ts +90 -22
- package/src/runtime/control-plane/facade/repository-work-admission.ts +147 -0
- package/src/runtime/control-plane/facade/requirement-authority.ts +83 -0
- package/src/runtime/control-plane/facade/types.ts +68 -5
- package/src/runtime/control-plane/facade/work-contract-store.ts +3 -209
- package/src/runtime/control-plane/facade/work-state-machine.ts +250 -0
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +14 -7
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +5 -1
- package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +13 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +15 -6
- package/src/runtime/control-plane/launcher/launch-reservation-store.ts +54 -5
- package/src/runtime/control-plane/launcher/thin-launcher.ts +56 -7
- package/src/runtime/control-plane/persistence/requirement-store.ts +0 -12
- package/src/runtime/control-plane/repo-actor/registry.ts +4 -2
- package/src/runtime/control-plane/routing/route-policy.ts +18 -6
- package/src/runtime/control-plane/routing/workspace-admission.ts +70 -0
- package/src/runtime/evidence/process-check-execution.ts +18 -0
- package/src/runtime/execution/jobs/child-reference.ts +6 -2
- package/src/runtime/execution/process-runtime/check-result.ts +53 -18
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +7 -1
- package/src/runtime/execution/process-runtime/command-facade.ts +39 -17
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +20 -3
- package/src/runtime/execution/process-runtime/persisted-check.ts +4 -1
- package/src/runtime/execution/process-runtime/runtime.ts +10 -0
- package/src/runtime/execution/process-runtime/types.ts +2 -12
- package/src/runtime/execution/work-activity.ts +21 -0
- package/src/runtime/execution/workers/executor.ts +18 -13
- package/src/runtime/gateway/mcp/execution-tools.ts +35 -2930
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +61 -0
- package/src/runtime/gateway/mcp/router.ts +2 -2
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +21 -2
- package/src/runtime/gateway/mcp/runtime-tools.ts +805 -1009
- package/src/runtime/plugins/app-store-connect-adapter.ts +93 -28
- package/src/runtime/plugins/browser-adapter.ts +256 -1083
- package/src/runtime/plugins/browser-handoff-host.ts +2 -25
- package/src/runtime/plugins/browser-handoff.ts +18 -3
- package/src/runtime/plugins/browser-macos-bridge.ts +121 -16
- package/src/runtime/plugins/browser-manifest-surface.ts +603 -0
- package/src/runtime/plugins/browser-native-session-service.ts +222 -0
- package/src/runtime/plugins/browser-runtime-contract.ts +2 -0
- package/src/runtime/plugins/browser-runtime.ts +10 -0
- package/src/runtime/plugins/browser-session-store.ts +121 -0
- package/src/runtime/plugins/browser-session-types.ts +98 -0
- package/src/runtime/plugins/desktop-operator-registration.ts +4 -4
- package/src/runtime/plugins/external-adapter.ts +92 -58
- package/src/runtime/plugins/macos-capability-broker.ts +0 -8
- package/src/runtime/plugins/store.ts +66 -9
- package/src/runtime/plugins/types.ts +3 -1
- package/src/runtime/recovery/maintenance-executor.ts +61 -25
- package/src/runtime/root/package-connector-service.ts +46 -4
- package/src/runtime/root/package-runtime-release.ts +1 -1
- package/src/runtime/root/package-runtime-service.ts +33 -2
- package/src/runtime/root/release-manifest.ts +137 -16
- package/src/runtime/root/release-materialize.ts +109 -35
- package/src/runtime/root/types.ts +10 -0
- package/src/runtime/standalone-recovery/core.ts +425 -194
- package/src/runtime/standalone-recovery/entry.ts +1 -1
- package/src/runtime/standalone-recovery/installer.ts +1 -1
- package/src/runtime/workflow/schedules/engine.ts +113 -87
- package/src/runtime/workflow/schedules/settlement.ts +26 -23
- package/src/runtime/workflow/schedules/store.ts +79 -10
package/scripts/capture-plan.sh
CHANGED
|
@@ -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
|
-
|
|
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" "$@"
|