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.
Files changed (161) hide show
  1. package/README.kr.md +5 -5
  2. package/README.md +5 -5
  3. package/docs/kr/architecture/storage-model.md +1 -1
  4. package/docs/kr/architecture.md +7 -11
  5. package/docs/kr/cli.md +4 -4
  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/commands/lifecycle/install.mjs +5 -5
  36. package/src/commands/lifecycle/uninstall.mjs +4 -4
  37. package/docs/superpowers/plans/2026-05-12-ticket-id-in-reports.md +0 -638
  38. package/docs/superpowers/plans/2026-05-14-convergence-queue-pruning.md +0 -1568
  39. package/docs/superpowers/plans/2026-05-17-dual-format-final-report.md +0 -167
  40. package/docs/superpowers/plans/2026-05-20-final-report-language.md +0 -1501
  41. package/docs/superpowers/plans/2026-05-20-implementation-planning-multi-stage.md +0 -1267
  42. package/docs/superpowers/plans/2026-05-20-okstra-run-prompt-sot-b1.md +0 -1007
  43. package/docs/superpowers/plans/2026-05-20-wizard-messages-json-sot.md +0 -720
  44. package/docs/superpowers/plans/2026-05-20-wizard-prompt-json-sot-a1.md +0 -681
  45. package/docs/superpowers/plans/2026-05-21-improvement-discovery-task-type.md +0 -1691
  46. package/docs/superpowers/plans/2026-05-24-implementation-lead-context-slimming.md +0 -1700
  47. package/docs/superpowers/plans/2026-05-25-okstra-project-root-rename.md +0 -158
  48. package/docs/superpowers/plans/2026-05-26-wizard-3-option-picker.md +0 -860
  49. package/docs/superpowers/plans/2026-06-02-final-verification-protocol-hardening.md +0 -326
  50. package/docs/superpowers/plans/2026-06-02-okstra-run-branch-confirm-step.md +0 -337
  51. package/docs/superpowers/plans/2026-06-02-okstra-run-phase-pane-cleanup.md +0 -410
  52. package/docs/superpowers/plans/2026-06-02-requirements-discovery-fanout.md +0 -728
  53. package/docs/superpowers/plans/2026-06-04-adversarial-implementation-planning.md +0 -294
  54. package/docs/superpowers/plans/2026-06-04-adversarial-verification.md +0 -570
  55. package/docs/superpowers/plans/2026-06-04-coverage-critic.md +0 -516
  56. package/docs/superpowers/plans/2026-06-04-stage-cohesion-planner.md +0 -351
  57. package/docs/superpowers/plans/2026-06-04-stage-run-batching.md +0 -457
  58. package/docs/superpowers/plans/2026-06-05-acceptance-critic.md +0 -251
  59. package/docs/superpowers/plans/2026-06-05-compact-markdown-report-tables.md +0 -323
  60. package/docs/superpowers/plans/2026-06-05-wizard-batch-prompts.md +0 -559
  61. package/docs/superpowers/plans/2026-06-06-final-verification-whole-task-gate.md +0 -993
  62. package/docs/superpowers/plans/2026-06-06-stage-parallel-and-pending-fixes.md +0 -93
  63. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p1.md +0 -447
  64. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p2.md +0 -289
  65. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p3.md +0 -774
  66. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p4.md +0 -303
  67. package/docs/superpowers/plans/2026-06-06-stage-worktree-isolation-p5-multidep-base.md +0 -387
  68. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase2.md +0 -275
  69. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase3.md +0 -282
  70. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4a.md +0 -147
  71. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4b.md +0 -262
  72. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4c.md +0 -184
  73. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4d.md +0 -88
  74. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa-phase4e.md +0 -250
  75. package/docs/superpowers/plans/2026-06-07-stage-conformance-qa.md +0 -409
  76. package/docs/superpowers/plans/2026-06-09-implementation-run-artifact-stage-isolation.md +0 -320
  77. package/docs/superpowers/plans/2026-06-10-concurrent-run-team-guard.md +0 -456
  78. package/docs/superpowers/plans/2026-06-10-git-reconcile-stale-sha-recovery.md +0 -1408
  79. package/docs/superpowers/plans/2026-06-10-lead-worker-completion-polling-PROBE.md +0 -42
  80. package/docs/superpowers/plans/2026-06-10-lead-worker-completion-polling.md +0 -337
  81. package/docs/superpowers/plans/2026-06-10-p6-token-usage-incremental.md +0 -1029
  82. package/docs/superpowers/plans/2026-06-10-stage-group-handoff.md +0 -1572
  83. package/docs/superpowers/plans/2026-06-11-fix-cycle.md +0 -1290
  84. package/docs/superpowers/plans/2026-06-11-wizard-whole-task-final-verification.md +0 -526
  85. package/docs/superpowers/plans/2026-06-12-html-plan-approval.md +0 -1000
  86. package/docs/superpowers/plans/2026-06-13-repo-risk-hardening.md +0 -493
  87. package/docs/superpowers/plans/2026-06-14-host-runtime-auto-execution.md +0 -1775
  88. package/docs/superpowers/plans/2026-06-15-coding-preflight-pack-dispatch-path.md +0 -504
  89. package/docs/superpowers/plans/2026-06-15-internal-skill-migration-final-fixups.md +0 -342
  90. package/docs/superpowers/plans/2026-06-15-internal-skill-migration-fixups.md +0 -258
  91. package/docs/superpowers/plans/2026-06-15-internal-skill-migration-remaining-fixups.md +0 -387
  92. package/docs/superpowers/plans/2026-06-15-internal-skill-resource-migration.md +0 -749
  93. package/docs/superpowers/plans/2026-06-15-worker-prompt-anchor-final-fixups.md +0 -828
  94. package/docs/superpowers/plans/2026-06-15-worker-prompt-header-error-contract.md +0 -490
  95. package/docs/superpowers/plans/2026-06-17-okstra-error-report.md +0 -724
  96. package/docs/superpowers/plans/2026-06-18-subagent-pane-reclaim.md +0 -483
  97. package/docs/superpowers/plans/2026-06-19-agent-operating-standard.md +0 -476
  98. package/docs/superpowers/plans/2026-06-19-okstra-inspect-recap-facet.md +0 -647
  99. package/docs/superpowers/plans/2026-06-20-error-feedback-loop.md +0 -1019
  100. package/docs/superpowers/plans/2026-06-20-run-index-row-normalization.md +0 -583
  101. package/docs/superpowers/plans/2026-06-20-stage-auto-integrate-teardown.md +0 -819
  102. package/docs/superpowers/plans/2026-06-21-okstra-container-local-user-test.md +0 -714
  103. package/docs/superpowers/plans/2026-06-21-release-handoff-local-checkout.md +0 -348
  104. package/docs/superpowers/plans/2026-06-23-implementation-stage-multiselect-chain.md +0 -630
  105. package/docs/superpowers/plans/2026-06-23-implementation-step-commit-granularity.md +0 -274
  106. package/docs/superpowers/plans/2026-06-23-phase-batch-cleanup-enforcement.md +0 -409
  107. package/docs/superpowers/plans/2026-06-24-cross-project-precondition.md +0 -542
  108. package/docs/superpowers/plans/2026-06-24-decision-drafts-render-gap.md +0 -568
  109. package/docs/superpowers/plans/2026-06-24-manual-user-test-section.md +0 -203
  110. package/docs/superpowers/plans/2026-06-24-okstra-container-build-rename.md +0 -525
  111. package/docs/superpowers/specs/2026-05-12-ticket-id-in-reports-design.md +0 -131
  112. package/docs/superpowers/specs/2026-05-15-implementation-plan-verification-design.md +0 -254
  113. package/docs/superpowers/specs/2026-05-20-final-report-language-design.md +0 -383
  114. package/docs/superpowers/specs/2026-05-20-implementation-planning-multi-stage-design.md +0 -322
  115. package/docs/superpowers/specs/2026-05-20-okstra-run-prompt-sot-design.md +0 -299
  116. package/docs/superpowers/specs/2026-05-21-improvement-discovery-task-type-design.md +0 -335
  117. package/docs/superpowers/specs/2026-06-02-okstra-run-branch-confirm-step-design.md +0 -113
  118. package/docs/superpowers/specs/2026-06-02-okstra-run-phase-pane-cleanup-design.md +0 -173
  119. package/docs/superpowers/specs/2026-06-02-requirements-discovery-fanout-design.md +0 -154
  120. package/docs/superpowers/specs/2026-06-04-adversarial-implementation-planning-design.md +0 -90
  121. package/docs/superpowers/specs/2026-06-04-adversarial-verification-design.md +0 -176
  122. package/docs/superpowers/specs/2026-06-04-coverage-critic-design.md +0 -99
  123. package/docs/superpowers/specs/2026-06-04-stage-splitting-cost-aware-design.md +0 -98
  124. package/docs/superpowers/specs/2026-06-05-acceptance-critic-design.md +0 -90
  125. package/docs/superpowers/specs/2026-06-05-compact-markdown-report-tables-design.md +0 -87
  126. package/docs/superpowers/specs/2026-06-05-wizard-batch-prompts-design.md +0 -121
  127. package/docs/superpowers/specs/2026-06-06-final-verification-whole-task-gate-design.md +0 -126
  128. package/docs/superpowers/specs/2026-06-06-stage-worktree-isolation-design.md +0 -180
  129. package/docs/superpowers/specs/2026-06-06-vertical-slice-tdd-planning-design.md +0 -179
  130. package/docs/superpowers/specs/2026-06-07-stage-conformance-qa-design.md +0 -169
  131. package/docs/superpowers/specs/2026-06-09-executor-model-custom-id-cascade-design.md +0 -66
  132. package/docs/superpowers/specs/2026-06-09-implementation-run-artifact-stage-isolation-design.md +0 -87
  133. package/docs/superpowers/specs/2026-06-10-blocking-contract-posthoc-conformance-design.md +0 -168
  134. package/docs/superpowers/specs/2026-06-10-concurrent-run-team-guard-design.md +0 -107
  135. package/docs/superpowers/specs/2026-06-10-git-reconcile-stale-sha-recovery-design.md +0 -105
  136. package/docs/superpowers/specs/2026-06-10-lead-worker-completion-polling-design.md +0 -113
  137. package/docs/superpowers/specs/2026-06-10-stage-group-handoff-design.md +0 -156
  138. package/docs/superpowers/specs/2026-06-11-brief-entry-only-handoff-stage-entry-design.md +0 -158
  139. package/docs/superpowers/specs/2026-06-11-fix-cycle-design.md +0 -94
  140. package/docs/superpowers/specs/2026-06-11-wizard-whole-task-final-verification-design.md +0 -89
  141. package/docs/superpowers/specs/2026-06-12-codex-lead-adapter-design.md +0 -358
  142. package/docs/superpowers/specs/2026-06-12-html-plan-approval-design.md +0 -85
  143. package/docs/superpowers/specs/2026-06-12-stage-discipline-rule-design.md +0 -108
  144. package/docs/superpowers/specs/2026-06-13-forbidden-actions-ssot-design.md +0 -134
  145. package/docs/superpowers/specs/2026-06-13-neutral-tmux-lead-adapter-design.md +0 -284
  146. package/docs/superpowers/specs/2026-06-14-host-runtime-auto-execution-design.md +0 -404
  147. package/docs/superpowers/specs/2026-06-17-okstra-error-report-design.md +0 -123
  148. package/docs/superpowers/specs/2026-06-18-subagent-pane-reclaim-design.md +0 -150
  149. package/docs/superpowers/specs/2026-06-19-agent-operating-standard-design.md +0 -120
  150. package/docs/superpowers/specs/2026-06-19-okstra-inspect-recap-facet-design.md +0 -96
  151. package/docs/superpowers/specs/2026-06-20-error-feedback-loop-design.md +0 -171
  152. package/docs/superpowers/specs/2026-06-20-run-index-row-normalization-design.md +0 -112
  153. package/docs/superpowers/specs/2026-06-20-stage-auto-integrate-teardown-design.md +0 -145
  154. package/docs/superpowers/specs/2026-06-21-okstra-container-local-user-test-design.md +0 -125
  155. package/docs/superpowers/specs/2026-06-21-release-handoff-local-checkout-design.md +0 -113
  156. package/docs/superpowers/specs/2026-06-23-implementation-stage-multiselect-chain-design.md +0 -138
  157. package/docs/superpowers/specs/2026-06-23-implementation-step-commit-granularity-design.md +0 -120
  158. package/docs/superpowers/specs/2026-06-24-cross-project-precondition-design.md +0 -129
  159. package/docs/superpowers/specs/2026-06-24-decision-drafts-render-gap-design.md +0 -185
  160. package/docs/superpowers/specs/2026-06-24-manual-user-test-section-design.md +0 -121
  161. 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 파일** |