okstra 0.102.1 → 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.
Files changed (162) hide show
  1. package/README.kr.md +5 -6
  2. package/README.md +5 -6
  3. package/docs/kr/architecture/storage-model.md +1 -1
  4. package/docs/kr/architecture.md +8 -12
  5. package/docs/kr/cli.md +6 -6
  6. package/docs/kr/container.md +1 -1
  7. package/docs/kr/performance-improvement-plan-v2.md +2 -2
  8. package/docs/project-structure-overview.md +2 -2
  9. package/package.json +7 -2
  10. package/runtime/BUILD.json +2 -2
  11. package/runtime/bin/okstra-antigravity-exec.sh +1 -2
  12. package/runtime/bin/okstra-codex-exec.sh +1 -2
  13. package/runtime/bin/okstra-render-final-report.py +2 -9
  14. package/runtime/bin/okstra-spawn-followups.py +4 -6
  15. package/runtime/bin/okstra-trace-cleanup.sh +24 -4
  16. package/runtime/prompts/lead/okstra-lead-contract.md +2 -2
  17. package/runtime/prompts/lead/report-writer.md +1 -1
  18. package/runtime/prompts/profiles/_common-contract.md +9 -11
  19. package/runtime/python/okstra_ctl/codex_dispatch.py +4 -12
  20. package/runtime/python/okstra_ctl/consumers.py +35 -0
  21. package/runtime/python/okstra_ctl/container.py +4 -6
  22. package/runtime/python/okstra_ctl/dispatch_core.py +4 -12
  23. package/runtime/python/okstra_ctl/final_report_paths.py +24 -0
  24. package/runtime/python/okstra_ctl/handoff.py +2 -1
  25. package/runtime/python/okstra_ctl/implementation_stage.py +7 -11
  26. package/runtime/python/okstra_ctl/report_view_artifacts.py +14 -0
  27. package/runtime/python/okstra_ctl/report_views.py +7 -4
  28. package/runtime/python/okstra_ctl/run.py +3 -10
  29. package/runtime/python/okstra_ctl/stage_targets.py +18 -0
  30. package/runtime/python/okstra_ctl/wizard.py +24 -25
  31. package/runtime/python/okstra_ctl/wizard_stage_intent.py +54 -0
  32. package/runtime/python/okstra_token_usage/report.py +2 -5
  33. package/runtime/validators/validate-report-views.py +2 -1
  34. package/runtime/validators/validate-run.py +1 -11
  35. package/src/cli-registry.mjs +1 -1
  36. package/src/commands/lifecycle/install.mjs +10 -20
  37. package/src/commands/lifecycle/uninstall.mjs +7 -10
  38. package/docs/superpowers/plans/2026-05-12-ticket-id-in-reports.md +0 -638
  39. package/docs/superpowers/plans/2026-05-14-convergence-queue-pruning.md +0 -1568
  40. package/docs/superpowers/plans/2026-05-17-dual-format-final-report.md +0 -167
  41. package/docs/superpowers/plans/2026-05-20-final-report-language.md +0 -1501
  42. package/docs/superpowers/plans/2026-05-20-implementation-planning-multi-stage.md +0 -1267
  43. package/docs/superpowers/plans/2026-05-20-okstra-run-prompt-sot-b1.md +0 -1007
  44. package/docs/superpowers/plans/2026-05-20-wizard-messages-json-sot.md +0 -720
  45. package/docs/superpowers/plans/2026-05-20-wizard-prompt-json-sot-a1.md +0 -681
  46. package/docs/superpowers/plans/2026-05-21-improvement-discovery-task-type.md +0 -1691
  47. package/docs/superpowers/plans/2026-05-24-implementation-lead-context-slimming.md +0 -1700
  48. package/docs/superpowers/plans/2026-05-25-okstra-project-root-rename.md +0 -158
  49. package/docs/superpowers/plans/2026-05-26-wizard-3-option-picker.md +0 -860
  50. package/docs/superpowers/plans/2026-06-02-final-verification-protocol-hardening.md +0 -326
  51. package/docs/superpowers/plans/2026-06-02-okstra-run-branch-confirm-step.md +0 -337
  52. package/docs/superpowers/plans/2026-06-02-okstra-run-phase-pane-cleanup.md +0 -410
  53. package/docs/superpowers/plans/2026-06-02-requirements-discovery-fanout.md +0 -728
  54. package/docs/superpowers/plans/2026-06-04-adversarial-implementation-planning.md +0 -294
  55. package/docs/superpowers/plans/2026-06-04-adversarial-verification.md +0 -570
  56. package/docs/superpowers/plans/2026-06-04-coverage-critic.md +0 -516
  57. package/docs/superpowers/plans/2026-06-04-stage-cohesion-planner.md +0 -351
  58. package/docs/superpowers/plans/2026-06-04-stage-run-batching.md +0 -457
  59. package/docs/superpowers/plans/2026-06-05-acceptance-critic.md +0 -251
  60. package/docs/superpowers/plans/2026-06-05-compact-markdown-report-tables.md +0 -323
  61. package/docs/superpowers/plans/2026-06-05-wizard-batch-prompts.md +0 -559
  62. package/docs/superpowers/plans/2026-06-06-final-verification-whole-task-gate.md +0 -993
  63. package/docs/superpowers/plans/2026-06-06-stage-parallel-and-pending-fixes.md +0 -93
  64. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p1.md +0 -447
  65. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p2.md +0 -289
  66. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p3.md +0 -774
  67. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p4.md +0 -303
  68. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p5-multidep-base.md +0 -387
  69. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase2.md +0 -275
  70. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase3.md +0 -282
  71. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4a.md +0 -147
  72. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4b.md +0 -262
  73. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4c.md +0 -184
  74. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4d.md +0 -88
  75. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4e.md +0 -250
  76. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa.md +0 -409
  77. package/docs/superpowers/plans/2026-06-09-implementation-run-artifact-stage-isolation.md +0 -320
  78. package/docs/superpowers/plans/2026-06-10-concurrent-run-team-guard.md +0 -456
  79. package/docs/superpowers/plans/2026-06-10-git-reconcile-stale-sha-recovery.md +0 -1408
  80. package/docs/superpowers/plans/2026-06-10-lead-worker-completion-polling-PROBE.md +0 -42
  81. package/docs/superpowers/plans/2026-06-10-lead-worker-completion-polling.md +0 -337
  82. package/docs/superpowers/plans/2026-06-10-p6-token-usage-incremental.md +0 -1029
  83. package/docs/superpowers/plans/2026-06-10-stage-group-handoff.md +0 -1572
  84. package/docs/superpowers/plans/2026-06-11-fix-cycle.md +0 -1290
  85. package/docs/superpowers/plans/2026-06-11-wizard-whole-task-final-verification.md +0 -526
  86. package/docs/superpowers/plans/2026-06-12-html-plan-approval.md +0 -1000
  87. package/docs/superpowers/plans/2026-06-13-repo-risk-hardening.md +0 -493
  88. package/docs/superpowers/plans/2026-06-14-host-runtime-auto-execution.md +0 -1775
  89. package/docs/superpowers/plans/2026-06-15-coding-preflight-pack-dispatch-path.md +0 -504
  90. package/docs/superpowers/plans/2026-06-15-internal-skill-migration-final-fixups.md +0 -342
  91. package/docs/superpowers/plans/2026-06-15-internal-skill-migration-fixups.md +0 -258
  92. package/docs/superpowers/plans/2026-06-15-internal-skill-migration-remaining-fixups.md +0 -387
  93. package/docs/superpowers/plans/2026-06-15-internal-skill-resource-migration.md +0 -749
  94. package/docs/superpowers/plans/2026-06-15-worker-prompt-anchor-final-fixups.md +0 -828
  95. package/docs/superpowers/plans/2026-06-15-worker-prompt-header-error-contract.md +0 -490
  96. package/docs/superpowers/plans/2026-06-17-okstra-error-report.md +0 -724
  97. package/docs/superpowers/plans/2026-06-18-subagent-pane-reclaim.md +0 -483
  98. package/docs/superpowers/plans/2026-06-19-agent-operating-standard.md +0 -476
  99. package/docs/superpowers/plans/2026-06-19-okstra-inspect-recap-facet.md +0 -647
  100. package/docs/superpowers/plans/2026-06-20-error-feedback-loop.md +0 -1019
  101. package/docs/superpowers/plans/2026-06-20-run-index-row-normalization.md +0 -583
  102. package/docs/superpowers/plans/2026-06-20-stage-auto-integrate-teardown.md +0 -819
  103. package/docs/superpowers/plans/2026-06-21-okstra-container-local-user-test.md +0 -714
  104. package/docs/superpowers/plans/2026-06-21-release-handoff-local-checkout.md +0 -348
  105. package/docs/superpowers/plans/2026-06-23-implementation-stage-multiselect-chain.md +0 -630
  106. package/docs/superpowers/plans/2026-06-23-implementation-step-commit-granularity.md +0 -274
  107. package/docs/superpowers/plans/2026-06-23-phase-batch-cleanup-enforcement.md +0 -409
  108. package/docs/superpowers/plans/2026-06-24-cross-project-precondition.md +0 -542
  109. package/docs/superpowers/plans/2026-06-24-decision-drafts-render-gap.md +0 -568
  110. package/docs/superpowers/plans/2026-06-24-manual-user-test-section.md +0 -203
  111. package/docs/superpowers/plans/2026-06-24-okstra-container-build-rename.md +0 -525
  112. package/docs/superpowers/specs/2026-05-12-ticket-id-in-reports-design.md +0 -131
  113. package/docs/superpowers/specs/2026-05-15-implementation-plan-verification-design.md +0 -254
  114. package/docs/superpowers/specs/2026-05-20-final-report-language-design.md +0 -383
  115. package/docs/superpowers/specs/2026-05-20-implementation-planning-multi-stage-design.md +0 -322
  116. package/docs/superpowers/specs/2026-05-20-okstra-run-prompt-sot-design.md +0 -299
  117. package/docs/superpowers/specs/2026-05-21-improvement-discovery-task-type-design.md +0 -335
  118. package/docs/superpowers/specs/2026-06-02-okstra-run-branch-confirm-step-design.md +0 -113
  119. package/docs/superpowers/specs/2026-06-02-okstra-run-phase-pane-cleanup-design.md +0 -173
  120. package/docs/superpowers/specs/2026-06-02-requirements-discovery-fanout-design.md +0 -154
  121. package/docs/superpowers/specs/2026-06-04-adversarial-implementation-planning-design.md +0 -90
  122. package/docs/superpowers/specs/2026-06-04-adversarial-verification-design.md +0 -176
  123. package/docs/superpowers/specs/2026-06-04-coverage-critic-design.md +0 -99
  124. package/docs/superpowers/specs/2026-06-04-stage-splitting-cost-aware-design.md +0 -98
  125. package/docs/superpowers/specs/2026-06-05-acceptance-critic-design.md +0 -90
  126. package/docs/superpowers/specs/2026-06-05-compact-markdown-report-tables-design.md +0 -87
  127. package/docs/superpowers/specs/2026-06-05-wizard-batch-prompts-design.md +0 -121
  128. package/docs/superpowers/specs/2026-06-06-final-verification-whole-task-gate-design.md +0 -126
  129. package/docs/superpowers/specs/2026-06-06-stage-worktree-isolation-design.md +0 -180
  130. package/docs/superpowers/specs/2026-06-06-vertical-slice-tdd-planning-design.md +0 -179
  131. package/docs/superpowers/specs/2026-06-07-stage-conformance-qa-design.md +0 -169
  132. package/docs/superpowers/specs/2026-06-09-executor-model-custom-id-cascade-design.md +0 -66
  133. package/docs/superpowers/specs/2026-06-09-implementation-run-artifact-stage-isolation-design.md +0 -87
  134. package/docs/superpowers/specs/2026-06-10-blocking-contract-posthoc-conformance-design.md +0 -168
  135. package/docs/superpowers/specs/2026-06-10-concurrent-run-team-guard-design.md +0 -107
  136. package/docs/superpowers/specs/2026-06-10-git-reconcile-stale-sha-recovery-design.md +0 -105
  137. package/docs/superpowers/specs/2026-06-10-lead-worker-completion-polling-design.md +0 -113
  138. package/docs/superpowers/specs/2026-06-10-stage-group-handoff-design.md +0 -156
  139. package/docs/superpowers/specs/2026-06-11-brief-entry-only-handoff-stage-entry-design.md +0 -158
  140. package/docs/superpowers/specs/2026-06-11-fix-cycle-design.md +0 -94
  141. package/docs/superpowers/specs/2026-06-11-wizard-whole-task-final-verification-design.md +0 -89
  142. package/docs/superpowers/specs/2026-06-12-codex-lead-adapter-design.md +0 -358
  143. package/docs/superpowers/specs/2026-06-12-html-plan-approval-design.md +0 -85
  144. package/docs/superpowers/specs/2026-06-12-stage-discipline-rule-design.md +0 -108
  145. package/docs/superpowers/specs/2026-06-13-forbidden-actions-ssot-design.md +0 -134
  146. package/docs/superpowers/specs/2026-06-13-neutral-tmux-lead-adapter-design.md +0 -284
  147. package/docs/superpowers/specs/2026-06-14-host-runtime-auto-execution-design.md +0 -404
  148. package/docs/superpowers/specs/2026-06-17-okstra-error-report-design.md +0 -123
  149. package/docs/superpowers/specs/2026-06-18-subagent-pane-reclaim-design.md +0 -150
  150. package/docs/superpowers/specs/2026-06-19-agent-operating-standard-design.md +0 -120
  151. package/docs/superpowers/specs/2026-06-19-okstra-inspect-recap-facet-design.md +0 -96
  152. package/docs/superpowers/specs/2026-06-20-error-feedback-loop-design.md +0 -171
  153. package/docs/superpowers/specs/2026-06-20-run-index-row-normalization-design.md +0 -112
  154. package/docs/superpowers/specs/2026-06-20-stage-auto-integrate-teardown-design.md +0 -145
  155. package/docs/superpowers/specs/2026-06-21-okstra-container-local-user-test-design.md +0 -125
  156. package/docs/superpowers/specs/2026-06-21-release-handoff-local-checkout-design.md +0 -113
  157. package/docs/superpowers/specs/2026-06-23-implementation-stage-multiselect-chain-design.md +0 -138
  158. package/docs/superpowers/specs/2026-06-23-implementation-step-commit-granularity-design.md +0 -120
  159. package/docs/superpowers/specs/2026-06-24-cross-project-precondition-design.md +0 -129
  160. package/docs/superpowers/specs/2026-06-24-decision-drafts-render-gap-design.md +0 -185
  161. package/docs/superpowers/specs/2026-06-24-manual-user-test-section-design.md +0 -121
  162. package/docs/superpowers/specs/2026-06-24-okstra-container-build-rename-design.md +0 -110
