okstra 0.123.0 → 0.124.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.
- package/README.md +1 -0
- package/docs/architecture/storage-model.md +1 -1
- package/docs/architecture.md +11 -1
- package/docs/cli.md +2 -0
- package/docs/for-ai/README.md +41 -35
- package/docs/for-ai/skills/okstra-brief-gen.md +105 -105
- package/docs/for-ai/skills/okstra-container-build.md +61 -61
- package/docs/for-ai/skills/okstra-graphify.md +64 -0
- package/docs/for-ai/skills/okstra-inspect.md +86 -86
- package/docs/for-ai/skills/okstra-manager.md +32 -32
- package/docs/for-ai/skills/okstra-memory.md +49 -50
- package/docs/for-ai/skills/okstra-pr-gen.md +48 -0
- package/docs/for-ai/skills/okstra-rollup.md +58 -58
- package/docs/for-ai/skills/okstra-run.md +95 -95
- package/docs/for-ai/skills/okstra-schedule-gen.md +106 -106
- package/docs/for-ai/skills/okstra-setup.md +63 -64
- package/docs/for-ai/skills/okstra-user-response.md +48 -0
- package/docs/performance-improvement-plan-v2.md +4 -4
- package/docs/pr-template-usage.md +34 -34
- package/docs/project-structure-overview.md +91 -70
- package/docs/task-process/README.md +33 -33
- package/docs/task-process/common-flow.md +26 -26
- package/docs/task-process/error-analysis.md +20 -21
- package/docs/task-process/final-verification.md +41 -41
- package/docs/task-process/implementation-planning.md +33 -33
- package/docs/task-process/implementation.md +38 -38
- package/docs/task-process/release-handoff.md +46 -46
- package/docs/task-process/requirements-discovery.md +22 -23
- package/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/agents/workers/antigravity-worker.md +4 -4
- package/runtime/agents/workers/claude-worker.md +2 -2
- package/runtime/agents/workers/codex-worker.md +4 -4
- package/runtime/agents/workers/report-writer-worker.md +4 -4
- package/runtime/prompts/coding-preflight/frameworks/node-server.md +1 -1
- package/runtime/prompts/launch.template.md +1 -1
- package/runtime/prompts/lead/convergence.md +10 -20
- package/runtime/prompts/lead/okstra-lead-contract.md +14 -16
- package/runtime/prompts/lead/plan-body-verification.md +18 -18
- package/runtime/prompts/lead/report-writer.md +43 -44
- package/runtime/prompts/lead/team-contract.md +11 -122
- package/runtime/prompts/profiles/_common-contract.md +15 -22
- package/runtime/prompts/profiles/_implementation-deliverable.md +1 -1
- package/runtime/prompts/profiles/_implementation-executor.md +1 -1
- package/runtime/prompts/profiles/_implementation-verifier.md +2 -2
- package/runtime/prompts/profiles/error-analysis.md +2 -2
- package/runtime/prompts/profiles/final-verification.md +1 -1
- package/runtime/prompts/profiles/implementation-planning.md +13 -13
- package/runtime/prompts/profiles/implementation.md +1 -1
- package/runtime/prompts/profiles/improvement-discovery.md +1 -1
- package/runtime/prompts/profiles/release-handoff.md +3 -3
- package/runtime/prompts/profiles/requirements-discovery.md +18 -18
- package/runtime/skills/_fragments/bash-invocation-rule.md +1 -0
- package/runtime/skills/_fragments/preflight-outdated-cli.md +1 -0
- package/runtime/skills/_fragments/python-bootstrap-note.md +1 -0
- package/runtime/skills/okstra-brief-gen/SKILL.md +117 -122
- package/runtime/skills/okstra-container-build/SKILL.md +24 -14
- package/runtime/skills/okstra-graphify/SKILL.md +12 -4
- package/runtime/skills/okstra-inspect/SKILL.md +104 -98
- package/runtime/skills/okstra-manager/SKILL.md +1 -1
- package/runtime/skills/okstra-memory/SKILL.md +3 -3
- package/runtime/skills/okstra-rollup/SKILL.md +12 -6
- package/runtime/skills/okstra-run/SKILL.md +49 -88
- package/runtime/skills/okstra-schedule-gen/SKILL.md +36 -30
- package/runtime/skills/okstra-setup/SKILL.md +1 -1
- package/runtime/skills/okstra-setup/references/project-config.md +17 -16
- package/runtime/skills/okstra-usage/SKILL.md +5 -2
- package/runtime/skills/okstra-user-response/SKILL.md +15 -3
- package/runtime/templates/prd/brief.template.md +92 -92
- package/runtime/templates/reports/error-analysis-input.template.md +1 -1
- package/runtime/templates/reports/fan-out-unit.template.md +6 -6
- package/runtime/templates/reports/final-verification-input.template.md +6 -6
- package/runtime/templates/reports/implementation-input.template.md +1 -1
- package/runtime/templates/reports/implementation-planning-input.template.md +1 -1
- package/runtime/templates/reports/improvement-discovery-input.template.md +1 -1
- package/runtime/templates/reports/quick-input.template.md +1 -1
- package/runtime/templates/reports/release-handoff-input.template.md +1 -1
- package/runtime/templates/reports/schedule.template.md +22 -22
- package/runtime/templates/reports/task-brief.template.md +3 -3
- package/runtime/templates/reports/user-response.template.md +20 -20
- package/runtime/templates/worker-prompt-preamble.md +111 -13
- 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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
1.
|
|
21
|
-
2.
|
|
22
|
-
3.
|
|
23
|
-
4.
|
|
24
|
-
5.
|
|
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 links → embed 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 brief — put 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 |
|
|
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
|
-
|
|
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 +
|
|
48
|
+
<One of the three + prior run identifier (if any)>
|
|
49
49
|
- **What decision should this run produce?**
|
|
50
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 excerpt — the 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
|
|
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
|
-
|
|
|
96
|
-
|
|
|
97
|
-
|
|
|
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** (
|
|
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
|
-
|
|
118
|
+
An explicit exclusion list. Central to preventing worker scope-creep.
|
|
119
119
|
-->
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
Things this run will **not** address:
|
|
122
122
|
|
|
123
|
-
- <out-of-scope item 1 +
|
|
124
|
-
- <out-of-scope item 2 +
|
|
125
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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** —
|
|
157
|
-
- **Blast Radius** —
|
|
158
|
-
- **Suspected Cause(s)** —
|
|
159
|
-
- **What has been ruled out** —
|
|
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.
|
|
166
|
-
- **Technical constraints**: <e.g. backward-compat,
|
|
167
|
-
- **Delivery constraints**:
|
|
168
|
-
- **Approval / review checkpoints**: _N/A —
|
|
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 gate — but 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 assumptions — items for the worker to verify>
|
|
170
|
+
- **Open uncertainties**: <things to confirm — answering 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
|
-
|
|
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
|
|
195
|
-
|
|
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 |
|
|
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
|
-
|
|
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
|
-
|
|
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` |
|
|
218
|
-
| `DEV-YYYY` | `blocker` |
|
|
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
|
|
225
|
+
Requested Outcome is the big picture. Here you write "the verifiable conditions this run's output must satisfy."
|
|
226
226
|
-->
|
|
227
227
|
|
|
228
|
-
|
|
228
|
+
This run's final report must satisfy all of the following:
|
|
229
229
|
|
|
230
|
-
- [ ]
|
|
231
|
-
- [ ]
|
|
232
|
-
- [ ]
|
|
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(
|
|
240
|
+
Specify priority as P0 (must answer) / P1 (answer if possible) / P2 (bonus).
|
|
241
241
|
-->
|
|
242
242
|
|
|
243
|
-
1. **[P0]**
|
|
244
|
-
2. **[P0]**
|
|
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
|
-
|
|
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.
|
|
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 areas — a hypothesis alone is enough>
|
|
271
271
|
|
|
272
272
|
---
|
|
273
273
|
|
|
274
274
|
## Brief Hygiene Checklist
|
|
275
275
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
- [ ]
|
|
279
|
-
- [ ] Domain Glossary
|
|
280
|
-
- [ ] Out of Scope
|
|
281
|
-
- [ ] Task-Type Focus
|
|
282
|
-
- [ ] error-analysis
|
|
283
|
-
- [ ] Definition of Done
|
|
284
|
-
- [ ] Configuration / Deployment
|
|
285
|
-
- [ ]
|
|
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
|
|
@@ -20,7 +20,7 @@ taskType: "{{FM_TASK_TYPE}}"
|
|
|
20
20
|
- Task ID:
|
|
21
21
|
- Related Tasks:
|
|
22
22
|
- Issue / Ticket:
|
|
23
|
-
-
|
|
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
|
|
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
|
|
13
|
-
>
|
|
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
|
-
<!--
|
|
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
|
|
21
|
+
<!-- path:line evidence. Locations that requirements-discovery confirmed via file inspection. -->
|
|
22
22
|
|
|
23
23
|
## Depends-on rationale
|
|
24
24
|
|
|
25
|
-
<!-- depends-on
|
|
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
|
-
-
|
|
35
|
-
-
|
|
36
|
-
- worktree / base / head
|
|
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
|
-
>
|
|
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
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
|
|
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
|
|
30
|
-
**Risk
|
|
31
|
-
**
|
|
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
|
|
37
|
+
<2-4 sentences — phase-classification summary + execution strategy>
|
|
38
38
|
|
|
39
|
-
- **Phase 1 (Critical Fixes)**: <n
|
|
40
|
-
- **Phase 2 (Enhancements)**: <n
|
|
41
|
-
- **Phase 3 (Architecture)**: <n
|
|
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 |
|
|
45
|
+
| Size | Criteria | Day(s) |
|
|
46
46
|
|------|------|--------|
|
|
47
|
-
| **S** | 1-2 files, 1 repo,
|
|
48
|
-
| **M** | 3-5 files, 1 repo,
|
|
49
|
-
| **L** | 5-15 files, 2-3 repos,
|
|
50
|
-
| **XL** | 15+ files, 3+ repos + infra, frontend
|
|
51
|
-
| **XXL** |
|
|
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 `
|
|
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
|
|
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
|
-
>
|
|
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
|
-
|
|
139
|
+
_none_ <!-- or repeat per-task block -->
|
|
140
140
|
|
|
141
141
|
---
|
|
142
142
|
|
|
143
143
|
## Phase 3: Architecture
|
|
144
144
|
|
|
145
|
-
|
|
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
|
|