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,203 +0,0 @@
1
- # Manual User Test Section 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:** implementation 리포트가 사람이 손으로 확인하는 테스트 절차 초안을 산출하고, final-verification 리포트가 그 초안을 수행·확정하도록, 양쪽 산출물에 "Manual User Test" 섹션을 신설한다.
6
-
7
- **Architecture:** 기존 §5.7/§5.8 deliverable 섹션과 동형(data-driven Jinja 섹션 + 영어 제목 하드코딩 + i18n 라벨/빈상태 + validate-run.py substring 강제). implementation 이 `implementation.manualUserTest` 초안을, final-verification 이 `finalVerification.manualUserTest` 결과를 채운다.
8
-
9
- **Tech Stack:** Jinja 템플릿(final-report.template.md), Python validator(validate-run.py), JSON i18n(en/ko), markdown 프로파일(prompts/), pytest.
10
-
11
- ## Global Constraints
12
-
13
- - 산출물은 한/영 양 언어로 렌더된다 — 섹션 **제목은 영어 하드코딩**(기존 §5.7.x 와 동일), 라벨/빈상태는 `t("manualUserTest.*")` i18n 키로. 영어 렌더에 한글이 들어가면 `tests/report/test_template_no_korean_glyphs.py` 가 fail.
14
- - validator 강제는 **섹션 제목 substring 존재**만 본다(기존 컨벤션). 절차 내용의 적절성은 교차검증 워커/컨버전스가 판단.
15
- - 범위 규칙(프로파일 지시): 사람이 **관찰 가능한 변화**가 있을 때만 절차 항목, 내부 전용이면 면제 한 줄(`applicable=false` + `exemptionReason`).
16
- - container 연계는 **조건부** — `docker-compose.yml` 있으면 `/okstra-container-build` (`okstra container up <task-id>`), 없으면 일반 실행 명령.
17
- - 수정 후 `npm run build` 로 `runtime/` 동기화, 완료 게이트는 `npm run check` exit 0.
18
- - `runtime/` 는 빌드 산출물 — 직접 편집 금지. 소스는 `scripts/`,`templates/`,`prompts/`,`validators/`.
19
-
20
- ---
21
-
22
- ### Task 1: i18n 라벨/빈상태 키 추가
23
-
24
- **Files:**
25
- - Modify: `templates/reports/i18n/en.json`
26
- - Modify: `templates/reports/i18n/ko.json`
27
-
28
- **Interfaces:**
29
- - Produces: `t("manualUserTest.environmentSetup")`, `.steps`, `.expectedResult`, `.notApplicable`, `.performed`, `.result`, `.observed` — Task 2·3 템플릿이 소비.
30
-
31
- - [ ] **Step 1:** `en.json` 의 기존 최상위 그룹(예: `emptyState`) 구조를 Read 로 확인하고, 동일 nesting 으로 `manualUserTest` 그룹 추가:
32
- ```json
33
- "manualUserTest": {
34
- "environmentSetup": "Environment",
35
- "steps": "Steps",
36
- "expectedResult": "Expected result",
37
- "notApplicable": "Manual user test not required",
38
- "performed": "Performed",
39
- "result": "Result",
40
- "observed": "Observed"
41
- }
42
- ```
43
- - [ ] **Step 2:** `ko.json` 에 같은 키로 한국어 값 추가:
44
- ```json
45
- "manualUserTest": {
46
- "environmentSetup": "환경 기동",
47
- "steps": "확인 스텝",
48
- "expectedResult": "기대 결과",
49
- "notApplicable": "사용자 테스트 불필요",
50
- "performed": "수행",
51
- "result": "결과",
52
- "observed": "관찰값"
53
- }
54
- ```
55
- - [ ] **Step 3:** 키 정합성 테스트 실행. Run: `python3 -m pytest tests/report/test_report_language_i18n.py -q` (en/ko 키 집합 일치 검증이 있으면 통과해야 함). Expected: PASS.
56
- - [ ] **Step 4:** Commit. `git add templates/reports/i18n/en.json templates/reports/i18n/ko.json && git commit -m "feat(report): add manualUserTest i18n labels"`
57
-
58
- ---
59
-
60
- ### Task 2: implementation 측 — 템플릿 섹션 + validator 강제 + fixture
61
-
62
- **Files:**
63
- - Modify: `templates/reports/final-report.template.md:485` (§5.7.9 Routing → 5.7.10, 앞에 5.7.9 신설)
64
- - Modify: `validators/validate-run.py:1146-1156` (`IMPLEMENTATION_REQUIRED_SECTIONS`)
65
- - Modify: implementation data fixture (Task 의 Step 1 에서 `grep -rl "validationEvidence" tests/ templates/` 로 위치 확정)
66
- - Test: `tests/report/test_render_final_report.py`, `tests/contract/` validator 테스트
67
-
68
- **Interfaces:**
69
- - Consumes: `t("manualUserTest.*")` (Task 1).
70
- - Produces: 렌더된 본문에 `Manual User Test` substring; data 필드 `implementation.manualUserTest = {applicable: bool, exemptionReason: str|null, items: [{target, environmentSetup, steps: [str], expectedResult}]}`.
71
-
72
- - [ ] **Step 1: 실패 테스트 — 섹션 누락 거부.** validator 테스트에 추가:
73
- ```python
74
- def test_implementation_report_requires_manual_user_test_section():
75
- # "Manual User Test" 헤딩이 없는 implementation 리포트 본문은 거부된다
76
- failures = []
77
- _check_required_deliverable_sections("implementation", BODY_WITHOUT_MANUAL, failures)
78
- assert any("Manual User Test" in f for f in failures)
79
- ```
80
- (실제 호출부는 validate-run.py 의 섹션 체크 함수명에 맞춤 — Step 에서 `grep -n "IMPLEMENTATION_REQUIRED_SECTIONS" validators/validate-run.py` 로 확인)
81
- - [ ] **Step 2:** Run 해서 FAIL 확인(아직 "Manual User Test" 가 리스트에 없어 거부 안 됨). Expected: FAIL.
82
- - [ ] **Step 3: validator 리스트에 추가.** `IMPLEMENTATION_REQUIRED_SECTIONS` 끝(`"Routing Recommendation",` 앞)에 `"Manual User Test",` 추가.
83
- - [ ] **Step 4:** Run 해서 PASS.
84
- - [ ] **Step 5: 템플릿 섹션 신설.** `### 5.7.9 Routing Recommendation` 을 `### 5.7.10` 으로 바꾸고, 그 앞에 삽입:
85
- ```jinja
86
- ### 5.7.9 Manual User Test (Draft)
87
-
88
- {% if implementation.manualUserTest.applicable -%}
89
- {% for item in implementation.manualUserTest.items %}
90
- - **{{ item.target | mdcell }}**
91
- - {{ t("manualUserTest.environmentSetup") }}: {{ item.environmentSetup }}
92
- - {{ t("manualUserTest.steps") }}:
93
- {% for step in item.steps %} {{ loop.index }}. {{ step }}
94
- {% endfor %} - {{ t("manualUserTest.expectedResult") }}: {{ item.expectedResult }}
95
- {% endfor %}
96
- {%- else -%}
97
- - {{ t("manualUserTest.notApplicable") }}: {{ implementation.manualUserTest.exemptionReason }}
98
- {%- endif %}
99
-
100
- ```
101
- - [ ] **Step 6: fixture 보강.** implementation 렌더 fixture data 에 `manualUserTest` 필드 추가(applicable=true 항목 1개). 누락 시 Jinja `undefined.applicable` 로 렌더 실패하므로 필수.
102
- - [ ] **Step 7: 렌더 테스트.** `test_render_final_report.py` 에 implementation 렌더 결과가 `"Manual User Test (Draft)"` 와 항목 내용을 담고, 양 언어 렌더가 통과하는지 단언. Run: `python3 -m pytest tests/report/test_render_final_report.py tests/report/test_template_full_render_both_langs.py tests/report/test_template_no_korean_glyphs.py -q`. Expected: PASS.
103
- - [ ] **Step 8: Commit.** `git add templates/reports/final-report.template.md validators/validate-run.py tests/ <fixture> && git commit -m "feat(report): add Manual User Test (Draft) section to implementation deliverables"`
104
-
105
- ---
106
-
107
- ### Task 3: implementation 프로파일 — 초안 작성 지시 + container 조건부 + report-writer 데이터 지시
108
-
109
- **Files:**
110
- - Modify: `prompts/profiles/_implementation-deliverable.md:33` (Routing recommendation 항목 앞에 새 deliverable 항목)
111
- - Modify: `prompts/lead/report-writer.md` (data 필드 채우기 지시 — `grep -n "validationEvidence" prompts/lead/report-writer.md` 로 인접 위치 확정)
112
-
113
- **Interfaces:**
114
- - Consumes: Task 2 의 `implementation.manualUserTest` 데이터 형태.
115
-
116
- - [ ] **Step 1:** `_implementation-deliverable.md` 의 `- **Validation evidence**` 와 `- **Routing recommendation ...**` 사이에 항목 추가:
117
- ```markdown
118
- - **Manual user test draft**: 사람이 관찰 가능한 변화(UI/API/CLI/산출물 등)가 있으면 각 대상마다 `대상 / 환경 기동 / 확인 스텝 / 기대 결과` 를 §5.7.9 에 적는다. 환경 기동은 프로젝트에 `docker-compose.yml` 이 있으면 `/okstra-container-build` (`okstra container up <task-id>`, published port 접속), 없으면 프로젝트 실행 명령(예: `npm start`). 관찰 가능한 변화가 없으면 항목 대신 `사용자 테스트 불필요 — <사유>` 한 줄만 적는다(`applicable=false`). 절차는 승인 plan 의 `Acceptance:` 와 이 run 의 실제 diff 를 근거로 작성한다.
119
- ```
120
- - [ ] **Step 2:** self-review 체크리스트(`_implementation-deliverable.md:38-48`)에 한 항목 추가: "Manual user test — 관찰 가능한 변화가 있는데 §5.7.9 가 면제 한 줄로 처리되지 않았는지 확인".
121
- - [ ] **Step 3:** `report-writer.md` 의 deliverable 데이터 작성 지시에 `implementation.manualUserTest` 필드(applicable/exemptionReason/items) 채우는 한 줄 추가.
122
- - [ ] **Step 4:** 프로파일은 코드가 아니므로 직접 테스트 없음 — `bash validators/validate-workflow.sh` 로 phase contract 깨지지 않는지 확인. Expected: PASS.
123
- - [ ] **Step 5: Commit.** `git add prompts/profiles/_implementation-deliverable.md prompts/lead/report-writer.md && git commit -m "feat(report): instruct implementation lead to draft manual user test steps"`
124
-
125
- ---
126
-
127
- ### Task 4: final-verification 측 — 템플릿 결과 섹션 + validator 강제 + fixture
128
-
129
- **Files:**
130
- - Modify: `templates/reports/final-report.template.md:568` (§5.8.7 Routing → 5.8.8, 앞에 5.8.7 신설)
131
- - Modify: `validators/validate-run.py:1159-1167` (`FINAL_VERIFICATION_REQUIRED_SECTIONS`)
132
- - Modify: final-verification data fixture
133
- - Test: 위 렌더/validator 테스트
134
-
135
- **Interfaces:**
136
- - Consumes: `t("manualUserTest.*")`.
137
- - Produces: 본문에 `Manual User Test` substring; `finalVerification.manualUserTest = {applicable, exemptionReaffirm: str|null, results: [{target, performed, result, observed}]}` (`result` ∈ pass|fail|blocked).
138
-
139
- - [ ] **Step 1: 실패 테스트.** final-verification 변형으로 Task 2 Step 1 과 동일하게 "Manual User Test" 누락 거부 테스트 추가. Run → FAIL.
140
- - [ ] **Step 2:** `FINAL_VERIFICATION_REQUIRED_SECTIONS` 의 `"Routing Recommendation",` 앞에 `"Manual User Test",` 추가. Run → PASS.
141
- - [ ] **Step 3: 템플릿 섹션.** `### 5.8.7 Routing Recommendation` → `### 5.8.8`, 앞에 삽입:
142
- ```jinja
143
- ### 5.8.7 Manual User Test Results
144
-
145
- {% if finalVerification.manualUserTest.applicable -%}
146
- | {{ t("manualUserTest.performed") }} | {{ t("manualUserTest.result") }} | {{ t("manualUserTest.observed") }} |
147
- |---|---|---|
148
- {% for row in finalVerification.manualUserTest.results -%}
149
- | {{ row.target | mdcell }} — {{ row.performed | mdcell }} | `{{ row.result | mdcell }}` | {{ row.observed | mdcell }} |
150
- {% endfor %}
151
- {%- else -%}
152
- - {{ t("manualUserTest.notApplicable") }}: {{ finalVerification.manualUserTest.exemptionReaffirm }}
153
- {%- endif %}
154
-
155
- ```
156
- - [ ] **Step 4: fixture 보강.** final-verification 렌더 fixture 에 `manualUserTest` 필드(applicable=true, results 1행).
157
- - [ ] **Step 5: 렌더/양언어 테스트.** Run: `python3 -m pytest tests/report/test_render_final_report.py tests/report/test_final_report_stage_reports_render.py tests/report/test_template_full_render_both_langs.py tests/report/test_template_no_korean_glyphs.py -q`. Expected: PASS.
158
- - [ ] **Step 6: Commit.** `git add templates/reports/final-report.template.md validators/validate-run.py tests/ <fixture> && git commit -m "feat(report): add Manual User Test Results section to final-verification deliverables"`
159
-
160
- ---
161
-
162
- ### Task 5: final-verification 프로파일 + 입력 템플릿 통합
163
-
164
- **Files:**
165
- - Modify: `prompts/profiles/final-verification.md` (deliverable/output 섹션 — `grep -n "deliverable\|Expected output\|Routing" prompts/profiles/final-verification.md` 로 위치 확정)
166
- - Modify: `templates/reports/final-verification-input.template.md:58` (`Manual verification notes:`)
167
-
168
- **Interfaces:**
169
- - Consumes: implementation 의 §5.7.9 초안(Source Implementation Report 경유로 참조).
170
-
171
- - [ ] **Step 1:** `final-verification.md` 에 지시 추가: "Source implementation report 의 §5.7.9 Manual User Test (Draft) 각 항목을 실제로 수행하고 §5.8.7 에 `결과(pass/fail/blocked) + 관찰값`을 기록한다. 초안이 면제였으면 사유 타당성만 한 줄로 재확인한다."
172
- - [ ] **Step 2:** `final-verification-input.template.md:58` 를 다음으로 교체:
173
- ```markdown
174
- - Manual verification notes (source implementation report §5.7.9 Manual User Test Draft 를 수행한 결과):
175
- ```
176
- - [ ] **Step 3:** `bash validators/validate-workflow.sh` 통과 확인.
177
- - [ ] **Step 4: Commit.** `git add prompts/profiles/final-verification.md templates/reports/final-verification-input.template.md && git commit -m "feat(report): instruct final-verification to execute manual user test draft"`
178
-
179
- ---
180
-
181
- ### Task 6: okstra-container-build ↔ 리포트 양방향 포인터
182
-
183
- **Files:**
184
- - Modify: `skills/okstra-container-build/SKILL.md`
185
-
186
- - [ ] **Step 1:** SKILL.md 의 `up` 성공 안내(published ports) 부근에, 무엇을 확인할지는 implementation 리포트 §5.7.9 Manual User Test (Draft) 를 따르라는 한 줄 추가. (단절 해소 — 환경 기동 후 절차 출처 명시)
187
- - [ ] **Step 2:** Commit. `git add skills/okstra-container-build/SKILL.md && git commit -m "docs(container): point to report Manual User Test section for what to verify"`
188
-
189
- ---
190
-
191
- ### Task 7: 빌드 + 전체 검증
192
-
193
- - [ ] **Step 1:** `npm run build` → `runtime/` 동기화. Expected: BUILD_EXIT=0.
194
- - [ ] **Step 2:** `npm run check` 전체. Expected: exit 0 (Python + JS + validators).
195
- - [ ] **Step 3:** runtime 반영 확인: `grep -rl "Manual User Test" runtime/templates runtime/validators` 가 매치.
196
- - [ ] **Step 4: Commit**(빌드 산출물은 gitignore 라 커밋 없음 — 소스 커밋이 이미 1~6 에서 됨). 푸시는 사용자 지시 시에만.
197
-
198
- ## Self-Review
199
-
200
- **1. Spec coverage:** spec §3 결정 4개 → Task 2/4(위치·강제), Task 3/5(범위·초안/실행), Task 6(container 조건부 연계). spec §6 영향파일 6개 → Task 1~6 에 모두 매핑. spec §8 테스트계획 → Task 2/4 의 렌더·validator 테스트, Task 7 의 validate-workflow + npm run check. 갭 없음.
201
- **2. Placeholder scan:** fixture 파일 경로·일부 프로파일 위치는 "구현 시 grep 로 확정" 으로 명시(데이터 부족 구간) — 그 외 코드/텍스트는 실제 내용 제공.
202
- **3. Type consistency:** `implementation.manualUserTest`(items) ↔ `finalVerification.manualUserTest`(results) 필드명 Task 2/3/4 간 일치. i18n 키 `manualUserTest.*` Task 1 정의 ↔ Task 2/4 소비 일치.
203
- **4. 설계 조정:** spec 의 "빈 스텁 거부" 는 기존 validator 컨벤션(제목 substring 강제)에 맞춰 "제목 강제 + 프로파일 내용 규칙 + self-review" 로 단순화(Global Constraints 에 명시).