okstra 0.102.2 โ 0.102.3
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/README.kr.md +5 -5
- package/README.md +5 -5
- package/docs/kr/architecture/storage-model.md +1 -1
- package/docs/kr/architecture.md +7 -11
- package/docs/kr/cli.md +4 -4
- package/docs/kr/container.md +1 -1
- package/docs/kr/performance-improvement-plan-v2.md +2 -2
- package/docs/project-structure-overview.md +2 -2
- package/package.json +7 -2
- package/runtime/BUILD.json +2 -2
- package/runtime/bin/okstra-antigravity-exec.sh +1 -2
- package/runtime/bin/okstra-codex-exec.sh +1 -2
- package/runtime/bin/okstra-render-final-report.py +2 -9
- package/runtime/bin/okstra-spawn-followups.py +4 -6
- package/runtime/bin/okstra-trace-cleanup.sh +24 -4
- package/runtime/prompts/lead/okstra-lead-contract.md +2 -2
- package/runtime/prompts/lead/report-writer.md +1 -1
- package/runtime/prompts/profiles/_common-contract.md +9 -11
- package/runtime/python/okstra_ctl/codex_dispatch.py +4 -12
- package/runtime/python/okstra_ctl/consumers.py +35 -0
- package/runtime/python/okstra_ctl/container.py +4 -6
- package/runtime/python/okstra_ctl/dispatch_core.py +4 -12
- package/runtime/python/okstra_ctl/final_report_paths.py +24 -0
- package/runtime/python/okstra_ctl/handoff.py +2 -1
- package/runtime/python/okstra_ctl/implementation_stage.py +7 -11
- package/runtime/python/okstra_ctl/report_view_artifacts.py +14 -0
- package/runtime/python/okstra_ctl/report_views.py +7 -4
- package/runtime/python/okstra_ctl/run.py +3 -10
- package/runtime/python/okstra_ctl/stage_targets.py +18 -0
- package/runtime/python/okstra_ctl/wizard.py +24 -25
- package/runtime/python/okstra_ctl/wizard_stage_intent.py +54 -0
- package/runtime/python/okstra_token_usage/report.py +2 -5
- package/runtime/validators/validate-report-views.py +2 -1
- package/runtime/validators/validate-run.py +1 -11
- package/src/commands/lifecycle/install.mjs +5 -5
- package/src/commands/lifecycle/uninstall.mjs +4 -4
- package/docs/superpowers/plans/2026-05-12-ticket-id-in-reports.md +0 -638
- package/docs/superpowers/plans/2026-05-14-convergence-queue-pruning.md +0 -1568
- package/docs/superpowers/plans/2026-05-17-dual-format-final-report.md +0 -167
- package/docs/superpowers/plans/2026-05-20-final-report-language.md +0 -1501
- package/docs/superpowers/plans/2026-05-20-implementation-planning-multi-stage.md +0 -1267
- package/docs/superpowers/plans/2026-05-20-okstra-run-prompt-sot-b1.md +0 -1007
- package/docs/superpowers/plans/2026-05-20-wizard-messages-json-sot.md +0 -720
- package/docs/superpowers/plans/2026-05-20-wizard-prompt-json-sot-a1.md +0 -681
- package/docs/superpowers/plans/2026-05-21-improvement-discovery-task-type.md +0 -1691
- package/docs/superpowers/plans/2026-05-24-implementation-lead-context-slimming.md +0 -1700
- package/docs/superpowers/plans/2026-05-25-okstra-project-root-rename.md +0 -158
- package/docs/superpowers/plans/2026-05-26-wizard-3-option-picker.md +0 -860
- package/docs/superpowers/plans/2026-06-02-final-verification-protocol-hardening.md +0 -326
- package/docs/superpowers/plans/2026-06-02-okstra-run-branch-confirm-step.md +0 -337
- package/docs/superpowers/plans/2026-06-02-okstra-run-phase-pane-cleanup.md +0 -410
- package/docs/superpowers/plans/2026-06-02-requirements-discovery-fanout.md +0 -728
- package/docs/superpowers/plans/2026-06-04-adversarial-implementation-planning.md +0 -294
- package/docs/superpowers/plans/2026-06-04-adversarial-verification.md +0 -570
- package/docs/superpowers/plans/2026-06-04-coverage-critic.md +0 -516
- package/docs/superpowers/plans/2026-06-04-stage-cohesion-planner.md +0 -351
- package/docs/superpowers/plans/2026-06-04-stage-run-batching.md +0 -457
- package/docs/superpowers/plans/2026-06-05-acceptance-critic.md +0 -251
- package/docs/superpowers/plans/2026-06-05-compact-markdown-report-tables.md +0 -323
- package/docs/superpowers/plans/2026-06-05-wizard-batch-prompts.md +0 -559
- package/docs/superpowers/plans/2026-06-06-final-verification-whole-task-gate.md +0 -993
- package/docs/superpowers/plans/2026-06-06-stage-parallel-and-pending-fixes.md +0 -93
- package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p1.md +0 -447
- package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p2.md +0 -289
- package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p3.md +0 -774
- package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p4.md +0 -303
- package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p5-multidep-base.md +0 -387
- package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase2.md +0 -275
- package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase3.md +0 -282
- package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4a.md +0 -147
- package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4b.md +0 -262
- package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4c.md +0 -184
- package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4d.md +0 -88
- package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4e.md +0 -250
- package/docs/superpowers/plans/2026-06-07-stage-conformance-qa.md +0 -409
- package/docs/superpowers/plans/2026-06-09-implementation-run-artifact-stage-isolation.md +0 -320
- package/docs/superpowers/plans/2026-06-10-concurrent-run-team-guard.md +0 -456
- package/docs/superpowers/plans/2026-06-10-git-reconcile-stale-sha-recovery.md +0 -1408
- package/docs/superpowers/plans/2026-06-10-lead-worker-completion-polling-PROBE.md +0 -42
- package/docs/superpowers/plans/2026-06-10-lead-worker-completion-polling.md +0 -337
- package/docs/superpowers/plans/2026-06-10-p6-token-usage-incremental.md +0 -1029
- package/docs/superpowers/plans/2026-06-10-stage-group-handoff.md +0 -1572
- package/docs/superpowers/plans/2026-06-11-fix-cycle.md +0 -1290
- package/docs/superpowers/plans/2026-06-11-wizard-whole-task-final-verification.md +0 -526
- package/docs/superpowers/plans/2026-06-12-html-plan-approval.md +0 -1000
- package/docs/superpowers/plans/2026-06-13-repo-risk-hardening.md +0 -493
- package/docs/superpowers/plans/2026-06-14-host-runtime-auto-execution.md +0 -1775
- package/docs/superpowers/plans/2026-06-15-coding-preflight-pack-dispatch-path.md +0 -504
- package/docs/superpowers/plans/2026-06-15-internal-skill-migration-final-fixups.md +0 -342
- package/docs/superpowers/plans/2026-06-15-internal-skill-migration-fixups.md +0 -258
- package/docs/superpowers/plans/2026-06-15-internal-skill-migration-remaining-fixups.md +0 -387
- package/docs/superpowers/plans/2026-06-15-internal-skill-resource-migration.md +0 -749
- package/docs/superpowers/plans/2026-06-15-worker-prompt-anchor-final-fixups.md +0 -828
- package/docs/superpowers/plans/2026-06-15-worker-prompt-header-error-contract.md +0 -490
- package/docs/superpowers/plans/2026-06-17-okstra-error-report.md +0 -724
- package/docs/superpowers/plans/2026-06-18-subagent-pane-reclaim.md +0 -483
- package/docs/superpowers/plans/2026-06-19-agent-operating-standard.md +0 -476
- package/docs/superpowers/plans/2026-06-19-okstra-inspect-recap-facet.md +0 -647
- package/docs/superpowers/plans/2026-06-20-error-feedback-loop.md +0 -1019
- package/docs/superpowers/plans/2026-06-20-run-index-row-normalization.md +0 -583
- package/docs/superpowers/plans/2026-06-20-stage-auto-integrate-teardown.md +0 -819
- package/docs/superpowers/plans/2026-06-21-okstra-container-local-user-test.md +0 -714
- package/docs/superpowers/plans/2026-06-21-release-handoff-local-checkout.md +0 -348
- package/docs/superpowers/plans/2026-06-23-implementation-stage-multiselect-chain.md +0 -630
- package/docs/superpowers/plans/2026-06-23-implementation-step-commit-granularity.md +0 -274
- package/docs/superpowers/plans/2026-06-23-phase-batch-cleanup-enforcement.md +0 -409
- package/docs/superpowers/plans/2026-06-24-cross-project-precondition.md +0 -542
- package/docs/superpowers/plans/2026-06-24-decision-drafts-render-gap.md +0 -568
- package/docs/superpowers/plans/2026-06-24-manual-user-test-section.md +0 -203
- package/docs/superpowers/plans/2026-06-24-okstra-container-build-rename.md +0 -525
- package/docs/superpowers/specs/2026-05-12-ticket-id-in-reports-design.md +0 -131
- package/docs/superpowers/specs/2026-05-15-implementation-plan-verification-design.md +0 -254
- package/docs/superpowers/specs/2026-05-20-final-report-language-design.md +0 -383
- package/docs/superpowers/specs/2026-05-20-implementation-planning-multi-stage-design.md +0 -322
- package/docs/superpowers/specs/2026-05-20-okstra-run-prompt-sot-design.md +0 -299
- package/docs/superpowers/specs/2026-05-21-improvement-discovery-task-type-design.md +0 -335
- package/docs/superpowers/specs/2026-06-02-okstra-run-branch-confirm-step-design.md +0 -113
- package/docs/superpowers/specs/2026-06-02-okstra-run-phase-pane-cleanup-design.md +0 -173
- package/docs/superpowers/specs/2026-06-02-requirements-discovery-fanout-design.md +0 -154
- package/docs/superpowers/specs/2026-06-04-adversarial-implementation-planning-design.md +0 -90
- package/docs/superpowers/specs/2026-06-04-adversarial-verification-design.md +0 -176
- package/docs/superpowers/specs/2026-06-04-coverage-critic-design.md +0 -99
- package/docs/superpowers/specs/2026-06-04-stage-splitting-cost-aware-design.md +0 -98
- package/docs/superpowers/specs/2026-06-05-acceptance-critic-design.md +0 -90
- package/docs/superpowers/specs/2026-06-05-compact-markdown-report-tables-design.md +0 -87
- package/docs/superpowers/specs/2026-06-05-wizard-batch-prompts-design.md +0 -121
- package/docs/superpowers/specs/2026-06-06-final-verification-whole-task-gate-design.md +0 -126
- package/docs/superpowers/specs/2026-06-06-stage-worktree-isolation-design.md +0 -180
- package/docs/superpowers/specs/2026-06-06-vertical-slice-tdd-planning-design.md +0 -179
- package/docs/superpowers/specs/2026-06-07-stage-conformance-qa-design.md +0 -169
- package/docs/superpowers/specs/2026-06-09-executor-model-custom-id-cascade-design.md +0 -66
- package/docs/superpowers/specs/2026-06-09-implementation-run-artifact-stage-isolation-design.md +0 -87
- package/docs/superpowers/specs/2026-06-10-blocking-contract-posthoc-conformance-design.md +0 -168
- package/docs/superpowers/specs/2026-06-10-concurrent-run-team-guard-design.md +0 -107
- package/docs/superpowers/specs/2026-06-10-git-reconcile-stale-sha-recovery-design.md +0 -105
- package/docs/superpowers/specs/2026-06-10-lead-worker-completion-polling-design.md +0 -113
- package/docs/superpowers/specs/2026-06-10-stage-group-handoff-design.md +0 -156
- package/docs/superpowers/specs/2026-06-11-brief-entry-only-handoff-stage-entry-design.md +0 -158
- package/docs/superpowers/specs/2026-06-11-fix-cycle-design.md +0 -94
- package/docs/superpowers/specs/2026-06-11-wizard-whole-task-final-verification-design.md +0 -89
- package/docs/superpowers/specs/2026-06-12-codex-lead-adapter-design.md +0 -358
- package/docs/superpowers/specs/2026-06-12-html-plan-approval-design.md +0 -85
- package/docs/superpowers/specs/2026-06-12-stage-discipline-rule-design.md +0 -108
- package/docs/superpowers/specs/2026-06-13-forbidden-actions-ssot-design.md +0 -134
- package/docs/superpowers/specs/2026-06-13-neutral-tmux-lead-adapter-design.md +0 -284
- package/docs/superpowers/specs/2026-06-14-host-runtime-auto-execution-design.md +0 -404
- package/docs/superpowers/specs/2026-06-17-okstra-error-report-design.md +0 -123
- package/docs/superpowers/specs/2026-06-18-subagent-pane-reclaim-design.md +0 -150
- package/docs/superpowers/specs/2026-06-19-agent-operating-standard-design.md +0 -120
- package/docs/superpowers/specs/2026-06-19-okstra-inspect-recap-facet-design.md +0 -96
- package/docs/superpowers/specs/2026-06-20-error-feedback-loop-design.md +0 -171
- package/docs/superpowers/specs/2026-06-20-run-index-row-normalization-design.md +0 -112
- package/docs/superpowers/specs/2026-06-20-stage-auto-integrate-teardown-design.md +0 -145
- package/docs/superpowers/specs/2026-06-21-okstra-container-local-user-test-design.md +0 -125
- package/docs/superpowers/specs/2026-06-21-release-handoff-local-checkout-design.md +0 -113
- package/docs/superpowers/specs/2026-06-23-implementation-stage-multiselect-chain-design.md +0 -138
- package/docs/superpowers/specs/2026-06-23-implementation-step-commit-granularity-design.md +0 -120
- package/docs/superpowers/specs/2026-06-24-cross-project-precondition-design.md +0 -129
- package/docs/superpowers/specs/2026-06-24-decision-drafts-render-gap-design.md +0 -185
- package/docs/superpowers/specs/2026-06-24-manual-user-test-section-design.md +0 -121
- package/docs/superpowers/specs/2026-06-24-okstra-container-build-rename-design.md +0 -110
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
# release-handoff stage-group ๋ชจ๋ โ ์ค๊ณ
|
|
2
|
-
|
|
3
|
-
- ์์ฑ์ผ: 2026-06-10
|
|
4
|
-
- ์ํ: ์ค๊ณ ์น์ธ๋จ (์ฌ์ฉ์ ์น์ธ 2026-06-10)
|
|
5
|
-
- ์ ํ: [stage-worktree-isolation-design.md](2026-06-06-stage-worktree-isolation-design.md), [final-verification-whole-task-gate-design.md](2026-06-06-final-verification-whole-task-gate-design.md)
|
|
6
|
-
|
|
7
|
-
## 1. ๋ฐฐ๊ฒฝ / ๋ฌธ์
|
|
8
|
-
|
|
9
|
-
stage-worktree-isolation ๋ชจ๋ธ์์ implementation ์ **1 run = 1 stage** ์ด๊ณ stage ๋ง๋ค ๊ฒฉ๋ฆฌ ๋ธ๋์น(`<prefix>-<task-id>-s<N>`)๊ฐ ์๊ธด๋ค. ์ ์ release ๊ฒฝ๋ก๋ "๋ชจ๋ stage ๋ฅผ task-key ๋ธ๋์น์ ์๋ ๋จธ์ง โ whole-task final-verification `accepted` โ release-handoff ๋ก task ๋น PR 1๊ฐ" ๋ค ([final-verification.md:40](../../../prompts/profiles/final-verification.md:40)).
|
|
10
|
-
|
|
11
|
-
๋ฌธ์ : stage ๋จ์๊ฐ ์์ ๋ task ์ ์ฒด๊ฐ ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค PR ํ๋๋ก ๋ด๊ฑฐ๋, ๋ฐ๋๋ก stage ํ๋์ง๋ฆฌ PR ์ ์ฌ๋ฌ ๋ฒ ๋ด๋ ๊ฒ ๋ ๋ค ๋นํจ์จ์ด๋ค. ์ฌ์ฉ์๋ **ํ task ์์์ stage ์ผ๋ถ๋ฅผ ๊ณจ๋ผ ๋ฌถ์ด ํ๋์ PR** ๋ก ๋ด๊ณ ์ถ๋ค (์: stage 2+3 โ PR 1, stage 4+5 โ PR 2).
|
|
12
|
-
|
|
13
|
-
ํ์ฌ ๊ณ์ฝ์ด ์ด๋ฅผ ๋ง๋ ์ง์ ์ธ ๊ณณ:
|
|
14
|
-
|
|
15
|
-
1. release-handoff ์ง์
๊ฒ์ดํธ๊ฐ whole-task `accepted` ๋ณด๊ณ ์ 1๊ฐ๋ฅผ ์๊ตฌ ([release-handoff.md:14](../../../prompts/profiles/release-handoff.md:14)).
|
|
16
|
-
2. ๋จ๋
-stage ๊ฒ์ฆ์ release-handoff ๋ผ์ฐํ
๊ธ์ง ([final-verification.md:29](../../../prompts/profiles/final-verification.md:29), [final-verification.md:40](../../../prompts/profiles/final-verification.md:40)).
|
|
17
|
-
3. release-handoff ๋ ์ปค๋ฐ ์์ฑ ๊ธ์ง ([release-handoff.md:57](../../../prompts/profiles/release-handoff.md:57)) + "okstra ์๋ ๋จธ์ง ์์" ๋น๋ชฉํ ([stage-worktree-isolation-design.md:7](2026-06-06-stage-worktree-isolation-design.md)) โ ๋
๋ฆฝ stage ๋ค์ ์๋ก ๋ค๋ฅธ ๋ธ๋์น์ ์์ด ๋ฌถ์ PR ์ head ๋ธ๋์น๋ฅผ ๋ง๋ค ์ฃผ์ฒด๊ฐ ์๋ค.
|
|
18
|
-
|
|
19
|
-
## 2. ๊ฒฐ์ ์์ฝ (๋ธ๋ ์ธ์คํ ๋ฐ Q&A)
|
|
20
|
-
|
|
21
|
-
| ๊ฒฐ์ ์ | ์ ํ |
|
|
22
|
-
|---|---|
|
|
23
|
-
| ๋ฌถ์ ๋จ์ | ํ task ์์ **stage ์ผ๋ถ ๊ทธ๋ฃน** โ PR 1๊ฐ |
|
|
24
|
-
| ๊ทธ๋ฃน ๊ฒฐ์ ์์ | **release-handoff ์คํ ์ค** ์ฌ์ฉ์๊ฐ PR ๊ฐ๋ฅ stage ๋ชฉ๋ก์์ ์ ํ |
|
|
25
|
-
| ์์ง ๋ธ๋์น(๊ทธ๋ฃน ๋จธ์ง) ์์ | **release-handoff** ๊ฐ ์์ง ๋ธ๋์น ์์ฑ + stage ๋ธ๋์น merge |
|
|
26
|
-
| ๊ฒ์ฆ ๊ฒ์ดํธ | **stage ๋ณ ๋จ๋
-stage `accepted` ํฉ์ฐ** โ ๊ทธ๋ฃน ๋ด ๋ชจ๋ stage ๊ฐ ๊ฐ์ accepted ๋ฉด ์ง์
ํ์ฉ. ๋จธ์ง๋ ์กฐํฉ ์์ฒด๋ ๋ฏธ๊ฒ์ฆ์ด๋ฉฐ ์ถฉ๋ ํ๋ก๋ธ + PR CI ๊ฐ ๋ณด์ |
|
|
27
|
-
| ์์กด ํํฌ ์๋ฐ ์ | **์ฐจ๋จ + ์๋ด** (์ ํ ์๋ ํฌํจ ์๋ โ ์กฐ์ฉํ ๋ฒ์ ํ์ฅ ๋ฐฉ์ง) |
|
|
28
|
-
|
|
29
|
-
## 3. ๋ชฉํ / ๋น๋ชฉํ
|
|
30
|
-
|
|
31
|
-
๋ชฉํ:
|
|
32
|
-
- release-handoff ์ **stage-group ๋ชจ๋** ์ถ๊ฐ: done + ๋จ๋
๊ฒ์ฆ accepted + ๋ฏธ-PR stage ๋ค์ ๊ณจ๋ผ ์์ง ๋ธ๋์น๋ก ๋จธ์งํ๊ณ PR 1๊ฐ ์์ฑ.
|
|
33
|
-
- ์๊ฒฉ ํ์ ยท์์ง ๋จธ์งยทPR ๊ธฐ๋ก์ Python ํฌํผ ํ ๊ณณ์์ **๊ฐ์ ** (์ ์ธ์ด ์๋๋ผ enforcement).
|
|
34
|
-
- ๊ธฐ์กด whole-task ๊ฒฝ๋ก๋ ๋ถ๋ณ โ stage-group ์ ์ถ๊ฐ ๋ชจ๋๋ค.
|
|
35
|
-
|
|
36
|
-
๋น๋ชฉํ:
|
|
37
|
-
- ์ฌ๋ฌ task ๋ฅผ ํ PR ๋ก ๋ฌถ๊ธฐ (task-group ๋จ์ PR).
|
|
38
|
-
- ๊ทธ๋ฃน ์กฐํฉ์ ๋ํ ๋ณ๋ final-verification ๋ชจ๋ ์ ์ค (๊ฒ์ดํธ๋ stage ๋ณ accepted ํฉ์ฐ; ๋จธ์ง ํ ์ฌ๊ฒ์ฆ์ ์ฌ์ฉ์๊ฐ ์ํ๋ฉด ๋จ๋
์ผ๋ก ์ํ).
|
|
39
|
-
- PR ๋จธ์งยท๋ฆด๋ฆฌ์ค ๋ฐํ (๊ธฐ์กด ๋น๋ชฉํ ์ ์ง โ [release-handoff.md:99](../../../prompts/profiles/release-handoff.md:99)).
|
|
40
|
-
- implementation / planning ์ stage ๋ชจ๋ธยทworktree ๋ชจ๋ธ ๋ณ๊ฒฝ.
|
|
41
|
-
|
|
42
|
-
## 4. ํ๋ฆ
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
stage 2 done โโ fv --stage 2 accepted โโ
|
|
46
|
-
stage 3 done โโ fv --stage 3 accepted โโค
|
|
47
|
-
โผ
|
|
48
|
-
release-handoff (stage-group ๋ชจ๋)
|
|
49
|
-
G1 PR base ์ ํ (๊ธฐ์กด Q2 ์ ๋์ผ โ ์์กด ํํฌ ํ์ ์ ํ์ํด ๋งจ ์์ผ๋ก)
|
|
50
|
-
G2 stage ์ ํ (PR ๊ฐ๋ฅ ๋ชฉ๋ก์์ multi-select)
|
|
51
|
-
assemble: ์์ง ๋ธ๋์น ์์ฑ + merge โ okstra_ctl ํฌํผ (๊ฐ์ ์ง์ )
|
|
52
|
-
Q2b ์ถฉ๋ ํ๋ก๋ธ (๊ธฐ์กด)
|
|
53
|
-
Q3 PR ์ ๋ชฉ/๋ณธ๋ฌธ ํ์ธ (๊ธฐ์กด)
|
|
54
|
-
push + gh pr create (head = ์์ง ๋ธ๋์น)
|
|
55
|
-
consumers ์ pr ํ ๊ธฐ๋ก
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
stage-group ๋ชจ๋์์๋ base ์ ํ์ด stage ์ ํ๋ณด๋ค **์์ ๋ค** โ G2 ์กฐ๊ฑด 4(์์กด ํํฌ)์ ancestor ํ์ ๊ณผ assemble ์ด `origin/<chosen-base>` ๋ฅผ ํ์๋ก ํ๊ธฐ ๋๋ฌธ์ด๋ค. whole-task ๋ชจ๋์ ๊ธฐ์กด Q1โQ2 ์์๋ ๋ถ๋ณ.
|
|
59
|
-
|
|
60
|
-
### 4.1 ์ง์
๊ฒ์ดํธ (stage-group ๋ชจ๋)
|
|
61
|
-
|
|
62
|
-
- brief ๊ฐ ๊ทธ๋ฃน ํ๋ณด stage ๋ค์ **๋จ๋
-stage final-verification ๋ณด๊ณ ์ N ๊ฐ**๋ฅผ ์ธ์ฉํ๊ณ , ๊ฐ๊ฐ์ `Verdict Token` ์ด `accepted` ์ธ์ง lead ๊ฐ ํ์ธํ๋ค. whole-task ๋ชจ๋์ ๋จ์ผ ๋ณด๊ณ ์ ๊ฒ์ดํธ([release-handoff.md:14](../../../prompts/profiles/release-handoff.md:14))์ ๋ณ๋ ฌ ๋ถ๊ธฐ.
|
|
63
|
-
- ์ํนํธ๋ฆฌ clean / base ๋ธ๋์น ๊ธ์ง / ์ปค๋ฐ ์กด์ฌ ๊ฒ์ดํธ๋ ๊ธฐ์กด ๊ทธ๋๋ก ([release-handoff.md:16-18](../../../prompts/profiles/release-handoff.md:16)).
|
|
64
|
-
|
|
65
|
-
### 4.2 G2 โ stage ์ ํ
|
|
66
|
-
|
|
67
|
-
lead ๊ฐ ํฌํผ(ยง6)์ G1 ์์ ๊ณ ๋ฅธ base ๋ฅผ ๋๊ฒจ **PR ๊ฐ๋ฅ stage ๋ชฉ๋ก**์ ๋ฐ์ multi-select ๋ก ์ ์ํ๋ค. PR ๊ฐ๋ฅ ์กฐ๊ฑด(์ ๋ถ ํฌํผ๊ฐ ํ์ ):
|
|
68
|
-
|
|
69
|
-
1. consumers `status:done` ([consumers.py:37](../../../scripts/okstra_ctl/consumers.py:37) `latest_done_by_stage`).
|
|
70
|
-
2. ํด๋น stage ์ ๋จ๋
-stage final-verification `accepted` ๊ธฐ๋ก ์กด์ฌ (ยง5.2 `verified` ํ).
|
|
71
|
-
3. ์์ง ์ด๋ค `pr` ํ์๋ ํฌํจ๋์ง ์์ (ยง5.3).
|
|
72
|
-
4. **์์กด ํํฌ**: ๋ชจ๋ ์ ํ stage ๊ฐ (a) ๊ฐ์ ๊ทธ๋ฃน์ ์ ํ๋์๊ฑฐ๋, (b) ์ด๋ฏธ PR ๋จธ์ง๋์ด `origin/<chosen-base>` ์ ancestor (`git merge-base --is-ancestor <์ ํ done head_commit> origin/<base>`). ์๋ฐ ์ ํด๋น ์กฐํฉ์ **์ฐจ๋จ**ํ๊ณ "์ ํ stage <N> ์ ๊ทธ๋ฃน์ ํฌํจํ๊ฑฐ๋ ๋จผ์ PR-๋จธ์ง ํ ์ฌ์๋" ์๋ด. ๊ทผ๊ฑฐ: ๋จ์ผ-์์กด stage ๋ธ๋์น๋ ์ ํ ๋ธ๋์น ์์ ์ ์ธต๋๋ฏ๋ก([stage-worktree-isolation-design.md ยง2.2](2026-06-06-stage-worktree-isolation-design.md)), ์ ํ์ ๋นผ๊ณ ํํ๋ง PR ํ๋ฉด ์ ํ ์ปค๋ฐ์ด ๋ฌต์์ ์ผ๋ก ๋ฐ๋ผ๊ฐ๋ค.
|
|
73
|
-
|
|
74
|
-
### 4.3 assemble โ ์์ง ๋ธ๋์น ์์ฑ + ๋จธ์ง
|
|
75
|
-
|
|
76
|
-
- base: registry task-key ํ์ `implementation_base_commit` ([worktree_registry.py:72](../../../scripts/okstra_ctl/worktree_registry.py:72), [worktree_registry.py:239](../../../scripts/okstra_ctl/worktree_registry.py:239) `get_implementation_base`).
|
|
77
|
-
- ๋ธ๋์น๋ช
: `<work-category-prefix>-<task-id>-g<stage๋ค์ -๋ก ์ฐ๊ฒฐ>` (์: `feat-dev-9184-g2-3`). ์ ๋ ฌ์ stage ๋ฒํธ ์ค๋ฆ์ฐจ์.
|
|
78
|
-
- ์ํฌํธ๋ฆฌ: `~/.okstra/worktrees/<project>/<group>/<task-id>/group-<id>/`, registry ํค `<task-key>#group-<id>` ๋ฅผ flock ์์ฝ โ stage-key ์์ฝ๊ณผ ๋์ผ ๋ฉ์ปค๋์ฆ.
|
|
79
|
-
- merge: ์ ํ stage ๋ธ๋์น๋ค์ stage ๋ฒํธ ์์ผ๋ก `git merge` (merge ์ปค๋ฐ ํ์ฉ). **์ถฉ๋ ์ ์ฆ์ ์ค๋จ**(`git merge --abort` ํ ์ข
๋ฃ) + ์ถฉ๋ ๊ฒฝ๋ก ๋ชฉ๋ก๊ณผ "stage ๊ฐ ์ถฉ๋ โ ์๋ ํด์ ๋๋ ๊ทธ๋ฃน ์ฌ๊ตฌ์ฑ" ์๋ด. rebase / squash / force ๊ธ์ง ์ ์ง.
|
|
80
|
-
- ๋ฉฑ๋ฑ์ฑ: ๋์ผ ๊ทธ๋ฃน ํค์ ์์ง ๋ธ๋์น๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด โ ๊ทธ HEAD ๊ฐ ๋์ผ stage head ๋ค์ merge ๊ฒฐ๊ณผ(๊ฐ stage `done.head_commit` ์ด ๋ชจ๋ ancestor)์ผ ๋๋ง ์ฌ์ฌ์ฉ, ์๋๋ฉด ์๋ฌ๋ก ์ค๋จํ๊ณ ์ ๋ฆฌ ์ ์ฐจ ์๋ด.
|
|
81
|
-
|
|
82
|
-
### 4.4 PR ์ด์ / ๋ณด๊ณ ์
|
|
83
|
-
|
|
84
|
-
- PR ์ ๋ชฉ/๋ณธ๋ฌธ ์ด์ ๊ท์น์ ๊ธฐ์กด๊ณผ ๋์ผํ๋([release-handoff.md:44-49](../../../prompts/profiles/release-handoff.md:44)), ์์ค๊ฐ stage ๋ณ implementation ๋ณด๊ณ ์ + ๋จ๋
๊ฒ์ฆ ๋ณด๊ณ ์ N ๊ฐ๋ก ๋์ด๋๋ค. diff ๋ฒ์๋ `implementation_base_commit..<์์ง ๋ธ๋์น HEAD>`.
|
|
85
|
-
- ์ต์ข
๋ณด๊ณ ์ deliverable ์ **Stage Group** ์น์
์ถ๊ฐ: ์ ํ stage ๋ชฉ๋ก, ๊ฐ stage ์ ๊ฒ์ฆ ๋ณด๊ณ ์ ๊ฒฝ๋กยทVerdict Token, ์์ง ๋ธ๋์น๋ช
, merge ์ปค๋ฐ SHA ๋ชฉ๋ก, ์์กด ํํฌ ํ์ ๊ฒฐ๊ณผ.
|
|
86
|
-
|
|
87
|
-
## 5. ๋ฐ์ดํฐ ๋ชจ๋ธ
|
|
88
|
-
|
|
89
|
-
### 5.1 registry โ ๊ทธ๋ฃน ํค
|
|
90
|
-
|
|
91
|
-
stage-key ์ ๋ํ์ ๊ทธ๋ฃน ํค ์ํธ๋ฆฌ:
|
|
92
|
-
|
|
93
|
-
```jsonc
|
|
94
|
-
"<proj>/<group>/<task-id>#group-g2-3": {
|
|
95
|
-
"branch": "feat-dev-9184-g2-3",
|
|
96
|
-
"worktree_path": ".../<task-id>/group-g2-3",
|
|
97
|
-
"base_ref": "<implementation_base_commit>",
|
|
98
|
-
"stages": [2, 3],
|
|
99
|
-
"status": "active"
|
|
100
|
-
}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### 5.2 consumers โ `verified` ํ (์ ๊ท)
|
|
104
|
-
|
|
105
|
-
๋จ๋
-stage final-verification ์ด `accepted` ๋ก ๋๋๋ฉด plan_run_root ์ consumers.jsonl ์ ๊ธฐ๋กํ๋ค:
|
|
106
|
-
|
|
107
|
-
```jsonc
|
|
108
|
-
{"impl_task_key": "...", "stage": 2, "status": "verified", "verdict": "accepted", "report_path": "...", "ts": "..."}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
- ํ์ฌ [consumers.py:50](../../../scripts/okstra_ctl/consumers.py:50) ์ `append_consumer` ๋ `started|done` ๋ง ํ์ฉ โ ํ์ฉ ์งํฉ์ ํ์ฅํ๋ค.
|
|
112
|
-
- ์ด ํ์ด G2 ์กฐ๊ฑด 2์ SSOT ๋ค. ๋ณด๊ณ ์ ํ์ผ์ ์ฌํ์ฑํ์ง ์๊ณ consumers ๋ง ์ฝ์ด ์๊ฒฉ์ ํ์ ํ๋ค.
|
|
113
|
-
|
|
114
|
-
### 5.3 consumers โ `pr` ํ (์ ๊ท)
|
|
115
|
-
|
|
116
|
-
handoff ๊ฐ PR ์์ฑ(๋๋ ์ฌ์ฌ์ฉ ํ์ธ)์ ์ฑ๊ณตํ๋ฉด ๊ธฐ๋กํ๋ค:
|
|
117
|
-
|
|
118
|
-
```jsonc
|
|
119
|
-
{"impl_task_key": "...", "stages": [2, 3], "status": "pr", "branch": "feat-dev-9184-g2-3", "url": "https://github.com/...", "ts": "..."}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
- "์ด๋ฏธ PR ๋ stage" ํ์ (G2 ์กฐ๊ฑด 3)์ SSOT. whole-task handoff ๋ ๋์ผ ํ์ ๊ธฐ๋กํ๋ค(`stages` = ์ ์ฒด) โ ๋ ๊ฒฝ๋ก์ ์ค๋ณต-PR ๋ฐฉ์ง๊ฐ ํ ๋ฐ์ดํฐ๋ก ์๋ ด.
|
|
123
|
-
|
|
124
|
-
## 6. ๊ฐ์ ์ง์ โ okstra_ctl ํฌํผ
|
|
125
|
-
|
|
126
|
-
์๊ฒฉ ํ์ ยทassembleยท๊ธฐ๋ก์ lead ์ ์์ git ํธ์ถ์ด ์๋๋ผ `scripts/okstra_ctl/` ์ ํฌํผ ํจ์(์: `handoff_assemble`)์ CLI ์๋ธ์ปค๋งจ๋๋ก ๋จ์ผํํ๋ค. lead ๋ ๋ ๋ฒ ํธ์ถํ๋ค:
|
|
127
|
-
|
|
128
|
-
1. `handoff-eligible --base <chosen-base>` โ PR ๊ฐ๋ฅ stage ๋ชฉ๋ก + ๊ฐ stage ์ ์ฐจ๋จ ์ฌ์ (๋ฏธ๊ฒ์ฆ/์ด๋ฏธ PR/์์กด ํํฌ)๋ฅผ JSON ์ผ๋ก ๋ฐํ. G2 ์ ํ์ ๋ฐ์ดํฐ.
|
|
129
|
-
2. `handoff-assemble --stages 2,3 --base <chosen-base>` โ ์กฐ๊ฑด ์ฌ๊ฒ์ฆ(fail-fast, [run.py](../../../scripts/okstra_ctl/run.py) ์ `PrepareError` ํจํด) โ registry ๊ทธ๋ฃน ํค ์์ฝ โ ์์ง ์ํฌํธ๋ฆฌ/๋ธ๋์น ์์ฑ โ merge โ ๊ฒฐ๊ณผ(๋ธ๋์น๋ช
ยทHEADยทmerge SHA ๋ชฉ๋ก) JSON ๋ฐํ. ์๋ฐยท์ถฉ๋ ์ ๋น์ ์ ์ข
๋ฃ + actionable ๋ฉ์์ง.
|
|
130
|
-
|
|
131
|
-
`pr` ํ ๊ธฐ๋ก๋ ํฌํผ ์๋ธ์ปค๋งจ๋(`handoff-record-pr`)๋ก ์ํํด lead ์ ์๊ธฐ JSON append ๋ฅผ ๊ธ์งํ๋ค.
|
|
132
|
-
|
|
133
|
-
> declaration โ enforcement: ํ๋กํ์ผ์ MUST ๋ฌธ๊ตฌ๋ ํฌํผ๊ฐ ๋ณด์ฅํ๋ ๋ถ๋ณ์์ ์์ ์ด๊ณ , ๊ฒ์ฌ ์ฑ
์์ Python ์ ์๋ค โ whole-task ๊ฒ์ดํธ ์ค๊ณ ยง5 ์ ๋์ผ ์์น ([final-verification-whole-task-gate-design.md](2026-06-06-final-verification-whole-task-gate-design.md)).
|
|
134
|
-
|
|
135
|
-
## 7. ๊ณ์ฝ ๋ณ๊ฒฝ์ (๋ฌธ์/ํ๋กํ์ผ)
|
|
136
|
-
|
|
137
|
-
| ํ์ผ | ๋ณ๊ฒฝ |
|
|
138
|
-
|---|---|
|
|
139
|
-
| [release-handoff.md](../../../prompts/profiles/release-handoff.md) | ์ง์
๊ฒ์ดํธ์ stage-group ๋ถ๊ธฐ(ยง4.1), G1ยทG2 ์ ์ค, allowed actions ์ ํฌํผ ํธ์ถยท์์ง merge ์ถ๊ฐ, ์ปค๋ฐ ๊ธ์ง ์กฐํญ์ "์์ง ๋ธ๋์น ์ merge ์ปค๋ฐ๋ง ํ์ฉ, ํ์ผ ๋ณ๊ฒฝ ์ปค๋ฐยทhistory rewrite ๊ธ์ง"๋ก ์ ๋ฐํ, deliverable ์ Stage Group ์น์
|
|
|
140
|
-
| [final-verification.md](../../../prompts/profiles/final-verification.md) | line 29ยท40 ์ ๋จ๋
-stage ๋ผ์ฐํ
๊ธ์ง๋ฅผ "๋จ๋
-stage `accepted` ๋ `release-handoff(stage-group)` ๋ผ์ฐํ
ํ์ฉ"์ผ๋ก ์ํ. whole-task ์ ์ฉ ๋ฌธ๊ตฌ๋ "๋จ์ผ task ์ ์ฒด PR" ํ์ ์ผ๋ก ์์ . accepted ์ consumers `verified` ํ ๊ธฐ๋ก ์๋ฌด ์ถ๊ฐ |
|
|
141
|
-
| [stage-worktree-isolation-design.md](2026-06-06-stage-worktree-isolation-design.md) | ๋น๋ชฉํ "okstra ์๋ ๋จธ์ง ์์"์ "release-handoff stage-group ์์ง ๋จธ์ง๋ ์์ธ(๋ณธ ์ค๊ณ)" ์ฃผ์ |
|
|
142
|
-
| [docs/kr/architecture.md](../../kr/architecture.md) | release-handoff ์ ์ stage-group ๋ชจ๋ยทconsumers `verified`/`pr` ํ ๊ณ์ฝ ๋ฐ์ |
|
|
143
|
-
|
|
144
|
-
## 8. ํ
์คํธ
|
|
145
|
-
|
|
146
|
-
- unit (`tests/`):
|
|
147
|
-
- ์๊ฒฉ ๊ณ์ฐ โ done/verified/pr/์์กด ํํฌ ๊ฐ ์กฐ๊ฑด์ ํฌํจยท์ ์ธ, ancestor ํ์ ๋ถ๊ธฐ.
|
|
148
|
-
- `append_consumer` ํ์ฉ ์งํฉ ํ์ฅ (`verified`, `pr` ํ round-trip).
|
|
149
|
-
- registry ๊ทธ๋ฃน ํค ์์ฝ โ ๋์ ์์ฝ ์ง๋ ฌํ, ๊ธฐ์กด stage-key ์ ๋น์ถฉ๋.
|
|
150
|
-
- assemble โ ์ ์ merge ๊ทธ๋ํ, ์ถฉ๋ ์ ์ค๋จยท์ ๋ฆฌ, ๋ฉฑ๋ฑ ์ฌ์ฌ์ฉ vs ๋ถ์ผ์น ์๋ฌ.
|
|
151
|
-
- e2e: `tests-e2e/scenario-<๋ค์ ๋น ๋ฒํธ>-stage-group-handoff.sh` โ ๋
๋ฆฝ stage 2๊ฐ done + verified โ eligible ๋ชฉ๋ก ํ์ธ โ assemble โ ์์ง ๋ธ๋์น ์ปค๋ฐ ๊ทธ๋ํ(`git merge-base --is-ancestor` ์๋ฐฉํฅ) ๊ฒ์ฆ โ pr ํ ๊ธฐ๋ก ํ์ธ. ์์ `OKSTRA_HOME`(`mktemp -d`) + `trap` ์ ๋ฆฌ ๊ด๋ก ์ค์.
|
|
152
|
-
|
|
153
|
-
## 9. ๋ฏธํด๊ฒฐ / ํ์
|
|
154
|
-
|
|
155
|
-
- ์์ง ์ํฌํธ๋ฆฌยท๋ธ๋์น์ PR ๋จธ์ง ํ ์ ๋ฆฌ๋ ๊ธฐ์กด ์๋ ์ ์ฐจ(`git worktree remove` โ `branch -D` โ registry ํค ์ญ์ )๋ฅผ ๋ฐ๋ฅธ๋ค. ์๋ GC ๋ ํ์.
|
|
156
|
-
- ๊ทธ๋ฃน PR ์ด base ์ ๋จธ์ง๋ ๋ค ๋จ์ stage ๋ค์ whole-task ๊ฒ์ฆ base ์ ํฉ(์ด๋ฏธ ๋จธ์ง๋ stage diff ์ ์ค๋ณต ํ์)์ whole-task ๊ฒ์ดํธ์ ๊ธฐ์กด ancestor ๊ฒ์ฌ๋ก ํก์๋๋์ง ๊ตฌํ ๋จ๊ณ์์ ํ์ธํ๋ค.
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
# brief entry-phase ํ์ + release-handoff task-id ๊ธฐ๋ฐ stage ์ง์
โ ์ค๊ณ
|
|
2
|
-
|
|
3
|
-
- ๋ ์ง: 2026-06-11
|
|
4
|
-
- ์ํ: ๊ตฌํ ์๋ฃ (์ฌ์ฉ์ ์น์ธ ํ ๊ตฌํ โ ยง5.3 ์ manifest ๊ฐฑ์ ํญ๋ชฉ๋ง ๊ตฌํ ์ ์์ )
|
|
5
|
-
- ์ ํ ์ค๊ณ: [2026-06-10-stage-group-handoff-design.md](2026-06-10-stage-group-handoff-design.md) (stage-group ๋ฐฑ์๋), [2026-06-06-stage-worktree-isolation-design.md](2026-06-06-stage-worktree-isolation-design.md)
|
|
6
|
-
|
|
7
|
-
## 1. ๋ฐฐ๊ฒฝ / ๋ฌธ์
|
|
8
|
-
|
|
9
|
-
brief ๋ ๋น๊ฐ๋ฐ์ยทํ ํยท์์ด๋์ดยท์๋ฌ ์ ๊ณ ์ด์์ ๋ด๋ **entry-phase ์
๋ ฅ๋ฌผ**์ธ๋ฐ, ํ์ฌ ๊ตฌ์กฐ๋ ๋ชจ๋ phase ์์ brief ๋ฅผ ์์์ฒ๋ผ ์๊ตฌํ๋ค. ์ฌ์ฉ์๊ฐ ์ค์ run ์์ ํ์ธํ ๋ฌธ์ ์ธ ๊ฐ์ง:
|
|
10
|
-
|
|
11
|
-
1. **์์ ๋๊ฐ ์ task-type ์ brief ๋ฅผ ๋ฌป๋๋ค.** brief ๋จ๊ณ์ task-type ํํฐ๊ฐ ์๊ณ ([wizard.py:2367-2382](../../../scripts/okstra_ctl/wizard.py:2367)), ๊ธฐ์กด task ๋ฉด `brief_keep` ์ผ๋ก ์ ์ง/๋ณ๊ฒฝ์ ๋ ๋ฌป๋๋ค([wizard.py:2418-2425](../../../scripts/okstra_ctl/wizard.py:2418)). downstream phase ์ brief ๋ task manifest ์ `taskBriefPath` ๋ก ์ด๋ฏธ ์๋ ํด์ ๊ฐ๋ฅํ๋ฐ๋([wizard.py:830-837](../../../scripts/okstra_ctl/wizard.py:830)) ์ฌ์ฉ์ ์
๋ ฅ์ ์๊ตฌํ๋ค.
|
|
12
|
-
2. **release-handoff ์ ์ค์ง ์
๋ ฅ์ final-verification final-report ์ธ๋ฐ ์์ ๋๋ brief ๊ฒฝ๋ก๋ฅผ ์๊ตฌํ๋ค.** stage-group ๋ชจ๋ ์ง์
์กฐ๊ฑด์ด "brief ๊ฐ ๋จ๋
-stage ๊ฒ์ฆ ๋ณด๊ณ ์ N ๊ฐ๋ฅผ ์ธ์ฉ"์ด๋ผ๋ ์๋ ์์์ด๊ณ ([release-handoff.md:15](../../../prompts/profiles/release-handoff.md:15)), ๊ทธ brief ๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ์๋ํ๋ ์๋ค โ [release-handoff-input.template.md](../../../templates/reports/release-handoff-input.template.md) ๋ ๋ ๋๋ฌ๊ฐ ์๋ ์ฃฝ์ ํ
ํ๋ฆฟ์ด๋ฉฐ ๋จ์ ์ธ์ฉ ์ฌ๋กฏ๋ฟ์ด๋ค. ๋ชจ๋(whole-task/stage-group)๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ์ง์ ๋ ์์ ๋ยทbriefยท๊ฒ์ดํธ ์ด๋์๋ ์๋ค.
|
|
13
|
-
3. **stage ์๊ฒฉ ํ์ ์ธํ๋ผ๋ ์ด๋ฏธ ์๋ค.** `okstra_ctl.handoff.compute_eligibility` ๊ฐ approved plan ์ Stage Map + `consumers.jsonl`(done + `verified` accepted + ๋ฏธ-`pr`)๋ก stage ๋ณ PR ์๊ฒฉ์ ํ์ ํ๋ค([handoff.py:36-39](../../../scripts/okstra_ctl/handoff.py:36)). task-id ๋ง ์์ผ๋ฉด ๊ณ์ฐ๋๋ ์ ๋ณด๋ฅผ brief ์ธ์ฉ์ผ๋ก ์ค๋ณต ์ ์ธํ๊ฒ ํ๋ ๊ฒ์ ๋จ์ผ ์ฐธ์กฐ์ ์๋ฐ์ด๋ค.
|
|
14
|
-
|
|
15
|
-
## 2. ๊ฒฐ์ ์์ฝ (์ฌ์ฉ์ Q&A)
|
|
16
|
-
|
|
17
|
-
| ์ง๋ฌธ | ๊ฒฐ์ |
|
|
18
|
-
|---|---|
|
|
19
|
-
| brief ๋ ์ด๋ phase ์
๋ ฅ์ธ๊ฐ | entry phase(requirements-discovery / error-analysis / improvement-discovery) ์ ์ฉ. downstream ์ task-id ๋ก ์๋ carry-in |
|
|
20
|
-
| release-handoff ์ง์
์
๋ ฅ | brief ๊ฒฝ๋ก๊ฐ ์๋๋ผ task-id. ๊ฒ์ฆ ์๋ฃ(eligible) stage ๋ฅผ ๋ฉํฐ์ ํํ๊ฑฐ๋ ์ ์ฒด ์ ํ |
|
|
21
|
-
| stage ์ ํ ๊ทผ๊ฑฐ | implementation-planning final-report ์ Stage Map + consumers ์ํ (`handoff eligible` ์ฌ์ฌ์ฉ) |
|
|
22
|
-
| PR ์์ฑ ํ stage worktree ์ ๋ฆฌ | **๋ฒ์ ์ ์ธ** (์ฌ์ฉ์ ๊ฒฐ์ โ PR ๋ฆฌ๋ทฐ ์์ ์ด stage ๋ธ๋์น๋ฅผ ์ฌ์ฌ์ฉํ๋ ํ๋ฆ๊ณผ ์ถฉ๋ ์ํ) |
|
|
23
|
-
|
|
24
|
-
## 3. ๋ชฉํ / ๋น๋ชฉํ
|
|
25
|
-
|
|
26
|
-
๋ชฉํ:
|
|
27
|
-
|
|
28
|
-
- ์์ ๋ brief ๋จ๊ณ(`brief_path_pick`/`brief_path`/`brief_keep`)๋ฅผ entry phase ์๋ง ์ ์ฉํ๊ณ , downstream phase ๋ manifest `taskBriefPath` ๋ก ์๋ ํด์ํ๋ค.
|
|
29
|
-
- release-handoff ์์ ๋ ์ง์
์ brief picker ๋์ **eligible stage picker** ๋ก ๊ต์ฒดํ๋ค. ๋ชจ๋๋ ์ ํ ๊ฒฐ๊ณผ๋ก ์๋ ๊ฒฐ์ ๋๋ค.
|
|
30
|
-
- prepare ๊ฐ release-handoff ์ ์
๋ ฅ ๋ฌธ์(๊ฒ์ฆ ๋ณด๊ณ ์ ์ธ์ฉ ๋ํผ)๋ฅผ [release-handoff-input.template.md](../../../templates/reports/release-handoff-input.template.md) ๋ก **์๋ ์์ฑ**ํ๋ค โ ์ฃฝ์ ํ
ํ๋ฆฟ์ ๋ถํ, ์๋ brief ์์ฑ ์ ๊ฑฐ.
|
|
31
|
-
- `--stage`(impl/fv ์ Stage Map ์คํ/๊ฒ์ฆ ์ ํ)์ release-handoff ์ stage ๋ฌถ์ ์ ํ์ **๋ณ๊ฐ ์ฑ๋**๋ก ์ ์งํ๋, ํ์๋ฅผ ์์ ๋ โ render-bundle ๋ก ์ ๋ฌํ๋ `--stages` flag ๋ฅผ ์ ์คํ๋ค.
|
|
32
|
-
|
|
33
|
-
๋น๋ชฉํ:
|
|
34
|
-
|
|
35
|
-
- PR ์์ฑ ํ worktree/branch/registry ์ ๋ฆฌ (์ฌ์ฉ์ ๊ฒฐ์ ์ผ๋ก ์ ์ธ).
|
|
36
|
-
- `handoff eligible / assemble / record-*` ๋ฐฑ์๋ ๋ก์ง ๋ณ๊ฒฝ โ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํ๋ค.
|
|
37
|
-
- ๋ค๋ฅธ phase ์ ์ฃฝ์ input ํ
ํ๋ฆฟ(`error-analysis-input` ๋ฑ) ์ ๋น โ ํ์ ๊ณผ์ (ยง9).
|
|
38
|
-
- okstra-brief ์คํฌ ๋ณ๊ฒฝ โ entry phase ์ฉ๋ ๊ทธ๋๋ก.
|
|
39
|
-
- prepare ์ `--task-brief` ํ์ ๊ณ์ฝ ๋ณ๊ฒฝ โ ์์ ๋/prepare ๊ฐ ์ฑ์ ๋ฃ๋ ๋ฐฉ์๋ง ๋ฐ๋๋ค.
|
|
40
|
-
|
|
41
|
-
## 4. ์ค๊ณ A โ brief ๋ฅผ entry phase ์ ์ฉ์ผ๋ก
|
|
42
|
-
|
|
43
|
-
### 4.1 task-type ๋ถ๋ฅ (SSOT ์์)
|
|
44
|
-
|
|
45
|
-
`wizard.py` ์ ์์ ์ ์ค (๊ธฐ์กด `_STAGE_SCOPED_TASK_TYPES` [wizard.py:89](../../../scripts/okstra_ctl/wizard.py:89) ์ ๋๋ํ):
|
|
46
|
-
|
|
47
|
-
```python
|
|
48
|
-
_BRIEF_ENTRY_TASK_TYPES = ("requirements-discovery", "error-analysis",
|
|
49
|
-
"improvement-discovery")
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
downstream = ๊ทธ ์ธ ์ ๋ถ(implementation-planning, implementation, final-verification, release-handoff).
|
|
53
|
-
|
|
54
|
-
### 4.2 ์์ ๋ ๋จ๊ณ ๋ณ๊ฒฝ
|
|
55
|
-
|
|
56
|
-
- `S_BRIEF_PATH_PICK` / `S_BRIEF_PATH` / `S_BRIEF_KEEP` ์ `applies` ์ `s.task_type in _BRIEF_ENTRY_TASK_TYPES` ๊ฒ์ดํธ ์ถ๊ฐ.
|
|
57
|
-
- ์ฃผ์: ํ์ฌ ์ ๊ท task ํ๋ฆ์ brief ์ ํ์ด task-type ์ ํ๋ณด๋ค **์์ ๋ค**([wizard.py:2373](../../../scripts/okstra_ctl/wizard.py:2373) `is_new_task is True and bool(task_group)`). ๊ฒ์ดํธ๋ฅผ ๋ฃ์ผ๋ ค๋ฉด ์ ๊ท task ์ ๋จ๊ณ ์์๋ฅผ task-type ๋จผ์ ๋ก ์ฌ๋ฐฐ์ดํด์ผ ํ๋ค(ยง8 ํ
์คํธ๋ก ๊ณ ์ ). ๊ธฐ์กด task ํ๋ฆ์ ์ด๋ฏธ task-type ์ดํ์ brief ๋ฅผ ๋ฌป๋๋ค.
|
|
58
|
-
- downstream + ๊ธฐ์กด task: `_existing_task_brief()` ๊ฒฐ๊ณผ๋ฅผ `state.brief_path` ์ **์๋ ์ฃผ์
**ํ๊ณ brief ๊ด๋ จ ๋จ๊ณ๋ฅผ ๋ชจ๋ ๊ฑด๋๋ด๋ค. ์ฌ์ฉ์์๊ฒ echo ํ ์ค๋ก๋ง ์๋ฆฐ๋ค (`brief (carry-in): <path>`).
|
|
59
|
-
- downstream + brief ๋ฏธ๋ฑ๋ก (์ ๊ท task ๋ก downstream type ์ ๊ณ ๋ฅด๊ฑฐ๋ manifest ์ `taskBriefPath` ์์): 3-์ต์
picker (run-prompt ์ถ์ฒ ๊ท์น ์ค์):
|
|
60
|
-
1. (์ถ์ฒ) entry phase ๋ก task-type ๋ณ๊ฒฝ โ picker ๊ฐ entry 3์ข
์ ๋ณด์ฌ์ฃผ๊ณ task-type ๋จ๊ณ๋ก ๋๋๋ฆฐ๋ค.
|
|
61
|
-
2. brief ๊ฒฝ๋ก ์ง์ ์
๋ ฅ โ ํ์ถ๊ตฌ. ์์ผ๋ก ์ด brief ๋ก downstream ๋ถํฐ ์์ํ๋ ๊ธฐ์กด ์ํฌํ๋ก ๋ณด์กด.
|
|
62
|
-
3. ์ค๋จ.
|
|
63
|
-
- release-handoff ๋ ยง5 ์ ์๋ ์์ฑ ์
๋ ฅ์ด brief ์ญํ ์ ๋์ฒดํ๋ฏ๋ก ์ด picker ๋์์์๋ ์ ์ธ๋๋ค.
|
|
64
|
-
|
|
65
|
-
### 4.3 ๊ณ์ฝ ๋ถ๋ณ ์ฌํญ
|
|
66
|
-
|
|
67
|
-
- prepare ์ `--task-brief` ํ์ ๊ฒ์ฆ([run.py:2209-2212](../../../scripts/okstra_ctl/run.py:2209))๊ณผ downstream profile ๋ค์ brief ์ธ์ฉ(์: Requirement Coverage ๊ฐ brief heading ์ธ์ฉ โ [implementation-planning.md:86](../../../prompts/profiles/implementation-planning.md:86))์ ๊ทธ๋๋ก๋ค. brief ๋ ์ฌ์ ํ ์ phase ์ ์๊ตฌ์ฌํญ anchor ๋ค โ ๋ฐ๋๋ ๊ฒ์ "๋๊ฐ ๊ฒฝ๋ก๋ฅผ ๋๋๊ฐ"(์ฌ์ฉ์ โ ์์ ๋ ์๋) ๋ฟ์ด๋ค.
|
|
68
|
-
|
|
69
|
-
## 5. ์ค๊ณ B โ release-handoff: task-id ์ง์
+ eligible stage picker
|
|
70
|
-
|
|
71
|
-
### 5.1 ์์ ๋ ํ๋ฆ (release-handoff ํ์ )
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
task ์ ํ(๊ธฐ์กด task ์ ์ ) โ task-type=release-handoff
|
|
75
|
-
โ approved-plan ์๋ ํด์ (fv ์ ๋์ผ: _latest_implementation_planning_report
|
|
76
|
-
+ frontmatter approved: true ํ์ธ; ์คํจ ์ implementation-planning ์ ํ ์๋ด)
|
|
77
|
-
โ S_HANDOFF_STAGE_PICK (์ ๊ท):
|
|
78
|
-
compute_eligibility ์ง์ ํธ์ถ (python import โ shell-out ๊ธ์ง, ๋จ์ผ ์ฐธ์กฐ์ )
|
|
79
|
-
์ต์
:
|
|
80
|
-
- "์ ์ฒด task (whole-task ๊ฒ์ฆ ๊ธฐ๋ฐ)" โ whole-task fv ๋ณด๊ณ ์(accepted,
|
|
81
|
-
verificationScope=whole-task)๊ฐ ์กด์ฌํ ๋๋ง ๋
ธ์ถ โ whole-task ๋ชจ๋
|
|
82
|
-
- eligible stage ๋ฉํฐ์ ํ (์ ์ฒด eligible ์ ํ = "๋ค ๊ฐ์ด") โ stage-group ๋ชจ๋
|
|
83
|
-
- blocked stage ๋ reasons ์ ํจ๊ป ๋น์ ํ ํ์
|
|
84
|
-
โ (์ดํ ๊ธฐ์กด ๋จ๊ณ: pr-template, ๋ชจ๋ธ/directive ๋ฑ โ ๋ณ๊ฒฝ ์์)
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
- brief ๋จ๊ณ ์์, base-ref ๋จ๊ณ ์์(ํํ ์ ์ง โ PR base ๋ run ์ค G1/Q2 ๊ฐ ๋ฌป๋๋ค).
|
|
88
|
-
- ๋ชจ๋ ์ง๋ฌธ์ ๋ณ๋ ๋จ๊ณ๊ฐ ์๋๋ผ **์ด picker ์ ์ ํ์ง๋ก ํก์**๋๋ค.
|
|
89
|
-
|
|
90
|
-
### 5.2 ์ธ์ ์ ๋ฌ โ `--stages` ์ ์ค
|
|
91
|
-
|
|
92
|
-
- `render_args()` ๊ฐ release-handoff ์ผ ๋ ์ ๊ท ํค `stages` ๋ฅผ ์ฑ์ด๋ค: whole-task = `""`, stage-group = `"2,3"` (csv).
|
|
93
|
-
- `render-bundle` / `okstra.sh` / `okstra_ctl.run` argparse ์ `--stages` ์ถ๊ฐ. **release-handoff ์ธ task-type ์์ ๋น์ด ์์ง ์์ `--stages` ๋ PrepareError** (์ด์ ๊ณ ์น `--stage` ๋น ๊ฐ ๊ท์น๊ณผ ๋์ผํ๊ฒ, ๋น ๋ฌธ์์ด์ ๋ฏธ์ง์ ์ผ๋ก ํต๊ณผ โ [run.py:1124](../../../scripts/okstra_ctl/run.py:1124) ํจํด).
|
|
94
|
-
- `--stage` ์ `--stages` ๋ ๋ค๋ฅธ ์ฑ๋์ด๋ค: ์ ์ = impl/fv ์ Stage Map ์คํ/๊ฒ์ฆ ์ ํ, ํ์ = release-handoff ์ PR ๋ฌถ์ ์ ํ. ๋์๋ง์ ๋ช
์ํ๋ค.
|
|
95
|
-
|
|
96
|
-
### 5.3 prepare โ ์
๋ ฅ ๋ฌธ์ ์๋ ์์ฑ
|
|
97
|
-
|
|
98
|
-
release-handoff prepare ์:
|
|
99
|
-
|
|
100
|
-
1. `compute_eligibility` ๋ก ์ ํ stage ๋ค์ ์๊ฒฉ์ **์ฌ๊ฒ์ฆ** (์์ ๋๋ฅผ ๊ฑฐ์น์ง ์์ CLI ๊ฒฝ๋ก๋ ๊ฐ์ ๊ฐ์ ์ง์ ์ ํต๊ณผ).
|
|
101
|
-
2. ๊ฐ ์ ํ stage ์ ๋จ๋
๊ฒ์ฆ ๋ณด๊ณ ์ ๊ฒฝ๋กยทverdict ๋ฅผ `consumers.jsonl` ์ `verified` ํ(last-wins, [consumers.py:107-111](../../../scripts/okstra_ctl/consumers.py:107))์์ ์์ง. whole-task ๋ฉด ์ต์ whole-task fv final-report ์์ ์์ง.
|
|
102
|
-
3. [release-handoff-input.template.md](../../../templates/reports/release-handoff-input.template.md) ๋ฅผ ๋ ๋๋งํด `<task_root>/release-handoff-input.md` ๋ก ์ ์ฅ(๋งค run ๋ฎ์ด์) โ ์ด ํ์ผ์ด ๊ทธ run ์ brief ์๋ฆฌ(`inp.brief_path`)๋ฅผ ์ฑ์ด๋ค. manifest `taskBriefPath` ๋ **๊ฐฑ์ ํ์ง ์๋๋ค** โ entry brief ํฌ์ธํฐ๋ฅผ ๋ฎ์ผ๋ฉด ์ดํ ๋ค๋ฅธ phase ์ carry-in ์ด handoff input ์ brief ๋ก ์ค์ธํ๊ธฐ ๋๋ฌธ(๊ตฌํ ์ ํ์ ํ spec ์์ ).
|
|
103
|
-
4. run-context ์ `HANDOFF_MODE` (`whole-task` | `stage-group`) ์ `HANDOFF_STAGES` ๋ฅผ ๊ธฐ๋ก.
|
|
104
|
-
|
|
105
|
-
### 5.4 ํ
ํ๋ฆฟ ๊ฐ์
|
|
106
|
-
|
|
107
|
-
`## Source Verification Report` ๋ฅผ ๋จ์/๋ณต์ ๊ฒธ์ฉ์ผ๋ก ๊ต์ฒด:
|
|
108
|
-
|
|
109
|
-
```markdown
|
|
110
|
-
## Source Verification Report
|
|
111
|
-
|
|
112
|
-
- Mode: `whole-task` | `stage-group`
|
|
113
|
-
- Reports (one row per cited final-verification report):
|
|
114
|
-
|
|
115
|
-
| Stage | Report path | Verdict Token (verbatim) | Run timestamp |
|
|
116
|
-
|---|---|---|---|
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
whole-task ๋ชจ๋๋ Stage ์ด์ `(all)` ํ ํ์ผ๋ก ์ฑ์ด๋ค.
|
|
120
|
-
|
|
121
|
-
### 5.5 profile ๊ฐ์ ([release-handoff.md](../../../prompts/profiles/release-handoff.md))
|
|
122
|
-
|
|
123
|
-
- ์ง์
๊ฒ์ดํธ(:13-15): "brief ๊ฐ ์ธ์ฉํด์ผ ํ๋ค" โ "prepare ๊ฐ ์์ฑํ input ๋ฌธ์ + run-context ์ `HANDOFF_MODE`/`HANDOFF_STAGES` ๋ฅผ ์ฝ๊ณ , ์ธ์ฉ๋ ๊ฐ Verdict Token ์ด `accepted` ์ธ์ง ํ์ธํ๋ค" ๋ก ๊ต์ฒด.
|
|
124
|
-
- G2(:27): ์์ ๋/CLI ์์ stage ๊ฐ ์ด๋ฏธ ์ ํ๋ผ ์์ผ๋ฏ๋ก **์ฌ์ ํ์ด ์๋๋ผ ํ์ธ ํ์**๋ก ์ถ์ โ ์ ํ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๊ณ ์งํ. `okstra handoff eligible` ์ง์ ํธ์ถ ๋ถ๊ธฐ๋ stage ์ ํ ์์ด ์ง์
ํ ๋น์ ์ ๊ฒฝ๋ก์ ๋ฐฉ์ด๋ก๋ง ๋จ๊ธด๋ค.
|
|
125
|
-
- assemble(:28) ์ดํ ํ๋ฆ(G1 base โ assemble โ Q2b โ Q3, record-pr)์ ๋ถ๋ณ.
|
|
126
|
-
|
|
127
|
-
## 6. ์ค๊ณ C โ final-verification
|
|
128
|
-
|
|
129
|
-
stage picker(done ๋งํน + ์ ์ฒด task ๊ฒ์ฆ)๋ ์ต๊ทผ ์์
์ผ๋ก ์ด๋ฏธ ์ฌ์ฉ์ ๋ชจ๋ธ๊ณผ ์ผ์นํ๋ค. ์ด ์ค๊ณ์์๋ ยง4 ์ brief ์๋ carry-in ๋ง ์ ์ฉ๋๋ค.
|
|
130
|
-
|
|
131
|
-
## 7. ์ํฅ ํ์ผ
|
|
132
|
-
|
|
133
|
-
| ํ์ผ | ๋ณ๊ฒฝ |
|
|
134
|
-
|---|---|
|
|
135
|
-
| [scripts/okstra_ctl/wizard.py](../../../scripts/okstra_ctl/wizard.py) | `_BRIEF_ENTRY_TASK_TYPES`, brief ๋จ๊ณ ๊ฒ์ดํธยท์๋ ์ฃผ์
ยท๋ฏธ๋ฑ๋ก picker, ์ ๊ท task ๋จ๊ณ ์์ ์ฌ๋ฐฐ์ด, `S_HANDOFF_STAGE_PICK`, `render_args` `stages` ํค |
|
|
136
|
-
| [scripts/okstra_ctl/run.py](../../../scripts/okstra_ctl/run.py) | `--stages` argparse + ๊ฒ์ฆ + prepare ์ input ์๋ ์์ฑยท`HANDOFF_MODE`/`HANDOFF_STAGES` |
|
|
137
|
-
| [scripts/okstra_ctl/handoff.py](../../../scripts/okstra_ctl/handoff.py) | (๋ณ๊ฒฝ ์์ โ import ์ฌ์ฌ์ฉ) |
|
|
138
|
-
| [templates/reports/release-handoff-input.template.md](../../../templates/reports/release-handoff-input.template.md) | Source Verification Report ๋ณต์ ์์ |
|
|
139
|
-
| [prompts/profiles/release-handoff.md](../../../prompts/profiles/release-handoff.md) | ์ง์
๊ฒ์ดํธยทG2 ๊ฐ์ |
|
|
140
|
-
| [prompts/wizard/prompts.ko.json](../../../prompts/wizard/prompts.ko.json) | ์ ๊ท/๋ณ๊ฒฝ prompt ๋ฌธ๊ตฌ |
|
|
141
|
-
| [skills/okstra-run/SKILL.md](../../../skills/okstra-run/SKILL.md) | render-bundle ํธ์ถ๋ถ `--stages`, brief ๋จ๊ณ ์์ ๊ฐฑ์ |
|
|
142
|
-
| [scripts/okstra.sh](../../../scripts/okstra.sh) | `--stages` ์ ๋ฌ |
|
|
143
|
-
| [docs/kr/cli.md](../../../docs/kr/cli.md), [docs/kr/architecture.md](../../../docs/kr/architecture.md), [docs/task-process/release-handoff.md](../../../docs/task-process/release-handoff.md) | ๊ณ์ฝ ์์ ๊ฐฑ์ |
|
|
144
|
-
|
|
145
|
-
## 8. ํ
์คํธ
|
|
146
|
-
|
|
147
|
-
- ์์ ๋ ๋จ๊ณ ์ ์ฉ ๋งคํธ๋ฆญ์ค: entry 3์ข
= brief ๋จ๊ณ ๋
ธ์ถ, downstream 4์ข
= ๋ฏธ๋
ธ์ถ + ์๋ ์ฃผ์
echo. ์ ๊ท task ๋จ๊ณ ์์(task-type ์ด brief ๋ณด๋ค ๋จผ์ ) ํ๊ท.
|
|
148
|
-
- downstream + brief ๋ฏธ๋ฑ๋ก โ 3-์ต์
picker ๋
ธ์ถ, ๊ฐ ๋ถ๊ธฐ ๋์.
|
|
149
|
-
- `S_HANDOFF_STAGE_PICK`: eligible/blocked ๊ตฌ์ฑ, whole-task ์ต์
๋
ธ์ถ ์กฐ๊ฑด, ๋ฉํฐ์ ํ โ `render_args["stages"]` csv.
|
|
150
|
-
- `--stages` ๊ฒ์ดํธ: release-handoff ์ธ task-type ์ ๋น์ด ์์ง ์์ ๊ฐ ๊ฑฐ๋ถ, ๋น ๊ฐ ํต๊ณผ (๊ธฐ์กด [tests/test_prepare_stage_flag_gate.py](../../../tests/test_prepare_stage_flag_gate.py) ํจํด).
|
|
151
|
-
- prepare ์
๋ ฅ ์๋ ์์ฑ: verified ํ ์ธ์ฉ ์ ํ์ฑ(๋จ์) + subprocess `--render-only` e2e ๋ก ์์ฑ ํ์ผยทmanifest ๊ฐฑ์ ํ์ธ.
|
|
152
|
-
- profile ๊ณ์ฝ: validators ์ release-handoff ๊ด๋ จ ์ฒดํฌ๊ฐ ์๋ค๋ฉด ๊ฐฑ์ ๋ถ ํต๊ณผ.
|
|
153
|
-
|
|
154
|
-
## 9. ๋ฏธํด๊ฒฐ / ํ์
|
|
155
|
-
|
|
156
|
-
- ๋ค๋ฅธ phase ์ ์ฃฝ์ input ํ
ํ๋ฆฟ([render.py:113-118](../../../scripts/okstra_ctl/render.py:113) ํ๊ทธ๋ง ์กด์ฌ) ์ ๋ฆฌ ๋๋ ๋ถํ โ ๋ณ๋ ๊ณผ์ .
|
|
157
|
-
- PR ์์ฑ ํ stage worktree/branch/registry ์ ๋ฆฌ โ ์ด๋ฒ ๋ฒ์์์ ๋ช
์์ ์ผ๋ก ์ ์ธ(์ฌ์ฉ์ ๊ฒฐ์ ). ์ฌ๋
ผ์ ์ PR ๋ฆฌ๋ทฐ ์์ ํ๋ฆ([okstra-run SKILL.md:228](../../../skills/okstra-run/SKILL.md:228))๊ณผ์ ์ถฉ๋์ ๋จผ์ ํ์ด์ผ ํ๋ค.
|
|
158
|
-
- okstra-brief ์ฒด์ธ ๋ค์ด์ด๊ทธ๋จ([SKILL.md:44-57](../../../skills/okstra-brief/SKILL.md:44))์ release-handoff ์ข
๋จ ํ๊ธฐ ์ ํฉํ.
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
# Fix Cycle โ ์๋ฃ๋ task ์ ์ฌํ ๋ฒ๊ทธ ํซํฝ์ค ์ด๋ ฅ ์ค๊ณ
|
|
2
|
-
|
|
3
|
-
- ๋ ์ง: 2026-06-11
|
|
4
|
-
- ์ํ: ์ค๊ณ ์น์ธ ๋๊ธฐ
|
|
5
|
-
- ๋ฐฐ๊ฒฝ: okstra ๋ก ์๋ฃ(release-handoff ๊น์ง)ํ task ์ ์ฐ์ถ๋ฌผ์์ ์ดํ ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋๋ ๊ฒฝ์ฐ, ๊ฐ์ task-id ์์์ ํซํฝ์ค๋ฅผ ์ํํ๊ณ ๊ทธ ์์ ์ด๋ ฅ์ 1๊ธ ๋ ์ฝ๋๋ก ๋ฑ๋กํ๋ฉฐ, ์ดํ brief / final-report / task ๋ธ๋ผ์ฐ์ง์์ ํด๋น ์ด๋ ฅ์ด ์ธ์ง๋์ด์ผ ํ๋ค.
|
|
6
|
-
|
|
7
|
-
## ๊ฒฐ์ ์์ฝ
|
|
8
|
-
|
|
9
|
-
| ๊ฒฐ์ ์ง์ | ์ ํ |
|
|
10
|
-
|---|---|
|
|
11
|
-
| lifecycle ํํ | ๊ธฐ์กด phase ์ฌ์ง์
(error-analysis โ planning โ implementation โ โฆ) + ์ด๋ ฅ ๊ณ์ธต๋ง ์ ์ค. ์ ์ฉ hotfix task-type ์์ |
|
|
12
|
-
| ์ง์
์๋ณ | ์๋ ๊ฐ์ง + okstra-run wizard ํ์ธ ๋จ๊ณ (`fix_cycle_confirm`), CLI ๋ `--fix-cycle <yes|no>` |
|
|
13
|
-
| ์ด๋ ฅ SSOT | `<task_root>/history/fix-cycles.jsonl` append-only ์ด๋ฒคํธ ํ (consumers.jsonl idiom) |
|
|
14
|
-
| ์๋น์ฒ | โ ํ์ run ์ analysis-packet โก okstra-brief ์ธ์ฉ โข final-report `## 5.10 Fix History` โฃ task-manifest / task-index / task-catalog ์์ฝ |
|
|
15
|
-
|
|
16
|
-
## 1. ๊ฐ๋
๋ชจ๋ธ
|
|
17
|
-
|
|
18
|
-
**fix cycle** ์ "์๋ฃ๋ task ์ ๊ธฐ์กด ์ฐ์ถ๋ฌผ์์ ๋ฐ๊ฒฌ๋ ๋ฒ๊ทธ 1๊ฑด์ ๊ณ ์น๋ ์ฌ์ง์
run ๋ฌถ์"์ด๋ค.
|
|
19
|
-
|
|
20
|
-
- id: `fc-<NN>` (task ๋ด ๋จ์กฐ ์ฆ๊ฐ, 2์๋ฆฌ zero-pad).
|
|
21
|
-
- ์ํ: `open` โ `closed` ๋๋ฟ. ์ด๋ฒคํธ ํ์ผ๋ก ํํํ๋ฉฐ ๋ณ๋ mutable ์ํ ํ์ผ์ ๋์ง ์๋๋ค.
|
|
22
|
-
- ๋์ ๋งํฌ: ํฝ์ค ๋์์ธ ์ด์ final-report ์ project-relative ๊ฒฝ๋ก (`target_report`). open ์์ task-manifest ์ `latestReportPath` ์์ ์ฑ์ด๋ค.
|
|
23
|
-
- ์ฆ์ ํ ์ค(`symptom`): ์ฌ์ง์
brief ์ `Request Summary` ์ฒซ ๋ฌธ์ฅ์์ ํ์ํ๋ค. ์ฌ์ฉ์ ์ถ๊ฐ ์
๋ ฅ ์์.
|
|
24
|
-
- ๋์ open cycle ์ task ๋น 1๊ฐ๋ก ์ ํํ๋ค. ๋ ๋ฒ์งธ ๋ฒ๊ทธ๋ ์ฒซ cycle ์ข
๋ฃ ํ์ ์ฐ๋ค (KISS).
|
|
25
|
-
|
|
26
|
-
## 2. SSOT ํ์ผ ๊ณ์ฝ โ `history/fix-cycles.jsonl`
|
|
27
|
-
|
|
28
|
-
์์น: `<task_root>/history/fix-cycles.jsonl`. reader/writer ๋ ์ ๊ท ๋ชจ๋ `scripts/okstra_ctl/fix_cycles.py` ๋จ ํ ๊ณณ์ด๋ค. [consumers.py](../../../scripts/okstra_ctl/consumers.py) ์ idiom ์ ๊ทธ๋๋ก ๋ฐ๋ฅธ๋ค โ append-only + mutex(`run_context` ์ mutex ํฌํผ ์ฌ์ฌ์ฉ) + last-wins ์ฝ๊ธฐ.
|
|
29
|
-
|
|
30
|
-
์ด๋ฒคํธ ํ 3์ข
:
|
|
31
|
-
|
|
32
|
-
```jsonl
|
|
33
|
-
{"event":"opened","cycle":"fc-01","target_report":"<์๋๊ฒฝ๋ก>","symptom":"...","opened_at":"<ISO>"}
|
|
34
|
-
{"event":"run","cycle":"fc-01","task_type":"error-analysis","run_seq":3,"run_manifest":"<์๋๊ฒฝ๋ก>"}
|
|
35
|
-
{"event":"closed","cycle":"fc-01","closed_by":"release-handoff","report":"<์๋๊ฒฝ๋ก>","closed_at":"<ISO>"}
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
- idempotency ํค: `(cycle, event, run_manifest|None)` ํํ. ๊ฐ์ ํ์ ์ค๋ณต append ๋์ง ์๋๋ค.
|
|
39
|
-
- ๊ฒฝ๋ก ํ๋๋ run-manifest ์ ๊ฐ์ ๊ท์น์ผ๋ก ํ๋ก์ ํธ ๋ฃจํธ ๊ธฐ์ค ์๋๊ฒฝ๋ก๋ง ์ ์ฅํ๋ค.
|
|
40
|
-
- ํ์ ์ฝ๊ธฐ API: `open_cycle(rows) -> dict|None`, `summarize(rows) -> dict` (์๋น์ฒ๋ค์ด ๊ณต์ ). `summarize` ์ `latest` ๋ `{cycle, symptom, targetReport, closedAt}`.
|
|
41
|
-
|
|
42
|
-
## 3. ์ง์
: ์๋ ๊ฐ์ง + wizard ํ์ธ
|
|
43
|
-
|
|
44
|
-
๊ฐ์ง ์กฐ๊ฑด (prepare ์์ ):
|
|
45
|
-
|
|
46
|
-
- ๋์ task ์ `workflow.lastCompletedPhase == "release-handoff"` (done ๊ณ์ด ์ํ), **๊ทธ๋ฆฌ๊ณ **
|
|
47
|
-
- ์ด๋ฒ run ์ task-type ์ด ๋ถ์ entry phase (`requirements-discovery` / `error-analysis` / `implementation-planning`) ์ค ํ๋์ผ ๋.
|
|
48
|
-
- `improvement-discovery` sidetrack ์ ์ ์ธ.
|
|
49
|
-
|
|
50
|
-
ํ์ธ UI:
|
|
51
|
-
|
|
52
|
-
- okstra-run wizard ์ `fix_cycle_confirm` ๋จ๊ณ ์ ์ค โ [wizard.py](../../../scripts/okstra_ctl/wizard.py) ์ `branch_confirm` ๊ณผ ๊ฐ์ step-registry ํจํด (`required` ์ ์ด = ๊ฐ์ง ์กฐ๊ฑด, `owns` = `fix_cycle_confirmed`).
|
|
53
|
-
- ์ต์
: "๋ฒ๊ทธ ํฝ์ค ์ฌ์ดํด๋ก ๊ธฐ๋ก (์ถ์ฒ)" / "์ผ๋ฐ ํ์ ์์
" / "์ง์ ์
๋ ฅ" โ okstra-run ํ๋กฌํํธ 3-์ต์
picker ๊ท์น ์ค์.
|
|
54
|
-
- CLI ๋น๋ํ ๊ฒฝ๋ก(okstra.sh / Node CLI)๋ `--fix-cycle <yes|no>` ํ๋๊ทธ๋ฅผ [prepare_task_bundle()](../../../scripts/okstra_ctl/run.py) ์
๋ ฅ(`PrepareInputs`)์ผ๋ก ์ ๋ฌํ๋ค. ํ๋๊ทธ๊ฐ ์ฃผ์ด์ง๋ฉด wizard ๋จ๊ณ๋ ๊ฑด๋๋ด๋ค. ์ธ entry-point ๋ชจ๋ `prepare_task_bundle` ๋ก ์๋ ดํ๋ ๋จ์ผ ์ฐธ์กฐ ๊ท์น์ ์ ์งํ๋ฉฐ, ํ๊ฒฝ ๋ณ์๋ ์ฌ์ฉํ์ง ์๋๋ค.
|
|
55
|
-
|
|
56
|
-
ํ์ธ๋๋ฉด prepare ๊ฐ `opened` ํ์ ๊ธฐ๋กํ๋ค.
|
|
57
|
-
|
|
58
|
-
## 4. run ๋ถ์ฐฉ๊ณผ ์ข
๋ฃ
|
|
59
|
-
|
|
60
|
-
- cycle ์ด `open` ์ธ ๋์ ๊ฐ์ task ์์ ๋๋ **๋ชจ๋ ** run ์ prepare ๊ฐ `run` ํ์ append ํ๋ค (task-type ๋ถ๋ฌธ โ ํซํฝ์ค ์ฌ์ดํด์ implementation / final-verification / release-handoff ํฌํจ).
|
|
61
|
-
- run-manifest ์ timeline ํญ๋ชฉ์ `fixCycleId` ํ๋๋ฅผ ์ถ๊ฐํ๋ค (open cycle ์์ผ๋ฉด ํ๋ ์๋ต).
|
|
62
|
-
- ์ข
๋ฃ: release-handoff ๊ฒฐ๊ณผ๊ฐ ๊ธฐ๋ก๋์ด workflow ๊ฐ `done-or-follow-up` ์ ๋๋ฌํ๋ ์์ ์ `closed` ํ์ append ํ๋ค ([workflow.py](../../../scripts/okstra_ctl/workflow.py) ์ `DEFAULT_NEXT_PHASE`). final-verification `accepted` ๋ง์ผ๋ก๋ ๋ซ์ง ์๋๋ค โ ์์ง release ๊ฐ ๋๊ฐ์ง ์์ ์ํ์ด๊ธฐ ๋๋ฌธ.
|
|
63
|
-
|
|
64
|
-
## 5. ์๋น์ฒ 4๊ณณ โ ์ ๋ถ ํ์ ๋ทฐ
|
|
65
|
-
|
|
66
|
-
์ฐ๊ธฐ 1๊ณณ(`fix_cycles.py`), ์ฝ๊ธฐ N๊ณณ ์์น. ๋ชจ๋ ์๋น์ฒ๋ `fix_cycles.summarize()` ๊ฐ ๋ง๋ ๊ฐ์ ์์ฝ์ ์ฌ์ฉํ๋ค.
|
|
67
|
-
|
|
68
|
-
1. **analysis-packet**: [analysis_packet.py](../../../scripts/okstra_ctl/analysis_packet.py) ์ `build_analysis_packet()` ์ด fix-cycles.jsonl ์กด์ฌ ์ `## Fix History` ์น์
์ packet ์ ์ฃผ์
ํ๋ค โ open cycle ์์ธ(๋์ ๋ณด๊ณ ์ยท์ฆ์ยท๋ถ์ฐฉ run ๋ชฉ๋ก) + closed cycle ํ ์ค ๋ชฉ๋ก. lead / worker ๊ฐ ๋ถ์ ์
๋ ฅ์ผ๋ก ๋ฐ๋๋ค.
|
|
69
|
-
2. **task-manifest / task-index / task-catalog**: manifest ์ ํ์ ์์ฝ ํ๋ `fixCycles` (`{count, openCycleId|null, latest: {cycle, symptom, targetReport, closedAt}}`), task-index ์ `.okstra/discovery/task-catalog.json` ํญ๋ชฉ์ ๊ฐ์ ์์ฝ 1์ค. manifest/index ์์ฑ ๊ฒฝ๋ก([render.py](../../../scripts/okstra_ctl/render.py))์์ ํจ๊ป ๊ฐฑ์ ํ๋ค.
|
|
70
|
-
3. **final-report**: [final-report.template.md](../../../templates/reports/final-report.template.md) ์ ์กฐ๊ฑด๋ถ `## 5.10 Fix History` ์น์
์ ์ค (5.4~5.9 ์ฌ์ฉ ์ค ํ์ธ). fix cycle ์ ๋ถ์ฐฉ๋ run ์ ๋ณด๊ณ ์์ cycle id ยท ๋์ ๋ณด๊ณ ์ ยท ์ฆ์ ยท cycle ๋ด ์ ํ run ๋ชฉ๋ก์ด ๋ค์ด๊ฐ๋ค. `final_report_schema.py` ์ ๋์ ํ๋๋ฅผ ์ถ๊ฐํ๋ค.
|
|
71
|
-
4. **okstra-brief**: [skills/okstra-brief/SKILL.md](../../../skills/okstra-brief/SKILL.md) Step 3 (domain alignment scan) ์ "๋์ task ์ `history/fix-cycles.jsonl` ์ด ์กด์ฌํ๋ฉด `summarize` ์์ฝ์ ์ฝ์ด brief ์ `Task Continuity Notes` ์ ์ธ์ฉ" ์ง์๋ฅผ ์ถ๊ฐํ๋ค.
|
|
72
|
-
|
|
73
|
-
## 6. ๊ฐ์ ์ง์ (์ ์ธ โ ๊ฐ์ )
|
|
74
|
-
|
|
75
|
-
| ๊ณ์ฝ | ๊ฐ์ ์์น |
|
|
76
|
-
|---|---|
|
|
77
|
-
| ํ ์คํค๋ง ยท idempotency ยท ๋จ์ผ open cycle | `fix_cycles.py` ์ฝ๋ + `tests/test_okstra_fix_cycles.py` |
|
|
78
|
-
| `## 5.10 Fix History` ์น์
ํํ | ๊ธฐ์กด report validator ๊ฒฝ๋ก (`validators/`) ์ ๊ฒ์ฌ ์ถ๊ฐ |
|
|
79
|
-
| wizard ๋จ๊ณ ยท `--fix-cycle` ํ๋๊ทธ | ๊ธฐ์กด wizard / prepare ๋จ์ ํ
์คํธ ํจํด์ผ๋ก ์ปค๋ฒ |
|
|
80
|
-
| ๊ฐ์ง ์กฐ๊ฑด (done + entry phase) | `prepare_task_bundle` ๋จ์ ํ
์คํธ |
|
|
81
|
-
|
|
82
|
-
## 7. ๋ฌธ์
|
|
83
|
-
|
|
84
|
-
- `docs/kr/architecture.md` โ "Phase ๊ฐ ์ ๋ณด ์ ๋ฌ" ์ธ๊ทผ์ "Fix cycle (์ฌํ ๋ฒ๊ทธ ํซํฝ์ค ์ด๋ ฅ)" ์ ์ถ๊ฐ, storage model ํธ๋ฆฌ์ `history/fix-cycles.jsonl` ๋ฐ์.
|
|
85
|
-
- `docs/kr/cli.md` โ `--fix-cycle` ํ๋๊ทธ.
|
|
86
|
-
- `CHANGES.md` โ `์ฌ์ฉ์ ์ํฅ:` ๋ผ์ธ ํฌํจ ํญ๋ชฉ ์ถ๊ฐ.
|
|
87
|
-
- ์ ๋ถ ํ๊ตญ์ด.
|
|
88
|
-
|
|
89
|
-
## ๋น๋ชฉํ
|
|
90
|
-
|
|
91
|
-
- ์ ์ฉ hotfix task-type / fast path ์ ์ค (phase gate ์ฐํ ์์).
|
|
92
|
-
- task ๋น ๋์ ๋ค์ค open cycle.
|
|
93
|
-
- ๊ธฐ์กด timeline.json / run-manifest ์ ๊ตฌ์กฐ ๋ณ๊ฒฝ (`fixCycleId` ํ๋ 1๊ฐ ์ถ๊ฐ ์ธ).
|
|
94
|
-
- ๊ณผ๊ฑฐ ์๋ฃ task ์ ์ด๋ ฅ ์๊ธ backfill.
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
# wizard whole-task final-verification ๋
ธ์ถ ์ค๊ณ
|
|
2
|
-
|
|
3
|
-
- ์์ฑ์ผ: 2026-06-11
|
|
4
|
-
- ์ํ: ์ค๊ณ ์น์ธ๋จ (์ฌ์ฉ์ ์น์ธ 2026-06-11)
|
|
5
|
-
- ์ ํ: [final-verification-whole-task-gate-design.md](2026-06-06-final-verification-whole-task-gate-design.md), ์ปค๋ฐ `54b9482` (stage worktree ๊ธฐ๋ฐ ๊ฒ์ฆ์ผ๋ก ์์ ๋ ๋จ์ํ)
|
|
6
|
-
|
|
7
|
-
## 1. ๋ฐฐ๊ฒฝ / ๋ฌธ์
|
|
8
|
-
|
|
9
|
-
`final-verification` ์ ๋ ๊ฒ์ฆ ๋ชจ๋๋ฅผ ๊ฐ์ง๋ค โ (A) ์ ์ฒด-task ๋ชจ๋(๋ชจ๋ stage ๋จธ์ง ํ ํ ๋ฒ), (B) ๋จ๋
-stage ๋ชจ๋(๊ฒฉ๋ฆฌ worktree์์ ๊ทธ stage๋ง). ์ด ๋ ๋ชจ๋์ ์๋ target ํด์๋ prepare ๋ ์ด์ด์ ์ด๋ฏธ ๊ตฌํ๋ผ ์๋ค([final-verification-whole-task-gate-design.md](2026-06-06-final-verification-whole-task-gate-design.md)).
|
|
10
|
-
|
|
11
|
-
์ปค๋ฐ `54b9482` ์ ๋จ๋
-stage ์์ ๋ UX๋ฅผ ๋จ์ํํ๋ฉด์(`base-ref`/branch-confirm ์๋ต, ๋ช
์ stage ๊ฐ์ ) **์์ ๋์์ ์ ์ฒด-task ๋ชจ๋๋ฅผ ์ ํํ ๊ธธ์ ๋ง์๋ค**:
|
|
12
|
-
|
|
13
|
-
- [`_stage_auto_allowed`](../../../scripts/okstra_ctl/wizard.py:778) ๊ฐ `implementation` ์์๋ง `True` โ final-verification stage picker ์ ์ ์ฒด ์ต์
์ด ๋จ์ง ์๋๋ค.
|
|
14
|
-
- [`_submit_stage_pick`](../../../scripts/okstra_ctl/wizard.py:1539) ์ [`render_args`](../../../scripts/okstra_ctl/wizard.py:2799) ๊ฐ final-verification + ๋น-๋ช
์-stage ๋ฅผ ๊ฑฐ๋ถํ๋ค.
|
|
15
|
-
|
|
16
|
-
๊ฒฐ๊ณผ: ์ ์ฒด-task final-verification ์ CLI `okstra.sh --stage auto` (๋๋ stage ์๋ต)๋ก๋ง ๊ฐ๋ฅํ๊ณ , okstra-run ์์ ๋ ์ฌ์ฉ์๋ ๋๋ฌํ ์ ์๋ค. prepare ๋ ์ด๋ฏธ ์ ์ฒด-task ๋ฅผ ์ง์ํ๋ฏ๋ก([run.py:1829](../../../scripts/okstra_ctl/run.py:1829), [run.py:1533](../../../scripts/okstra_ctl/run.py:1533)) **๋งํ ๊ณณ์ ์์ ๋ ๋ ์ด์ด๋ฟ**์ด๋ค.
|
|
17
|
-
|
|
18
|
-
## 2. ๋ชฉํ / ๋น๋ชฉํ
|
|
19
|
-
|
|
20
|
-
๋ชฉํ:
|
|
21
|
-
- okstra-run ์์ ๋์ final-verification stage picker ์์ **์ ์ฒด-task ๊ฒ์ฆ์ ๋ช
์ ํญ๋ชฉ์ผ๋ก ์ ํ** ๊ฐ๋ฅํ๊ฒ ํ๋ค.
|
|
22
|
-
- picker ์ stage ๋ณ **done ์ํ๋ฅผ ํ์**ํด, ์ ์ฒด-task ๊ฐ ์ ๋๋ ๊ฒฝ์ฐ ์ด๋ stage ๊ฐ ๋ฏธ์์ธ์ง ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ๋ณธ๋ค.
|
|
23
|
-
- prepare ๊ณ์ฝ(CLI `--stage`)์ **๋ณ๊ฒฝํ์ง ์๋๋ค** โ ์์ ๋๊ฐ ๊ธฐ์กด ์ ์ฒด-task ํธ๋ฆฌ๊ฑฐ(๋น stage)๋ฅผ emit ํ๋ค.
|
|
24
|
-
|
|
25
|
-
๋น๋ชฉํ:
|
|
26
|
-
- `implementation` ์ `auto` ํ ํฐ ์๋ฏธ("๊ฐ์ฅ ๋ฎ์ ready stage")๋ฅผ final-verification ์์ ์ฌ์ฌ์ฉํ์ง ์๋๋ค. picker ๋ผ๋ฒจยท๋ด๋ถ ๊ฐ ์ด๋์๋ `auto` ๋ฅผ ์ฐ์ง ์๋๋ค.
|
|
27
|
-
- ๋จธ์ง/clean/active ์ ์ ์ ์์ ๋ ์ฌ์ ๊ฒ์ฌ โ ์ด๋ prepare ์ PrepareError ๊ฒ์ดํธ์ ์์ํ๋ค(ยง4).
|
|
28
|
-
- ์๋ stage ๋จธ์ง(์ฌ์ ํ ์ฌ์ฉ์ ์๋ ๋จธ์ง).
|
|
29
|
-
- prepare / `_reserve_final_verification_target` / target ํด์ ๋ก์ง ๋ณ๊ฒฝ.
|
|
30
|
-
|
|
31
|
-
## 3. ๋
ธ์ถ ํํ โ stage picker ๋ช
์ ํญ๋ชฉ
|
|
32
|
-
|
|
33
|
-
[`_build_stage_pick`](../../../scripts/okstra_ctl/wizard.py:1494) ๊ฐ final-verification ์ผ ๋:
|
|
34
|
-
|
|
35
|
-
1. ๊ฐ stage ํญ๋ชฉ ๋ผ๋ฒจ์ **done ๋งํน**์ ๋ถ์ธ๋ค. ์: `1: <์ ๋ชฉ> [done]` / `2: <์ ๋ชฉ> [๋ฏธ์]`.
|
|
36
|
-
2. **๋ชจ๋ ** Stage Map stage ๊ฐ done ์ด๋ฉด picker ๋งจ ์์ `์ ์ฒด task ๊ฒ์ฆ` ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. done ์ด ์๋ stage ๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ์ด ํญ๋ชฉ์ ๋
ธ์ถํ์ง ์๋๋ค โ picker ์ stage ๋ณ `[๋ฏธ์]` ๋งํน์ด ๊ทธ๋๋ก ๋ณด์ด๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์ ์ ์ฒด ๊ฒ์ฆ์ด ๋ถ๊ฐ๋ฅํ์ง ์๋ช
ํ๋ค.
|
|
37
|
-
|
|
38
|
-
์ด ๊ตฌ์กฐ๋ "stage ๊ฐ done ์ด ์๋ ๊ฑธ ๋ณด์ฌ์ค๋ค" ๋ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ฉด์, ์ ์ฒด-task ์ ํ ๊ฐ๋ฅ ์ฌ๋ถ๋ ๊ฐ์ ํ๋ฉด์์ ๋๋ฌ๋ธ๋ค.
|
|
39
|
-
|
|
40
|
-
## 4. done ์ํ ๋ฐ์ดํฐ์ โ git ํธ์ถ ์์
|
|
41
|
-
|
|
42
|
-
์์ ๋๊ฐ ์ฝ๋ ๊ฒ์ prepare ์ ๋์ผํ SSOT ์ธ `consumers.jsonl` ์ `status:done` ํ๋ฟ์ด๋ค. git ์ํ(๋จธ์ง/clean)๋ ์์ ๋๊ฐ ๊ฒ์ฌํ์ง ์๋๋ค.
|
|
43
|
-
|
|
44
|
-
- `plan_run_root` ๋์ถ: `Path(approved_plan_path).resolve().parents[1]` ([run.py:1525](../../../scripts/okstra_ctl/run.py:1525) ์ ๋์ผ ๊ท์น).
|
|
45
|
-
- done ํ: `backfill_done_from_carry(plan_run_root)` โ `read_consumers(plan_run_root)` โ `latest_done_by_stage(rows)` ([consumers.py:24](../../../scripts/okstra_ctl/consumers.py:24), [consumers.py:37](../../../scripts/okstra_ctl/consumers.py:37), [consumers.py:182](../../../scripts/okstra_ctl/consumers.py:182)).
|
|
46
|
-
- Stage Map: ๊ธฐ์กด `_build_stage_pick` ์ด ์ด๋ฏธ ์น์ธ plan ์ `_parse_stage_map` ์ผ๋ก ํ์ฑํ๋ค([wizard.py:1499](../../../scripts/okstra_ctl/wizard.py:1499)). ๊ทธ stage ๋ฒํธ ์งํฉ๊ณผ done ์งํฉ์ ๋น๊ตํ๋ค.
|
|
47
|
-
|
|
48
|
-
์ฑ
์ ๋ถ๋ด:
|
|
49
|
-
- **์์ ๋**: done ์ฌ๋ถ๋ง ์ฌ์ ํ์(ํ์ผ ์ฝ๊ธฐ). ์ ์ฒด-task ํญ๋ชฉ ๋
ธ์ถ ๊ฒ์ดํธ.
|
|
50
|
-
- **prepare**: ๋จธ์ง(`head_commit` ์ด task worktree HEAD ์ ancestor) ยท clean ยท task-key worktree active ๋ฅผ ์ต์ข
๊ฐ์ . ๋ฏธ์ถฉ์กฑ์ด๋ฉด ๊ธฐ์กด PrepareError ๋ก ์ด๋ stage ๊ฐ ๋ฏธ๋จธ์ง์ธ์ง ์๋ด([run.py:587](../../../scripts/okstra_ctl/run.py:587), [run.py:594](../../../scripts/okstra_ctl/run.py:594), [worktree.py:655](../../../scripts/okstra_ctl/worktree.py:655)).
|
|
51
|
-
|
|
52
|
-
์์ ๋๊ฐ git ์ ํธ์ถํ์ง ์์ผ๋ฏ๋ก picker ๋น๋๊ฐ ๊ฐ๋ณ๊ณ , ์ ์ ๊ฐ์ ๋ ํ ๊ณณ(prepare)์ ๋จ์ผํ๋๋ค.
|
|
53
|
-
|
|
54
|
-
## 5. prepare ๊ณ์ฝ โ ๋น stage emit (๊ณ์ฝ ๋ฌด๋ณ๊ฒฝ)
|
|
55
|
-
|
|
56
|
-
์ ์ฒด-task ์ ํ์ ์์ ๋ ๋ด๋ถ ํํ๊ณผ prepare ๋ก ๋๊ธฐ๋ ๊ฐ์ ๋ถ๋ฆฌํ๋ค:
|
|
57
|
-
|
|
58
|
-
- ์์ ๋ ๋ด๋ถ: `selected_stage` ์ ๋ช
์ sentinel(์: `"whole-task"`)์ ๋ด๋๋ค.
|
|
59
|
-
- [`render_args`](../../../scripts/okstra_ctl/wizard.py:2792): ์ด sentinel ์ **๋น stage(`""`)** ๋ก ๋ณํํด prepare ์ ๋๊ธด๋ค.
|
|
60
|
-
|
|
61
|
-
prepare ๋ ๋น/`auto` stage ๋ฅผ ์ด๋ฏธ ์ ์ฒด-task ๋ก ํด์ํ๋ค(`if inp.stage and inp.stage != "auto"` ์ else ๋ถ๊ธฐ, [run.py:1829](../../../scripts/okstra_ctl/run.py:1829) ยท [run.py:1533](../../../scripts/okstra_ctl/run.py:1533)). ๋ฐ๋ผ์ CLI `--stage` ๊ณ์ฝยทvalidatorยทprepare ๋ถ๊ธฐ ๋ณ๊ฒฝ์ด ์ ํ ์๊ณ , ํ๋ฉด ์ด๋์๋ `auto` ๊ฐ ๋
ธ์ถ๋์ง ์๋๋ค.
|
|
62
|
-
|
|
63
|
-
base-ref / branch-confirm skip ์ ํํ ์ ์ง([`_base_ref_required`](../../../scripts/okstra_ctl/wizard.py:766), [`_branch_confirm_required`](../../../scripts/okstra_ctl/wizard.py:774)) โ ์ ์ฒด-taskยท๋จ๋
-stage ๋ชจ๋ base ๊ฐ prepare ์์ ์๋ ํด์๋๋ฏ๋ก ์์ ๋๊ฐ base ๋ฅผ ๋ฌผ์ ํ์๊ฐ ์๋ค.
|
|
64
|
-
|
|
65
|
-
## 6. ๊ฒ์ดํธ ํจ์ ์กฐ์
|
|
66
|
-
|
|
67
|
-
| ํจ์ | ํ์ฌ | ๋ณ๊ฒฝ |
|
|
68
|
-
|---|---|---|
|
|
69
|
-
| [`_stage_auto_allowed`](../../../scripts/okstra_ctl/wizard.py:778) | `task_type == "implementation"` | final-verification ์์ "์ ์ฒด task" ํญ๋ชฉ ๋
ธ์ถ์ **์ stage done** ์กฐ๊ฑด์ผ๋ก ํ์ฉ. (implementation ์ `auto` ์ ์๋ฏธ๊ฐ ๋ค๋ฅด๋ฏ๋ก ํจ์๋ช
/์๋ ์ฌ์ ์ ๋๋ final-verification ์ ์ฉ ํฌํผ ์ ์ค) |
|
|
70
|
-
| [`_submit_stage_pick`](../../../scripts/okstra_ctl/wizard.py:1539) | `auto` ๋ง ํน์ ์ฒ๋ฆฌ, final-verification+auto ๊ฑฐ๋ถ | "์ ์ฒด task" sentinel ์์ฉ |
|
|
71
|
-
| [`render_args`](../../../scripts/okstra_ctl/wizard.py:2799) | final-verification + (๋น/auto) โ `WizardError` | sentinel โ ๋น stage ๋ณํ(ยง5); ๋จ๋
์ ๊ธฐ์กด๋๋ก ๋ช
์ ๋ฒํธ |
|
|
72
|
-
| [`confirmation_block`](../../../scripts/okstra_ctl/wizard.py:2872) | stage ๊ฐ ๊ทธ๋๋ก ํ๊ธฐ | sentinel ์ ์ฌ๋์ด ์ฝ์ ๋ผ๋ฒจ("์ ์ฒด task")๋ก ํ๊ธฐ |
|
|
73
|
-
|
|
74
|
-
## 7. ํ๋กฌํํธ (prompts/wizard/prompts.ko.json)
|
|
75
|
-
|
|
76
|
-
`stage_pick` ํ๋กฌํํธ์ ์ ์ฒด-task ํญ๋ชฉ ๋ผ๋ฒจ๊ณผ stage done/๋ฏธ์ ๋งํน ๋ฌธ์์ด์ ์ถ๊ฐํ๋ค. `54b9482` ๊ฐ ์ ๊ฑฐํ `auto` ๋ผ๋ฒจ์ ๋ณต์ํ์ง ์๋๋ค โ ์ ๋ผ๋ฒจ์ `auto` ๊ฐ ์๋ "์ ์ฒด task ๊ฒ์ฆ" ๊ณ์ด ๋ฌธ์์ด์ด๋ค.
|
|
77
|
-
|
|
78
|
-
## 8. ํ
์คํธ
|
|
79
|
-
|
|
80
|
-
- `tests/test_wizard_stage_pick.py`: final-verification + ์ stage done โ "์ ์ฒด task" ํญ๋ชฉ ๋
ธ์ถ / ์ผ๋ถ ๋ฏธ์ โ ๋ฏธ๋
ธ์ถ + ํด๋น stage `[๋ฏธ์]` ๋งํน.
|
|
81
|
-
- `tests/test_wizard_final_verification_stage.py`: "์ ์ฒด task" ์ ํ โ `render_args` ๊ฐ ๋น stage emit; ๋จ๋
์ ํ โ ๋ช
์ ๋ฒํธ emit.
|
|
82
|
-
- `tests/test_okstra_ctl_wizard.py`: ์ ์ฒด-task ๊ฒฝ๋ก์์๋ base-ref/branch-confirm ๋จ๊ณ๊ฐ ์๋ต๋๋์ง(ํํ ๋ถ๋ณ ํ๊ท).
|
|
83
|
-
- prepare ์ธก ํ๊ท๋ `tests/test_final_verification_target.py` ๊ธฐ์กด ์ผ์ด์ค๋ก ์ถฉ๋ถ(prepare ๊ณ์ฝ ๋ฌด๋ณ๊ฒฝ).
|
|
84
|
-
|
|
85
|
-
## 9. ๋น๋ณ๊ฒฝ ํ์ธ (ํ๊ท ๊ฐ๋)
|
|
86
|
-
|
|
87
|
-
- prepare ๋ถ๊ธฐยท`_reserve_final_verification_target`ยทtarget ํด์: ๋ณ๊ฒฝ ์์.
|
|
88
|
-
- CLI `okstra.sh --stage`: ๋ณ๊ฒฝ ์์(๋น stage = ์ ์ฒด-task ๋ ๊ธฐ์กด ๊ณ์ฝ).
|
|
89
|
-
- ๋จ๋
-stage ์์ ๋ UX(`54b9482` ๋์
๋ถ): ๋ณ๊ฒฝ ์์.
|