okstra 0.123.0 → 0.125.0

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 (98) hide show
  1. package/README.md +1 -0
  2. package/docs/architecture/storage-model.md +3 -1
  3. package/docs/architecture.md +16 -2
  4. package/docs/cli.md +3 -1
  5. package/docs/for-ai/README.md +41 -35
  6. package/docs/for-ai/skills/okstra-brief-gen.md +105 -105
  7. package/docs/for-ai/skills/okstra-container-build.md +61 -61
  8. package/docs/for-ai/skills/okstra-graphify.md +64 -0
  9. package/docs/for-ai/skills/okstra-inspect.md +87 -86
  10. package/docs/for-ai/skills/okstra-manager.md +32 -32
  11. package/docs/for-ai/skills/okstra-memory.md +49 -50
  12. package/docs/for-ai/skills/okstra-pr-gen.md +48 -0
  13. package/docs/for-ai/skills/okstra-rollup.md +58 -58
  14. package/docs/for-ai/skills/okstra-run.md +95 -95
  15. package/docs/for-ai/skills/okstra-schedule-gen.md +106 -106
  16. package/docs/for-ai/skills/okstra-setup.md +63 -64
  17. package/docs/for-ai/skills/okstra-user-response.md +48 -0
  18. package/docs/performance-improvement-plan-v2.md +6 -6
  19. package/docs/pr-template-usage.md +34 -34
  20. package/docs/project-structure-overview.md +91 -70
  21. package/docs/task-process/README.md +33 -33
  22. package/docs/task-process/common-flow.md +26 -26
  23. package/docs/task-process/error-analysis.md +20 -21
  24. package/docs/task-process/final-verification.md +41 -41
  25. package/docs/task-process/implementation-planning.md +33 -33
  26. package/docs/task-process/implementation.md +38 -38
  27. package/docs/task-process/release-handoff.md +46 -46
  28. package/docs/task-process/requirements-discovery.md +22 -23
  29. package/package.json +1 -1
  30. package/runtime/BUILD.json +2 -2
  31. package/runtime/agents/workers/antigravity-worker.md +4 -4
  32. package/runtime/agents/workers/claude-worker.md +2 -2
  33. package/runtime/agents/workers/codex-worker.md +4 -4
  34. package/runtime/agents/workers/report-writer-worker.md +4 -4
  35. package/runtime/bin/lib/okstra/usage.sh +1 -1
  36. package/runtime/prompts/coding-preflight/frameworks/node-server.md +1 -1
  37. package/runtime/prompts/launch.template.md +1 -1
  38. package/runtime/prompts/lead/convergence.md +10 -20
  39. package/runtime/prompts/lead/okstra-lead-contract.md +15 -17
  40. package/runtime/prompts/lead/plan-body-verification.md +18 -18
  41. package/runtime/prompts/lead/report-writer.md +46 -44
  42. package/runtime/prompts/lead/team-contract.md +11 -122
  43. package/runtime/prompts/profiles/_common-contract.md +15 -22
  44. package/runtime/prompts/profiles/_implementation-deliverable.md +1 -1
  45. package/runtime/prompts/profiles/_implementation-executor.md +1 -1
  46. package/runtime/prompts/profiles/_implementation-verifier.md +28 -2
  47. package/runtime/prompts/profiles/error-analysis.md +2 -2
  48. package/runtime/prompts/profiles/final-verification.md +1 -1
  49. package/runtime/prompts/profiles/implementation-planning.md +13 -13
  50. package/runtime/prompts/profiles/implementation.md +2 -1
  51. package/runtime/prompts/profiles/improvement-discovery.md +1 -1
  52. package/runtime/prompts/profiles/release-handoff.md +3 -3
  53. package/runtime/prompts/profiles/requirements-discovery.md +17 -18
  54. package/runtime/python/okstra_ctl/models.py +4 -2
  55. package/runtime/python/okstra_ctl/run.py +8 -2
  56. package/runtime/python/okstra_ctl/stage_fix_carry.py +112 -0
  57. package/runtime/schemas/final-report-v1.0.schema.json +6 -6
  58. package/runtime/skills/_fragments/bash-invocation-rule.md +1 -0
  59. package/runtime/skills/_fragments/preflight-outdated-cli.md +1 -0
  60. package/runtime/skills/_fragments/python-bootstrap-note.md +1 -0
  61. package/runtime/skills/okstra-brief-gen/SKILL.md +117 -122
  62. package/runtime/skills/okstra-container-build/SKILL.md +24 -14
  63. package/runtime/skills/okstra-graphify/SKILL.md +12 -4
  64. package/runtime/skills/okstra-inspect/SKILL.md +39 -747
  65. package/runtime/skills/okstra-inspect/facets/cost.md +84 -0
  66. package/runtime/skills/okstra-inspect/facets/error-zip.md +41 -0
  67. package/runtime/skills/okstra-inspect/facets/errors.md +69 -0
  68. package/runtime/skills/okstra-inspect/facets/history.md +90 -0
  69. package/runtime/skills/okstra-inspect/facets/logs.md +89 -0
  70. package/runtime/skills/okstra-inspect/facets/recap.md +96 -0
  71. package/runtime/skills/okstra-inspect/facets/report.md +61 -0
  72. package/runtime/skills/okstra-inspect/facets/status.md +145 -0
  73. package/runtime/skills/okstra-inspect/facets/time.md +56 -0
  74. package/runtime/skills/okstra-manager/SKILL.md +1 -1
  75. package/runtime/skills/okstra-memory/SKILL.md +3 -3
  76. package/runtime/skills/okstra-pr-gen/SKILL.md +3 -3
  77. package/runtime/skills/okstra-rollup/SKILL.md +12 -6
  78. package/runtime/skills/okstra-run/SKILL.md +49 -88
  79. package/runtime/skills/okstra-schedule-gen/SKILL.md +36 -30
  80. package/runtime/skills/okstra-setup/SKILL.md +1 -1
  81. package/runtime/skills/okstra-setup/references/project-config.md +17 -16
  82. package/runtime/skills/okstra-usage/SKILL.md +5 -2
  83. package/runtime/skills/okstra-user-response/SKILL.md +15 -3
  84. package/runtime/templates/prd/brief.template.md +92 -92
  85. package/runtime/templates/project-docs/task-index.template.md +1 -1
  86. package/runtime/templates/reports/error-analysis-input.template.md +1 -1
  87. package/runtime/templates/reports/fan-out-unit.template.md +6 -6
  88. package/runtime/templates/reports/final-verification-input.template.md +6 -6
  89. package/runtime/templates/reports/implementation-input.template.md +1 -1
  90. package/runtime/templates/reports/implementation-planning-input.template.md +1 -1
  91. package/runtime/templates/reports/improvement-discovery-input.template.md +1 -1
  92. package/runtime/templates/reports/quick-input.template.md +1 -1
  93. package/runtime/templates/reports/release-handoff-input.template.md +1 -1
  94. package/runtime/templates/reports/schedule.template.md +22 -22
  95. package/runtime/templates/reports/task-brief.template.md +3 -3
  96. package/runtime/templates/reports/user-response.template.md +20 -20
  97. package/runtime/templates/worker-prompt-preamble.md +111 -13
  98. package/runtime/validators/validate-schedule.py +1 -1
