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,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 에 명시).
|