okstra 0.102.2 → 0.102.4
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 +8 -3
- package/docs/kr/architecture.md +12 -13
- 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/lib/okstra/interactive.sh +12 -0
- 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 +6 -13
- 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 +8 -13
- 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_outcome.py +271 -0
- package/runtime/python/okstra_ctl/implementation_stage.py +7 -11
- package/runtime/python/okstra_ctl/path_hints.py +665 -0
- package/runtime/python/okstra_ctl/render.py +4 -3
- 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/run_context.py +4 -2
- package/runtime/python/okstra_ctl/stage_targets.py +18 -0
- package/runtime/python/okstra_ctl/wizard.py +37 -26
- package/runtime/python/okstra_ctl/wizard_stage_intent.py +54 -0
- package/runtime/python/okstra_project/state.py +40 -2
- 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,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 파일** |
|