@@ -14,14 +14,14 @@ taskType: "{{FM_TASK_TYPE}}"
14
14
  # OKSTRA Task Brief
15
15
 
16
16
  <!--
17
- brief okstra 워커(Claude/Codex/Antigravity) 코드베이스/도메인 사전지식 없이 분석할 있도록 준비하는 단일 source-of-truth 문서입니다.
18
-
19
- 원칙:
20
- 1. 워커는 외부 링크에 접근할 없음 모든 1차 증거는 inline으로 박을 (fenced code block).
21
- 2. 워커는 도메인 용어를 모름Domain Glossary로 핵심 용어를 사전 정의.
22
- 3. 운영자(operator)용 정보(okstra.sh 명령, working directory) brief에 두지 별도 runbook으로.
23
- 4. Task Type에 따라 작성해야 섹션이 다름해당 태스크의 conditional 블록을 채울 것.
24
- 5. 비어 있는 섹션은 `_N/A — <reason>_`로 명시. 침묵은 워커 혼란의 원인.
17
+ This brief is the single source-of-truth document that lets an okstra worker (Claude/Codex/Antigravity) analyze the task without any prior knowledge of the codebase or domain.
18
+
19
+ Principles:
20
+ 1. Workers cannot reach external linksembed every piece of primary evidence inline (fenced code block).
21
+ 2. Workers don't know domain terms predefine the key terms in the Domain Glossary.
22
+ 3. Keep operator-facing information (okstra.sh commands, working directory) out of the briefput it in a separate runbook.
23
+ 4. The sections you must fill differ by Task Type complete that task's conditional block.
24
+ 5. Mark empty sections explicitly with `_N/A — <reason>_`. Silence is a source of worker confusion.
25
25
  -->
26
26
 
27
27
  ## Identity
@@ -34,51 +34,51 @@ taskType: "{{FM_TASK_TYPE}}"
34
34
  | Task ID | `<TASK-ID>` |
35
35
  | Task Type | `requirements-discovery` \| `error-analysis` \| `implementation-planning` \| `final-verification` |
36
36
  | Issue / Ticket | `<TASK-ID> · <title in original language> (English: <translation if non-English>)` |
37
- | Requested Outcome | <한 문장. run이 산출해야 핵심 결과물> |
37
+ | Requested Outcome | <one sentence. The key deliverable this run must produce> |
38
38
 
39
39
  ---
40
40
 
41
41
  ## Request Summary
42
42
 
43
43
  - **What is being requested or changed?**
44
- <한 문단 또는 bullet 3-5개>
44
+ <one paragraph, or 3-5 bullets>
45
45
  - **Why now?**
46
- <비즈니스/기술 트리거. 마감일, 인시던트, 의존 태스크 등>
46
+ <business/technical trigger. Deadline, incident, dependent task, etc.>
47
47
  - **New / Continuation / Reopened?**
48
- <One of the three + 직전 run 식별자(있다면)>
48
+ <One of the three + prior run identifier (if any)>
49
49
  - **What decision should this run produce?**
50
- <이 run이 답해야 핵심 결정 1-3개. 모호하면 워커가 산만해짐>
50
+ <the 1-3 key decisions this run must answer. Vagueness distracts the worker>
51
51
 
52
52
  ---
53
53
 
54
54
  ## Inline Evidence
55
55
 
56
56
  <!--
57
- 워커는 외부 URL/Notion/Linear/Slack 접근할 없습니다. 1차 증거는 모두 여기에 inline 박을 것.
57
+ Workers cannot reach external URLs / Notion / Linear / Slack. Embed all primary evidence inline here.
58
58
  -->
59
59
 
60
60
  ### Symptom / Sample Payload
61
61
 