@@ -1,158 +0,0 @@
1
- # Okstra 프로젝트 산출물 루트 이전 Implementation Plan
2
-
3
- > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
-
5
- **Goal:** okstra 가 프로젝트 안에 만드는 모든 산출물의 루트를 `<PROJECT_ROOT>/.project-docs/okstra/` 에서 `<PROJECT_ROOT>/.okstra/` 로 이전한다. 동시에 path 문자열이 60+ 파일에 산재해 있던 DRY 위반을 해소해 Python / Node / Shell 각 한 곳의 SSOT 만 바꾸면 전 코드가 따라오는 구조로 정리한다. 기존 사용자는 신규 `okstra migrate` 명령 한 번으로 이전.
6
-
7
- **Non-goals:**
8
- - `.project-docs/` 디렉토리 자체 제거. okstra 외 용도 (`.project-docs/agents/domain.md` 등) 가 살아 있을 수 있음 — okstra 하위만 빼낸다.
9
- - Backwards-compat shim. 사용자 글로벌 메모리의 *pre-1.0 means no backwards compatibility concerns* 정책 적용. 두 경로 동시 지원은 하지 않음.
10
- - 사용자 IDE workspace 파일이나 외부 스크립트의 path 수정. CHANGES.md 와 release notes 에 사용자 알림만.
11
-
12
- **확정된 결정 사항:**
13
- - 마이그레이션: `okstra migrate` 자동 명령 제공. 다음 v0.x 이후 제거.
14
- - SSOT: 이번 변경에서 path SSOT 동시 수렴 (Python `paths.OKSTRA_RELATIVE`, Node `config.mjs` export, Shell `validators/lib/paths.sh`).
15
- - 디렉토리 이름: `.okstra` (사용자 지정).
16
-
17
- ---
18
-
19
- ## 영향 범위 스냅샷 (2026-05-25 기준)
20
-
21
- | 카테고리 | 파일 수 | 핵심 경로 |
22
- |---|---|---|
23
- | Python SSOT 후보 | 3 | `scripts/okstra_ctl/paths.py:23`, `scripts/okstra_project/{resolver,state}.py` |
24
- | Node SSOT 후보 | 4 | `src/{config,setup,install,check-project,uninstall}.mjs` |
25
- | Python 호출자 (하드코드) | ~15 | `scripts/okstra_ctl/{render,run,seeding,wizard,worktree,backfill,pr_template,sequence}.py`, `okstra-spawn-followups.py`, `okstra_token_usage/collect.py`, `validators/validate-*.py` |
26
- | Shell 스크립트 | 5 | `scripts/lib/okstra/{interactive,project-resolver,usage}.sh`, `scripts/lib/okstra-ctl/cmd-rerun.sh`, `validators/{lib/paths,lib/fixtures,validate-brief,validate-workflow}.sh` |
27
- | 스킬 / 프로필 / 에이전트 | 13 | `skills/okstra-*/SKILL.md`, `prompts/profiles/*.md`, `agents/{SKILL.md,workers/claude-worker.md}` |
28
- | 템플릿 | 4 | `templates/okstra.CLAUDE.md`, `templates/reports/{brief,task-brief}.template.md`, `skills/templates/prd/pr-body.template.md` |
29
- | 테스트 | ~20 | `tests/test_okstra_*.py`, `tests-e2e/scenario-*.sh` 2개 |
30
- | 문서 | ~12 | `README{,.kr}.md`, `CLAUDE.md`, `docs/kr/{architecture,cli}.md`, `docs/project-structure-overview.md`, `docs/task-process/common-flow.md`, `docs/superpowers/plans/*` |
31
- | 제외 | — | `graphify-out/` (다음 update 시 재생성), `.project-docs/2026-05-10/feature-checklist.md` (okstra 무관) |
32
-
33
- ---
34
-
35
- ## Track 1 — Path SSOT 수렴
36
-
37
- ### Task 1.1: Python SSOT 신설 + 호출자 일괄 교체
38
- - [ ] `scripts/okstra_ctl/paths.py` 에 `OKSTRA_DIR_NAME = ".project-docs/okstra"` (이 단계에서는 값 유지) 와 `OKSTRA_RELATIVE = Path(OKSTRA_DIR_NAME)` 추가. 기존 `OKSTRA_RELATIVE` 정의는 새 상수로 치환.
39
- - [ ] `scripts/okstra_project/{resolver,state,__init__}.py` 의 path 하드코드를 `paths.OKSTRA_RELATIVE` import 로 교체. 문자열 메시지의 `.project-docs/okstra` 도 변수 보간으로 통일.
40
- - [ ] `scripts/okstra_ctl/{render,run,seeding,wizard,worktree,backfill,pr_template,sequence}.py`, `okstra-spawn-followups.py`, `okstra_token_usage/collect.py`, `validators/validate-{run,brief}.py` 가 path 빌드 시 헬퍼 사용.
41
- - [ ] `_infer_project_root` (`okstra_token_usage/collect.py:258`) 의 marker 디렉토리 — 지금은 `.project-docs` — 를 `OKSTRA_DIR_NAME` 사용으로 교체. 다른 용도의 `.project-docs/` 가 있는 디렉토리에서 오탐 방지.
42
- - [ ] `pytest tests/` 통과 (이 단계는 값 변경 없음, 회귀만 확인).
43
-
44
- ### Task 1.2: Node SSOT 신설 + 호출자 일괄 교체
45
- - [ ] `src/config.mjs` 에 `export const OKSTRA_DIR = ".project-docs/okstra"` (값 유지) 와 `projectJsonPath(projectRoot)`, `claudeMdSymlinkPath(projectRoot)`, `claudeMdImportLine()` 헬퍼 신설.
46
- - [ ] `src/{setup,install,check-project,uninstall}.mjs` 의 `join(projectRoot, ".project-docs", "okstra", ...)` 패턴을 헬퍼 호출로 교체. `CLAUDE_MD_SYMLINK_REL`, `CLAUDE_MD_IMPORT_LINE` 도 동일 상수 기반.
47
- - [ ] `node bin/okstra --version`, `node bin/okstra doctor` 정상 동작 확인.
48
-
49
- ### Task 1.3: Shell SSOT 승격
50
- - [ ] `validators/lib/paths.sh` 를 shell SSOT 로 승격 — `OKSTRA_DIR=".project-docs/okstra"` export (값 유지).
51
- - [ ] `scripts/lib/okstra/{interactive,project-resolver,usage}.sh`, `scripts/lib/okstra-ctl/cmd-rerun.sh`, `validators/lib/fixtures.sh`, `validators/validate-{brief,workflow}.sh` 가 `validators/lib/paths.sh` 를 source 하여 `$OKSTRA_DIR` 참조.
52
- - [ ] `bash validators/validate-workflow.sh` 통과.
53
-
54
- ---
55
-
56
- ## Track 2 — 값 전환
57
-
58
- ### Task 2.1: SSOT 상수 값 교체
59
- - [ ] Python `OKSTRA_DIR_NAME = ".okstra"` (1 줄).
60
- - [ ] Node `OKSTRA_DIR = ".okstra"` (1 줄).
61
- - [ ] Shell `OKSTRA_DIR=".okstra"` (1 줄).
62
-
63
- ### Task 2.2: 테스트 fixture 갱신
64
- - [ ] `tests/test_okstra_*.py` 의 fixture 가 만드는 임시 디렉토리 path 갱신 — 약 20개 파일.
65
- - [ ] `tests-e2e/scenario-08-improvement-discovery-render-only.sh`, `tests-e2e/scenario-09-improvement-brief-generation.sh` 의 fixture path 갱신.
66
- - [ ] `python3 -m pytest tests/` 전체 통과 (지금 시점에서 734 passed, 2 skipped 회귀 없음).
67
-
68
- ### Task 2.3: 사용자 노출 문자열 일괄 sed
69
- - [ ] 명령 (Okstra 저장소 루트에서):
70
- ```bash
71
- grep -rln "\.project-docs/okstra" --include="*.md" --include="*.sh" --include="*.json" . \
72
- | grep -v "^\./graphify-out/" \
73
- | grep -v "^\./\.project-docs/" \
74
- | xargs sed -i '' 's|\.project-docs/okstra|.okstra|g'
75
- ```
76
- - [ ] 결과 확인 대상: `agents/`, `prompts/profiles/`, `skills/`, `templates/`, `docs/`, `README{,.kr}.md`, `CLAUDE.md`, `CHANGES.md`, `tests-e2e/README.md`.
77
- - [ ] `.claude/settings.local.json` 의 path-scoped permission 룰도 동시 갱신 (별도 수동 — JSON sed 위험).
78
- - [ ] `pytest tests/` 와 `validators/validate-workflow.sh` 재통과.
79
-
80
- ---
81
-
82
- ## Track 3 — `okstra migrate` 명령
83
-
84
- ### Task 3.1: 코어 모듈 신설
85
- - [ ] `scripts/okstra_ctl/migrate.py` 신규:
86
- - `prepare_migration_plan(project_root: Path) -> MigrationPlan` — 변경 대상 수집 (move, claude-md, gitignore, registry).
87
- - `apply_migration_plan(plan, *, dry_run=True) -> MigrationResult` — 실행.
88
- - 거부 가드: `.okstra/` 이미 존재 / `.project-docs/okstra/` 없음 / git 미사용 시 일반 `mv` fallback.
89
- - 동작 항목:
90
- 1. `git mv .project-docs/okstra .okstra` (git 없는 곳은 `mv`).
91
- 2. `.project-docs/` 가 비면 `rmdir .project-docs`.
92
- 3. `<PROJECT_ROOT>/CLAUDE.md` 의 `@.project-docs/okstra/CLAUDE.md` import 라인 → `@.okstra/CLAUDE.md`.
93
- 4. `.gitignore` 의 `.project-docs/okstra/` 항목 → `.okstra/`.
94
- 5. `~/.okstra/{recent,active}.jsonl` 와 `~/.okstra/worktrees/registry.json` 의 해당 프로젝트 path 항목 갱신.
95
- - [ ] `MigrationPlan` 은 dataclass, JSON 직렬화 가능 (dry-run 출력에 그대로 사용).
96
-
97
- ### Task 3.2: 진입점 3개 (단일 코어 호출 보장)
98
- - [ ] Bash 진입점: `scripts/lib/okstra-ctl/cmd-migrate.sh` — thin adapter.
99
- - [ ] `bin/okstra` dispatcher 에 `migrate` 서브커맨드 등록.
100
- - [ ] `--dry-run` 기본, `--apply` 로 실제 실행, `--quiet` 로 출력 최소화.
101
-
102
- ### Task 3.3: 테스트
103
- - [ ] `tests/test_okstra_migrate.py` — dry-run / apply / 거부 케이스 / git 없는 fallback / CLAUDE.md import 라인 교체 / 빈 `.project-docs/` rmdir / 글로벌 registry 갱신.
104
- - [ ] `tests-e2e/scenario-XX-migrate.sh` — 실제 fixture 프로젝트 생성 → `okstra setup` → `okstra migrate --apply` → `okstra status` 가 새 path 인식.
105
-
106
- ---
107
-
108
- ## Track 4 — 문서 / 릴리스
109
-
110
- ### Task 4.1: 사용자 문서
111
- - [ ] `README.md` / `README.kr.md` Quick Start 섹션 — 신규 setup 후 산출물 위치, 기존 사용자용 `npx okstra migrate` 안내.
112
- - [ ] `docs/kr/architecture.md` Storage model 섹션 — `<PROJECT_ROOT>/.okstra/` 트리.
113
- - [ ] `docs/kr/cli.md` 에 `okstra migrate` 항목 신규.
114
-
115
- ### Task 4.2: 저장소 내부 문서
116
- - [ ] `CLAUDE.md` Three layers / Project layer 섹션 + Artifact-home rule 갱신.
117
- - [ ] `CHANGES.md` 에 다음 형태의 BREAKING 엔트리 추가:
118
-
119
- > ### feat(migrate)!: 프로젝트 산출물 루트가 `<PROJECT_ROOT>/.okstra/` 로 이전
120
- >
121
- > - **배경**: 기존 `<PROJECT_ROOT>/.project-docs/okstra/` 는 1) `.project-docs/` 디렉토리가 okstra 외 용도와 섞이기 쉽고, 2) 경로가 길어 사용자 settings/permission 룰에서 자주 잘리며, 3) 같은 문자열이 60+ 파일에 산재해 DRY 위반.
122
- > - 변경: 모든 코드 경로 SSOT 가 `.okstra` 로 수렴. `okstra migrate` 명령 신설.
123
- > - 사용자 영향: 다음 release + `npx -y okstra@latest install` 후 적용. 이미 okstra 를 쓰고 있는 프로젝트는 **`npx okstra@latest migrate` 한 번 실행**으로 자동 이전 (`git mv` + `CLAUDE.md` import 라인 + `.gitignore` + 글로벌 `~/.okstra/{recent,active}.jsonl` registry 동기화). `okstra migrate` 명령 자체는 v0.x 말까지 유지 후 제거 예정.
124
-
125
- ---
126
-
127
- ## Track 5 — 빌드 / 검증 / PR
128
-
129
- ### Task 5.1: 빌드 / 통합 검증
130
- - [ ] `npm run build` — runtime/ 21/21 sources synced.
131
- - [ ] `python3 -m pytest tests/` — 전체 통과.
132
- - [ ] `bash validators/validate-workflow.sh` 통과.
133
- - [ ] `bash tests-e2e/scenario-01-record-start-reconcile.sh` 통과 + 신규 migrate scenario 통과.
134
- - [ ] `node bin/okstra --version`, `node bin/okstra doctor`, `node bin/okstra migrate --dry-run` 정상.
135
-
136
- ### Task 5.2: PR 분할 (권장)
137
- - [ ] PR 1 — `refactor(paths): okstra-relative path SSOT 수렴 (Python/Node/Shell)`. Track 1 만. 값은 변하지 않으므로 회귀 위험 0.
138
- - [ ] PR 2 — `feat(migrate)!: 프로젝트 산출물 루트를 .okstra/ 로 이전 + okstra migrate`. Track 2~4 와 Task 5.1. PR 1 이 머지된 후.
139
-
140
- ---
141
-
142
- ## Risks & Gates
143
-
144
- - **risk**: `sed` 일괄 교체가 의도치 않은 매칭 (`.project-docs/agents/domain.md` 같은 non-okstra 참조) 까지 건드림. → 패턴을 `\.project-docs/okstra` 로 좁혀 안전.
145
- - **risk**: `okstra migrate` 가 이미 `.okstra/` 존재하는 프로젝트를 덮어쓸 위험. → 사전 거부 + dry-run 기본.
146
- - **risk**: 사용자 IDE workspace / 외부 스크립트가 `.project-docs/okstra/` 를 박아두고 있을 가능성. → CHANGES.md + release notes 에 명시.
147
- - **risk**: PR 1 이 단순 import 추가만으로 끝나도 60+ 파일 diff 가 됨. → 리뷰어가 변경의 의도를 빨리 파악할 수 있도록 PR description 에 "값 변경 0, SSOT 통합만" 명시.
148
- - **gate**: Track 3 (`okstra migrate`) 의 dry-run 출력이 Track 2 의 새 경로를 정확히 가리켜야 함. Track 2 가 먼저 머지된 base 위에서만 Track 3 작성.
149
-
150
- ## 견적
151
-
152
- | Track | 변경 라인 | 신규 파일 |
153
- |---|---|---|
154
- | 1 SSOT 수렴 | ~80 | 0 |
155
- | 2 값 전환 + sed + fixture | ~200 | 0 |
156
- | 3 migrate 명령 + 테스트 | ~250 | 4 |
157
- | 4 문서 | ~60 | 1 (이 plan) |
158
- | **합계** | **~590 라인** | **5 파일** |