62
62
  ```
63
- <관찰된 현상, 응답 페이로드 샘플, UI 스크린샷 caption 텍스트로>
63
+ <observed symptom, sample response payload, UI screenshot caption, etc.as text>
64
64
  ```
65
65
 
66
- ### Logs / Stack Trace (해당되는 경우)
66
+ ### Logs / Stack Trace (if applicable)
67
67
 
68
68
  ```
69
- <로그 발췌. 민감정보는 마스킹>
69
+ <log excerpt. Mask sensitive information>
70
70
  ```
71
71
 
72
72
  ### Relevant Code Excerpts
73
73
 
74
74
  ```typescript
75
75
  // path: src/domains/upload/dto/upload-job.view.ts:23-45
76
- <코드 발췌워커가 파일 전체를 읽지 않아도 핵심을 파악할 있어야 함>
76
+ <code excerptthe worker should grasp the essentials without reading the whole file>
77
77
  ```
78
78
 
79
- ### External Doc Excerpts (Notion/Linear/Confluence 발췌)
79
+ ### External Doc Excerpts (Notion/Linear/Confluence excerpts)
80
80
 
81
- > <원문 인용. 링크는 보조이고 인용이 본체>
81
+ > <quote from the source. The link is secondary; the quote is the substance>
82
82
  > -- Source: <doc title + section>
83
83
 
84
84
  ---
@@ -86,27 +86,27 @@ taskType: "{{FM_TASK_TYPE}}"
86
86
  ## Domain Glossary
87
87
 
88
88
  <!--
89
- Codex/Antigravity 코드베이스를 모릅니다. 핵심 용어 5-15개를 문장씩 정의.
90
- 없는 용어를 워커가 추측하면 분석 품질이 즉시 떨어집니다.
89
+ Codex/Antigravity don't know this codebase. Define 5-15 key terms, one sentence each.
90
+ If a worker guesses at an undefined term, analysis quality drops immediately.
91
91
  -->
92
92
 
93
93
  | Term | Definition |
94
94
  |------|-----------|
95
- | `<도메인 용어 1>` | <1-2 문장 정의> |
96
- | `<도메인 용어 2>` | <1-2 문장 정의> |
97
- | `<코드 식별자 1>` | <역할 + 위치 + 다른 entity와의 관계> |
95
+ | `<domain term 1>` | <1-2 sentence definition> |
96
+ | `<domain term 2>` | <1-2 sentence definition> |
97
+ | `<code identifier 1>` | <role + location + relationship to other entities> |
98
98
 
99
99
  ---
100
100
 
101
101
  ## Current Context
102
102
 
103
103
  - **Current behavior or state**:
104
- <지금 시스템이 어떻게 동작하는가>
104
+ <how the system behaves today>
105
105
  - **Desired behavior or outcome**:
106
- <어떻게 동작해야 하는가>
106
+ <how it should behave>
107
107
  - **Existing related implementation**:
108
- - `<file-path>:<line-range>` — <역할 한 줄>
109
- - **Related code paths** (참조용직접 발췌는 Inline Evidence):
108
+ - `<file-path>:<line-range>` — <one-line role>
109
+ - **Related code paths** (for reference put direct excerpts in Inline Evidence):
110
110
  - `<path>`
111
111
  - `<path>`
112
112
 
@@ -115,74 +115,74 @@ Codex/Antigravity는 이 코드베이스를 모릅니다. 핵심 용어 5-15개
115
115
  ## Out of Scope
116
116
 
117
117
  <!--
118
- 명시적 제외 목록. 워커 scope-creep 방지의 핵심.
118
+ An explicit exclusion list. Central to preventing worker scope-creep.
119
119
  -->
120
120
 
121
- run에서는 **다루지 않을** 것들:
121
+ Things this run will **not** address:
122
122
 
123
- - <out-of-scope item 1 + 제외 이유>
124
- - <out-of-scope item 2 + 제외 이유>
125
- - <별도 ticket/run으로 다룰 항목 ticket ID 명시>
123
+ - <out-of-scope item 1 + reason for exclusion>
124
+ - <out-of-scope item 2 + reason for exclusion>
125
+ - <item to be handled in a separate ticket/run specify the ticket ID>
126
126
 
127
127
  ---
128
128
 
129
129
  ## Task-Type Focus
130
130
 
131
131
  <!--
132
- 아래 블록 현재 task-type 해당하는 것만 채우고, 나머지는 삭제하세요.
132
+ Of the two blocks below, fill only the one matching the current task-type and delete the rest.
133
133
  -->
134
134
 
135
135
  ### If `requirements-discovery`
136
136
 
137
137
  - **Why might this be a bugfix?**
138
- <증거 또는 "weak signal — none observed">
138
+ <evidence, or "weak signal — none observed">
139
139
  - **Why might this be a feature/improvement?**
140
- <증거>
140
+ <evidence>
141
141
  - **Why might this be a refactor/ops?**
142
- <증거>
143
- - **Classification blockers** — 무엇이 분류 확신을 막고 있는가?
144
- <evidence gap 구체적으로>
142
+ <evidence>
143
+ - **Classification blockers** — what is preventing a confident classification?
144
+ <the evidence gap, specifically>
145
145
 
146
146
  ### If `error-analysis`
147
147
 
148
- - **Symptom** — 사용자/시스템이 무엇을 관찰하는가?
149
- - **Reproduction Steps** — 1-2-3 형식. 환경/사전조건 명시.
148
+ - **Symptom** — what does the user/system observe?
149
+ - **Reproduction Steps** — 1-2-3 format. State the environment/preconditions.
150
150
  ```
151
151
  1. <env: staging | local | prod>
152
152
  2. <action>
153
153
  3. <action>
154
154
  4. Expected: <…> / Actual: <…>
155
155
  ```
156
- - **Frequency** — 항상 / 간헐적 / 특정 조건에서만 / 1회성?
157
- - **Blast Radius** — 영향받는 사용자/요청/data 범위
158
- - **Suspected Cause(s)** — 현재까지의 가설. 각각 신뢰도(High/Med/Low) 근거.
159
- - **What has been ruled out** — 이미 검증한 false leads (워커가 같은 가지 않게)
156
+ - **Frequency** — always / intermittent / only under specific conditions / one-off?
157
+ - **Blast Radius** — scope of affected users/requests/data
158
+ - **Suspected Cause(s)** — hypotheses so far. Each with confidence (High/Med/Low) and rationale.
159
+ - **What has been ruled out** — false leads already verified (so the worker doesn't retread them)
160
160
 
161
161
  ---
162
162
 
163
163
  ## Constraints and Risks
164
164
 
165
- - **Business constraints**: <e.g. 개인정보, SLA — 외부 승인/권한 항목은 적지 (사용자가 모든 권한을 가진다고 가정)>
166
- - **Technical constraints**: <e.g. backward-compat, 기존 client, schema>
167
- - **Delivery constraints**: <마감, 의존 배포, 롤아웃 게이트단, 외부 승인 대기·권한 확인은 일정 요소로 적지 것>
168
- - **Approval / review checkpoints**: _N/A — 사용자가 모든 권한·승인 권한을 보유한다고 가정 (okstra 기본 규칙). 정말로 외부 차단 요소가 있을 때만 구체적으로 기술._
169
- - **Known assumptions**: <명시적 가정워커가 검증할 항목>
170
- - **Open uncertainties**: <확인 필요한 답이 나오면 결정이 잠금 해제됨. 외부 권한·승인 관련 항목은 제외>
165
+ - **Business constraints**: <e.g. PII, SLA — do not list external approval/authorization items (assume the user holds all permissions)>
166
+ - **Technical constraints**: <e.g. backward-compat, existing client, schema>
167
+ - **Delivery constraints**: <deadline, dependent deployment, rollout gatebut do not list waiting on external approval or permission checks as schedule factors>
168
+ - **Approval / review checkpoints**: _N/A — assume the user holds all permission and approval authority (okstra default rule). Describe specifically only when a genuine external blocker exists._
169
+ - **Known assumptions**: <explicit assumptionsitems for the worker to verify>
170
+ - **Open uncertainties**: <things to confirmanswering them unlocks a decision. Exclude external permission/approval items>
171
171
 
172
172
  ---
173
173
 
174
174
  ## Configuration / Deployment Context
175
175
 
176
176
  <!--
177
- 섹션은 *해당되는 경우에만* 채우세요. DTO 변경, 순수 로직 수정, 문서 작업 등은 보통 _N/A_입니다.
178
- 무관할 때는 섹션 전체를 다음 줄로 대체:
177
+ Fill this section *only when applicable*. DTO changes, pure logic edits, docs work, etc. are usually _N/A_.
178
+ When irrelevant, replace the entire section with this single line:
179
179
 
180
180
  _N/A — this task does not touch config or deployment._
181
181
  -->
182
182
 
183
- - **Config files in scope**: `<path>` — <어떤 키가 관련>
184
- - **Current observed values**: <key=value, 출처 명시>
185
- - **Expected values / invariants**: <변하면 되는 + 변해야 하는 것>
183
+ - **Config files in scope**: `<path>` — <which keys are relevant>
184
+ - **Current observed values**: <key=value, cite the source>
185
+ - **Expected values / invariants**: <what must not change + what must change>
186
186
  - **Deployment manifests in scope**: `<helm chart / k8s manifest / terraform path>`
187
187
  - **Rollout invariants**: <e.g. zero-downtime, version skew window>
188
188
 
@@ -191,45 +191,45 @@ Codex/Antigravity는 이 코드베이스를 모릅니다. 핵심 용어 5-15개
191
191
  ## External Resource Hints (for Lead pre-fetch)
192
192
 
193
193
  <!--
194
- okstra Lead 워커 프롬프트에 inline으로 박아야 외부 자원 목록.
195
- 워커는 MCP/외부 도구에 직접 접근하지 않으므로 Lead 사전에 snapshot해서 prompt에 embed합니다.
194
+ A list of external resources the okstra Lead must embed inline into the worker prompt.
195
+ Workers don't access MCP/external tools directly, so the Lead snapshots them ahead of time and embeds them in the prompt.
196
196
  -->
197
197
 
198
198
  | Resource | Type | Why needed |
199
199
  |----------|------|-----------|
200
- | `<table-name>` | MySQL schema | <어느 분석에서 schema 검증 필요> |
201
- | `<library@version>` | Library docs (`mcp__test-context7`) | <API 시그니처 확인용> |
202
- | `<aws-doc-keyword>` | AWS knowledge base | <설계 검증용> |
200
+ | `<table-name>` | MySQL schema | <which analysis needs schema verification> |
201
+ | `<library@version>` | Library docs (`mcp__test-context7`) | <to confirm API signatures> |
202
+ | `<aws-doc-keyword>` | AWS knowledge base | <for design verification> |
203
203
  | `/Volumes/.../app/<sibling-project>/<path>` | Cross-project file | <reference impl> |
204
204
 
205
- 자원 없음이 명확하면 섹션을 `_N/A_`로 표시.
205
+ If it's clear there are no resources, mark this section `_N/A_`.
206
206
 
207
207
  ---
208
208
 
209
209
  ## Related Tasks
210
210
 
211
211
  <!--
212
- 관계 라벨을 반드시 명시: blocker | blocked-by | sibling | follow-up | duplicate | shares-codepath
212
+ You must specify a relation label: blocker | blocked-by | sibling | follow-up | duplicate | shares-codepath
213
213
  -->
214
214
 
215
215
  | Task | Relation | Note |
216
216
  |------|----------|------|
217
- | `DEV-XXXX` | `sibling` | 같은 epic, 같은 코드베이스, 동시 변경 가능성 |
218
- | `DEV-YYYY` | `blocker` | task DEV-YYYY 완료 후에만 시작 가능 |
217
+ | `DEV-XXXX` | `sibling` | same epic, same codebase, possible concurrent changes |
218
+ | `DEV-YYYY` | `blocker` | this task can start only after DEV-YYYY completes |
219
219
 
220
220
  ---
221
221
 
222
222
  ## Definition of Done (for this run)
223
223
 
224
224
  <!--
225
- Requested Outcome 그림. 여기서는 " run의 산출물이 충족해야 검증 가능한 조건"을 적습니다.
225
+ Requested Outcome is the big picture. Here you write "the verifiable conditions this run's output must satisfy."
226
226
  -->
227
227
 
228
- run final report 다음을 모두 충족해야 합니다:
228
+ This run's final report must satisfy all of the following:
229
229
 
230
- - [ ] <결정 항목 1에 대한 명시적 답변 또는 "결정 불가 + 이유">
231
- - [ ] <결정 항목 2에 대한 명시적 답변>
232
- - [ ] <남은 blocking question 목록>
230
+ - [ ] <explicit answer to decision item 1, or "undecidable + reason">
231
+ - [ ] <explicit answer to decision item 2>
232
+ - [ ] <list of remaining blocking questions>
233
233
  - [ ] <recommended next phase + reasoning>
234
234
 
235
235
  ---
@@ -237,13 +237,13 @@ Requested Outcome은 큰 그림. 여기서는 "이 run의 산출물이 충족해
237
237
  ## Questions for Workers
238
238
 
239
239
  <!--
240
- P0(반드시 답해야 함) / P1(가능하면 ) / P2(보너스)로 우선순위 명시.
240
+ Specify priority as P0 (must answer) / P1 (answer if possible) / P2 (bonus).
241
241
  -->
242
242
 
243
- 1. **[P0]** <핵심 질문 1>
244
- 2. **[P0]** <핵심 질문 2>
245
- 3. **[P1]** <보조 질문>
246
- 4. **[P2]** <탐색적 질문>
243
+ 1. **[P0]** <key question 1>
244
+ 2. **[P0]** <key question 2>
245
+ 3. **[P1]** <secondary question>
246
+ 4. **[P2]** <exploratory question>
247
247
 
248
248
  ---
249
249
 
@@ -261,26 +261,26 @@ P0(반드시 답해야 함) / P1(가능하면 답) / P2(보너스)로 우선순
261
261
  ## Notes for Lead (synthesis emphasis)
262
262
 
263
263
  <!--
264
- 워커 셀렉션(어느 모델을 쓸지) task-manifest.json recommendedWorkers에서 자동 결정되므로 여기에 적지 마세요.
265
- 섹션은 *합성 강조점*만 다룹니다.
264
+ Worker selection (which model to use) is decided automatically from recommendedWorkers in task-manifest.json, so don't write it here.
265
+ This section covers *synthesis emphasis* only.
266
266
  -->
267
267
 
268
- - **Synthesis priority**: <e.g. 안전성 vs 속도, public/private 경계 정확성, backward compat>
269
- - **Where worker disagreement matters most**: <consensus 가장 중요한 지점>
270
- - **Where reduced confidence is acceptable**: <탐색 영역가설만 나와도 충분>
268
+ - **Synthesis priority**: <e.g. safety vs speed, public/private boundary accuracy, backward compat>
269
+ - **Where worker disagreement matters most**: <the point where consensus matters most>
270
+ - **Where reduced confidence is acceptable**: <exploratory areasa hypothesis alone is enough>
271
271
 
272
272
  ---
273
273
 
274
274
  ## Brief Hygiene Checklist
275
275
 
276
- 작성 자가 점검:
277
-
278
- - [ ] 모든 외부 링크에 대해 inline 발췌가 박혀 있다
279
- - [ ] Domain Glossary 코드베이스 무지식 워커가 알아야 용어가 모두 있다
280
- - [ ] Out of Scope 명시적으로 적혀 있다
281
- - [ ] Task-Type Focus 해당 블록만 남아 있다 (다른 블록은 삭제됨)
282
- - [ ] error-analysis라면 Reproduction Steps 채워져 있다
283
- - [ ] Definition of Done 검증 가능한 체크리스트 형태다
284
- - [ ] Configuration / Deployment 섹션은 해당 시에만 내용이 있고, 무관 `_N/A_`로 닫혀 있다
285
- - [ ] 한글/영문/원어 ticket title 모두 식별 가능하다
286
- - [ ] Related Tasks 관계 라벨이 명시되어 있다
276
+ Self-check after writing:
277
+
278
+ - [ ] Every external link has an inline excerpt embedded
279
+ - [ ] The Domain Glossary has every term a codebase-blind worker needs to know
280
+ - [ ] Out of Scope is written explicitly
281
+ - [ ] Only the relevant block of Task-Type Focus remains (the other block is deleted)
282
+ - [ ] If error-analysis, Reproduction Steps are filled in
283
+ - [ ] Definition of Done is a verifiable checklist
284
+ - [ ] The Configuration / Deployment section has content only when applicable, and is closed with `_N/A_` when irrelevant
285
+ - [ ] The ticket title is identifiable in Korean/English/original language
286
+ - [ ] Related Tasks have relation labels specified
@@ -69,4 +69,4 @@ taskType: "{{FM_TASK_TYPE}}"
69
69
 
70
70
  ## Notes
71
71
 
72
- - 문서는 사람이 빠르게 훑어보기 위한 요약입니다. 정본·상세 metadata `task-manifest.json` 을 참조하세요.
72
+ - This document is a summary for humans to skim quickly. For the canonical, detailed metadata, refer to `task-manifest.json`.
@@ -20,7 +20,7 @@ taskType: "{{FM_TASK_TYPE}}"
20
20
  - Task ID:
21
21
  - Related Tasks:
22
22
  - Issue / Ticket:
23
- - 값이 비면 워커는 `Task ID`로 폴백한다 (prefix 없이 `8852`처럼). run 여러 ticket을 동시에 다루면 콤마로 구분 (`TICKET-123, TICKET-456`). 어느 쪽으로도 식별 불가하면 `unknown`을 허용한다.
23
+ - If left empty, workers fall back to the `Task ID` (without a prefix, like `8852`). When a single run handles multiple tickets at once, separate them with commas (`TICKET-123, TICKET-456`). If neither can be identified, `unknown` is allowed.
24
24
  - Task Type: `error-analysis`
25
25
  - Requested Outcome:
26
26
 
@@ -2,24 +2,24 @@
2
2
  ---
3
3
  unit-id: {{UNIT_ID}}
4
4
  domain: {{DOMAIN}}
5
- <!-- depends-on 예: [unit-001] (의존 없으면 []) -->
5
+ <!-- depends-on example: [unit-001] (use [] if there are no dependencies) -->
6
6
  depends-on: {{DEPENDS_ON}}
7
7
  recommended-next-phase: {{NEXT_PHASE}}
8
8
  ---
9
9
 
10
10
  # Fan-out Unit: {{UNIT_ID}} ({{DOMAIN}})
11
11
 
12
- > requirements-discovery fan-out 산출 packet. `okstra-run --task-brief <이 파일 경로>`
13
- > task-key 시작한다. 파일은 run 의 입력 packet 이다.
12
+ > Packet produced by requirements-discovery fan-out. Start a new task-key with `okstra-run --task-brief <this file's path>`.
13
+ > This file is the input packet for that run.
14
14
 
15
15
  ## Scope
16
16
 
17
- <!-- 단위가 다루는 작업 항목 1개를 자족적으로 서술. 다른 단위와 섞지 것. -->
17
+ <!-- Self-contained description of the single work item this unit covers. Do not mix it with other units. -->
18
18
 
19
19
  ## Evidence
20
20
 
21
- <!-- path:line 근거. requirements-discovery file inspection 으로 확인한 위치. -->
21
+ <!-- path:line evidence. Locations that requirements-discovery confirmed via file inspection. -->
22
22
 
23
23
  ## Depends-on rationale
24
24
 
25
- <!-- depends-on 적은 unit 의존하는지 1줄씩. 없으면 _(none)_ -->
25
+ <!-- One line per unit listed in depends-on explaining why it depends on that unit. Use _(none)_ if there are none. -->
@@ -29,18 +29,18 @@ taskType: "{{FM_TASK_TYPE}}"
29
29
  - What was supposed to be delivered?
30
30
  - What is the intended acceptance decision?
31
31
 
32
- ## 검증 모드
32
+ ## Verification Mode
33
33
 
34
- - 기본은 **전체-task** 검증입니다(`--stage auto`): 모든 Stage Map stage 구현·머지된 번 실행합니다.
35
- - 특정 stage 격리 검증하려면 `--stage N` 으로 **단독-stage** 모드를 씁니다(release-handoff 진입 불가, 부분 검증).
36
- - worktree / base / head okstra registry `consumers.jsonl` 에서 자동 해소하므로 입력서에 수동 기입하지 않습니다.
34
+ - The default is **whole-task** verification (`--stage auto`): it runs once after every Stage Map stage has been implemented and merged.
35
+ - To verify only a specific stage in isolation, use **single-stage** mode with `--stage N` (cannot enter release-handoff; partial verification).
36
+ - okstra automatically resolves worktree / base / head from the registry and `consumers.jsonl`, so do not fill them in manually in this input sheet.
37
37
 
38
38
  ## Source Implementation Report
39
39
 
40
40
  - Path (project-relative) to the originating `implementation` final-report:
41
41
  - Quoted `Commit list` / `Diff summary` excerpt from the implementation report:
42
42
 
43
- > 보고서 경로가 비거나 누락된 보고서를 가리키면 final-verification status `blocked` 으로 끝내고 `implementation` 또는 `implementation-planning` 으로 라우팅합니다. 검증 대상(worktree/base) okstra 자동 해소하므로 수동 기입이 어긋나 막히는 일은 없습니다.
43
+ > If the report path is empty or points to a missing report, final-verification ends with status `blocked` and routes to `implementation` or `implementation-planning`. The verification target (worktree/base) is resolved automatically by okstra, so a mismatched manual entry cannot cause a block.
44
44
 
45
45
  ## Requirement Coverage Source
46
46
 
@@ -49,7 +49,7 @@ taskType: "{{FM_TASK_TYPE}}"
49
49
  - Requirement IDs / acceptance IDs to verify:
50
50
  - Requirements intentionally excluded from this verification:
51
51
 
52
- > final-verification source requirement / acceptance id 마다 Validation Evidence artifact cite 해야 한다. source 비면 brief `## Acceptance Criteria` 기본 source 로 사용한다.
52
+ > final-verification MUST cite an artifact in Validation Evidence for each requirement / acceptance id in the source above. If the source is empty, use the brief's `## Acceptance Criteria` as the default source.
53
53
 
54
54
  ## Verification Evidence
55
55
 
@@ -20,7 +20,7 @@ taskType: "{{FM_TASK_TYPE}}"
20
20
  - Task ID:
21
21
  - Related Tasks:
22
22
  - Issue / Ticket:
23
- - 값이 비면 워커는 `Task ID`로 폴백한다 (prefix 없이 `8852`처럼). run 여러 ticket을 동시에 다루면 콤마로 구분 (`TICKET-123, TICKET-456`). 어느 쪽으로도 식별 불가하면 `unknown`을 허용한다.
23
+ - If left empty, workers fall back to the `Task ID` (without a prefix, like `8852`). When a single run handles multiple tickets at once, separate them with commas (`TICKET-123, TICKET-456`). If neither can be identified, `unknown` is allowed.
24
24
  - Task Type: `implementation`
25
25
  - Requested Outcome:
26
26
 
@@ -20,7 +20,7 @@ taskType: "{{FM_TASK_TYPE}}"
20
20
  - Task ID:
21
21
  - Related Tasks:
22
22
  - Issue / Ticket:
23
- - 값이 비면 워커는 `Task ID`로 폴백한다 (prefix 없이 `8852`처럼). run 여러 ticket을 동시에 다루면 콤마로 구분 (`TICKET-123, TICKET-456`). 어느 쪽으로도 식별 불가하면 `unknown`을 허용한다.
23
+ - If left empty, workers fall back to the `Task ID` (without a prefix, like `8852`). When a single run handles multiple tickets at once, separate them with commas (`TICKET-123, TICKET-456`). If neither can be identified, `unknown` is allowed.
24
24
  - Task Type: `implementation-planning`
25
25
  - Requested Outcome:
26
26
 
@@ -20,7 +20,7 @@ taskType: "{{FM_TASK_TYPE}}"
20
20
  - Task ID:
21
21
  - Related Tasks:
22
22
  - Issue / Ticket:
23
- - 값이 비면 워커는 `Task ID` 로 폴백한다.
23
+ - If left empty, workers fall back to the `Task ID`.
24
24
  - Task Type: `improvement-discovery`
25
25
  - Requested Outcome:
26
26
 
@@ -20,7 +20,7 @@ taskType: "{{FM_TASK_TYPE}}"
20
20
  - Task ID:
21
21
  - Related Tasks:
22
22
  - Issue / Ticket:
23
- - 값이 비면 워커는 `Task ID`로 폴백한다 (prefix 없이 `8852`처럼). run 여러 ticket을 동시에 다루면 콤마로 구분 (`TICKET-123, TICKET-456`). 어느 쪽으로도 식별 불가하면 `unknown`을 허용한다.
23
+ - If left empty, workers fall back to the `Task ID` (without a prefix, like `8852`). When a single run handles multiple tickets at once, separate them with commas (`TICKET-123, TICKET-456`). If neither can be identified, `unknown` is allowed.
24
24
  - Requested Task Type:
25
25
  - Requested Outcome:
26
26
 
@@ -44,7 +44,7 @@ taskType: "{{FM_TASK_TYPE}}"
44
44
 
45
45
  ## Candidate PR Base Branches
46
46
 
47
- - Default options offered to the user: `staging` | `preprod` | `prod` | `main` | `dev` | 직접 입력
47
+ - Default options offered to the user: `staging` | `preprod` | `prod` | `main` | `dev` | custom input
48
48
  - Repo-specific preference, if known (e.g. `main` is the integration branch):
49
49
  - Branches that MUST NOT be used as a base in this repo (security / freeze rules):
50
50
 
@@ -20,42 +20,42 @@ taskType: "{{FM_TASK_TYPE}}"
20
20
 
21
21
  ## At a Glance
22
22
 
23
- **총 <N>개 task / 예상 소요: <X.X> ~ <Y.Y> days (Effort 합산)**
23
+ **<N> tasks total / estimated effort: <X.X> ~ <Y.Y> days (Effort sum)**
24
24
 
25
25
  | # | Task ID | Title | Category | Priority | Effort | Days | taskType | Risk | Phase |
26
26
  |---|---------|-------|----------|----------|--------|------|----------|------|-------|
27
27
  | 1 | <TASK-ID> | <Title> | <category> | <P0~P3> | <S/M/L/XL> | <range> | <taskType> | <risk> | <1/2/3> |
28
28
 
29
- **Effort 분포**: S × <n> / M × <n> / L × <n> / XL × <n>
30
- **Risk 분포**: Very Low × <n> / Low × <n> / Medium × <n> / Med-High × <n> / High × <n>
31
- **Repo별 영향**: <repo1> (<n>) / <repo2> (<n>)
29
+ **Effort distribution**: S × <n> / M × <n> / L × <n> / XL × <n>
30
+ **Risk distribution**: Very Low × <n> / Low × <n> / Medium × <n> / Med-High × <n> / High × <n>
31
+ **Impact by repo**: <repo1> (<n>) / <repo2> (<n>)
32
32
 
33
33
  ---
34
34
 
35
35
  ## Executive Summary
36
36
 
37
- <2~4 문장Phase 분류 요약 + 진행 전략>
37
+ <2-4 sentencesphase-classification summary + execution strategy>
38
38
 
39
- - **Phase 1 (Critical Fixes)**: <n>개 task — <summary>
40
- - **Phase 2 (Enhancements)**: <n>개 task — <summary>
41
- - **Phase 3 (Architecture)**: <n>개 task — <summary>
39
+ - **Phase 1 (Critical Fixes)**: <n> tasks — <summary>
40
+ - **Phase 2 (Enhancements)**: <n> tasks — <summary>
41
+ - **Phase 3 (Architecture)**: <n> tasks — <summary>
42
42
 
43
- ### Effort Sizing 기준
43
+ ### Effort Sizing Criteria
44
44
 
45
- | Size | 기준 | Day(s) |
45
+ | Size | Criteria | Day(s) |
46
46
  |------|------|--------|
47
- | **S** | 1-2 files, 1 repo, 테스트 수정만, DB 변경 없음 | 0.5 - 1 |
48
- | **M** | 3-5 files, 1 repo, 신규 테스트 포함, DB 변경 없음 | 2 - 3 |
49
- | **L** | 5-15 files, 2-3 repos, 순차 배포, 패키지 릴리스 포함 가능 | 3 - 5 |
50
- | **XL** | 15+ files, 3+ repos + infra, frontend 동시 변경, 아키텍처 전환 | 5 - 10 |
51
- | **XXL** | 작업 세분화 필요 | 10 - |
47
+ | **S** | 1-2 files, 1 repo, test changes only, no DB changes | 0.5 - 1 |
48
+ | **M** | 3-5 files, 1 repo, includes new tests, no DB changes | 2 - 3 |
49
+ | **L** | 5-15 files, 2-3 repos, sequential deploy, may include package release | 3 - 5 |
50
+ | **XL** | 15+ files, 3+ repos + infra, concurrent frontend changes, architecture migration | 5 - 10 |
51
+ | **XXL** | needs further decomposition | 10 - |
52
52
 
53
53
  ---
54
54
 
55
55
  ## Task Dependency Graph
56
56
 
57
57
  <!-- Use ONE of:
58
- (A) literal `_의존 정보 없음_` when no edges exist (single-task scope or no extracted edges).
58
+ (A) literal `_none_` when no edges exist (single-task scope or no extracted edges).
59
59
  (B) plain ``` fenced adjacency-list block. Each non-empty line is one of:
60
60
  - adjacency: `<TASK-ID> -> <TASK-ID>[, <TASK-ID>]*`
61
61
  - comment: `# <free prose>` (max one per group)
@@ -72,7 +72,7 @@ taskType: "{{FM_TASK_TYPE}}"
72
72
  - Both endpoints MUST be `TASK-ID` literals (same identifiers as the At a Glance table). Free text is forbidden.
73
73
  - Fence MUST be plain ``` with NO language tag. ```mermaid / ```plantuml / ```graphviz / ```dot are all rejected.
74
74
  - If only one task is in scope (no dependencies), use Shape A — do NOT emit an empty fence. -->
75
- _의존 정보 없음_
75
+ _none_
76
76
 
77
77
  ---
78
78
 
@@ -83,7 +83,7 @@ _의존 정보 없음_
83
83
  Render as ASCII inside a fenced ``` block with NO language tag.
84
84
  Mermaid / PlantUML / Graphviz are forbidden.
85
85
  The axis is RELATIVE DAY-COUNTS (Day 1 / J1, …) — never calendar dates.
86
- If day estimates are missing, omit this whole section and replace it with one blockquote: `> _Gantt Chart 생략: <reason>_`. -->
86
+ If day estimates are missing, omit this whole section and replace it with one blockquote: `> _Gantt Chart omitted: <reason>_`. -->
87
87
 
88
88
  ```
89
89
  Day: 1 5 10 15 20 25 30
@@ -97,7 +97,7 @@ Phase 3
97
97
  <TASK-ID> (<size>) ████ (after <TASK-ID>)
98
98
  ```
99
99
 
100
- > 가로축은 **상대 일수**입니다 (Day 1 = Phase 1 시작). 범례: `! crit` = 임계 경로(critical path), `est` = 추정 배분, `█` = 확정 구간, `░` = 상한/불확실 구간.
100
+ > The axis is in **relative day-counts** (Day 1 = Phase 1 start). Legend: `! crit` = critical path, `est` = estimated allocation, `█` = confirmed span, `░` = upper-bound / uncertain span.
101
101
 
102
102
  ---
103
103
 
@@ -136,13 +136,13 @@ Phase 3
136
136
 
137
137
  ## Phase 2: Enhancements
138
138
 
139
- _없음_ <!-- or repeat per-task block -->
139
+ _none_ <!-- or repeat per-task block -->
140
140
 
141
141
  ---
142
142
 
143
143
  ## Phase 3: Architecture
144
144
 
145
- _없음_ <!-- or repeat per-task block -->
145
+ _none_ <!-- or repeat per-task block -->
146
146
 
147
147
  ---
148
148
 
@@ -181,6 +181,6 @@ _없음_ <!-- or repeat per-task block -->
181
181
 
182
182
  | Code | Description |
183
183
  |------|-------------|
184
- | FC-5 | 결제 게이트웨이 타임아웃 처리 누락 |
184
+ | FC-5 | Missing payment gateway timeout handling |
185
185
  -->
186
186