okstra 0.34.1 → 0.36.1
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 +27 -19
- package/README.md +27 -19
- package/docs/kr/architecture.md +59 -45
- package/docs/kr/cli.md +61 -18
- package/docs/pr-template-usage.md +65 -0
- package/docs/project-structure-overview.md +353 -354
- package/docs/superpowers/plans/2026-05-12-ticket-id-in-reports.md +1 -1
- package/docs/superpowers/plans/2026-05-14-convergence-queue-pruning.md +1 -1
- package/docs/superpowers/plans/2026-05-17-dual-format-final-report.md +1 -1
- package/docs/superpowers/plans/2026-05-20-final-report-language.md +1501 -0
- package/docs/superpowers/plans/2026-05-20-implementation-planning-multi-stage.md +1267 -0
- package/docs/superpowers/plans/2026-05-20-okstra-run-prompt-sot-b1.md +1007 -0
- package/docs/superpowers/plans/2026-05-20-wizard-messages-json-sot.md +720 -0
- package/docs/superpowers/plans/2026-05-20-wizard-prompt-json-sot-a1.md +681 -0
- package/docs/superpowers/plans/2026-05-21-improvement-discovery-task-type.md +1691 -0
- package/docs/superpowers/plans/2026-05-24-implementation-lead-context-slimming.md +1700 -0
- package/docs/superpowers/specs/2026-05-20-final-report-language-design.md +383 -0
- package/docs/superpowers/specs/2026-05-20-implementation-planning-multi-stage-design.md +320 -0
- package/docs/superpowers/specs/2026-05-20-okstra-run-prompt-sot-design.md +299 -0
- package/docs/superpowers/specs/2026-05-21-improvement-discovery-task-type-design.md +335 -0
- package/docs/task-process/README.md +74 -0
- package/docs/task-process/common-flow.md +166 -0
- package/docs/task-process/error-analysis.md +101 -0
- package/docs/task-process/final-verification.md +167 -0
- package/docs/task-process/implementation-planning.md +128 -0
- package/docs/task-process/implementation.md +149 -0
- package/docs/task-process/release-handoff.md +206 -0
- package/docs/task-process/requirements-discovery.md +115 -0
- package/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/agents/SKILL.md +30 -7
- package/runtime/agents/workers/claude-worker.md +31 -6
- package/runtime/agents/workers/codex-worker.md +37 -10
- package/runtime/agents/workers/gemini-worker.md +34 -7
- package/runtime/agents/workers/report-writer-worker.md +19 -10
- package/runtime/bin/okstra-central.sh +6 -6
- package/runtime/bin/okstra-codex-exec.sh +49 -28
- package/runtime/bin/okstra-gemini-exec.sh +39 -21
- package/runtime/bin/okstra-render-final-report.py +13 -2
- package/runtime/bin/okstra-wrapper-status.py +155 -0
- package/runtime/bin/okstra.sh +2 -2
- package/runtime/prompts/launch.template.md +1 -0
- package/runtime/prompts/profiles/_common-contract.md +11 -6
- package/runtime/prompts/profiles/_implementation-deliverable.md +53 -0
- package/runtime/prompts/profiles/_implementation-executor.md +60 -0
- package/runtime/prompts/profiles/_implementation-verifier.md +76 -0
- package/runtime/prompts/profiles/error-analysis.md +3 -7
- package/runtime/prompts/profiles/implementation-planning.md +22 -21
- package/runtime/prompts/profiles/implementation.md +28 -118
- package/runtime/prompts/profiles/improvement-discovery.md +42 -0
- package/runtime/prompts/profiles/release-handoff.md +1 -1
- package/runtime/prompts/profiles/requirements-discovery.md +8 -12
- package/runtime/prompts/wizard/prompts.ko.json +230 -0
- package/runtime/python/lib/okstra/cli.sh +2 -49
- package/runtime/python/lib/okstra/globals.sh +21 -21
- package/runtime/python/lib/okstra/interactive.sh +7 -7
- package/runtime/python/okstra_ctl/clarification_items.py +3 -9
- package/runtime/python/okstra_ctl/consumers.py +53 -0
- package/runtime/python/okstra_ctl/final_report_schema.py +0 -7
- package/runtime/python/okstra_ctl/i18n.py +73 -0
- package/runtime/python/okstra_ctl/improvement_lenses.py +44 -0
- package/runtime/python/okstra_ctl/index.py +1 -1
- package/runtime/python/okstra_ctl/paths.py +26 -20
- package/runtime/python/okstra_ctl/render.py +166 -207
- package/runtime/python/okstra_ctl/render_final_report.py +53 -10
- package/runtime/python/okstra_ctl/run.py +299 -108
- package/runtime/python/okstra_ctl/run_context.py +22 -0
- package/runtime/python/okstra_ctl/seeding.py +186 -0
- package/runtime/python/okstra_ctl/session.py +65 -7
- package/runtime/python/okstra_ctl/wizard.py +348 -127
- package/runtime/python/okstra_ctl/workflow.py +21 -2
- package/runtime/python/okstra_ctl/worktree.py +54 -1
- package/runtime/python/okstra_project/resolver.py +4 -3
- package/runtime/python/okstra_token_usage/report.py +2 -2
- package/runtime/schemas/final-report-v1.0.schema.json +22 -16
- package/runtime/skills/okstra-brief/SKILL.md +102 -218
- package/runtime/skills/okstra-convergence/SKILL.md +2 -3
- package/runtime/skills/okstra-inspect/SKILL.md +581 -0
- package/runtime/skills/okstra-report-writer/SKILL.md +35 -15
- package/runtime/skills/okstra-run/SKILL.md +8 -7
- package/runtime/skills/okstra-schedule/SKILL.md +14 -157
- package/runtime/skills/okstra-setup/SKILL.md +28 -1
- package/runtime/skills/okstra-team-contract/SKILL.md +16 -107
- package/runtime/templates/okstra.CLAUDE.md +104 -0
- package/runtime/templates/reports/brief.template.md +204 -0
- package/runtime/templates/reports/final-report.template.md +93 -98
- package/runtime/templates/reports/i18n/en.json +135 -0
- package/runtime/templates/reports/i18n/ko.json +135 -0
- package/runtime/templates/reports/implementation-planning-input.template.md +18 -0
- package/runtime/templates/reports/improvement-discovery-input.template.md +78 -0
- package/runtime/templates/reports/schedule.template.md +12 -3
- package/runtime/templates/reports/task-brief.template.md +2 -2
- package/runtime/templates/worker-prompt-preamble.md +108 -0
- package/runtime/validators/lib/fixtures.sh +30 -0
- package/runtime/validators/lib/runners.sh +1 -1
- package/runtime/validators/validate-implementation-plan-stages.py +211 -0
- package/runtime/validators/validate-run.py +121 -26
- package/runtime/validators/validate-workflow.sh +2 -2
- package/runtime/validators/validate_improvement_report.py +275 -0
- package/src/config.mjs +18 -0
- package/src/install.mjs +41 -14
- package/src/setup.mjs +133 -1
- package/src/uninstall.mjs +27 -3
- package/runtime/skills/okstra-history/SKILL.md +0 -165
- package/runtime/skills/okstra-logs/SKILL.md +0 -173
- package/runtime/skills/okstra-report-finder/SKILL.md +0 -111
- package/runtime/skills/okstra-status/SKILL.md +0 -246
- package/runtime/skills/okstra-time-summary/SKILL.md +0 -172
|
@@ -17,6 +17,7 @@ task-group: {{ frontmatter.taskGroup | yaml_scalar }}
|
|
|
17
17
|
project-id: {{ frontmatter.projectId | yaml_scalar }}
|
|
18
18
|
taskType: {{ frontmatter.taskType | yaml_scalar }}
|
|
19
19
|
workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
20
|
+
approved: {{ frontmatter.approved | yaml_scalar }}
|
|
20
21
|
---
|
|
21
22
|
|
|
22
23
|
# {{ header.taskKey }} - Multi-Agent Cross Verification Final Report
|
|
@@ -31,43 +32,28 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
31
32
|
|
|
32
33
|
## Verdict Card
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
{{ t("sectionIntro.verdictCard") }}
|
|
35
36
|
|
|
36
|
-
|
|
|
37
|
+
| {{ t("verdictCard.tableHeaderLabel") }} | {{ t("verdictCard.tableHeaderValue") }} |
|
|
37
38
|
|------|----|
|
|
38
39
|
| Final Conclusion | {{ verdictCard.finalConclusion }} |
|
|
39
40
|
| Verdict Token | `{{ verdictCard.verdictToken }}` |
|
|
40
41
|
| Direction | `{{ verdictCard.direction }}` |
|
|
41
|
-
| Approval Required? | `{% if verdictCard.approvalRequired %}yes —
|
|
42
|
+
| Approval Required? | `{% if verdictCard.approvalRequired %}yes — {{ t("verdictCard.approvalRequiredSuffix") }}{% else %}no{% endif %}` |
|
|
42
43
|
| Next Step | {{ verdictCard.nextStep }} |
|
|
43
44
|
|
|
44
|
-
{% if header.taskType == 'implementation-planning' %}
|
|
45
|
-
## User Approval Request (사용자 승인 게이트)
|
|
46
|
-
|
|
47
|
-
다음 `implementation` run 은 아래 체크박스가 `[x]` 일 때에만 진입할 수 있습니다 (`okstra_ctl.run._validate_approved_plan` 가 line-anchored 정규식으로 검사). `## 5. Clarification Items` 표에서 `Blocks=approval` 인 모든 행이 `resolved` / `obsolete` 가 된 뒤 승인해 주세요.
|
|
48
|
-
|
|
49
|
-
- 승인 체크박스 (사용자가 직접 편집): `- [{% if approvalBlock.approved %}x{% else %} {% endif %}] Approved`
|
|
50
|
-
- 승인 후 다음 단계 명령 (수동 편집 방식):
|
|
51
|
-
- Claude Code: `/okstra-run task-key={{ header.taskKey }} task-type=implementation approved-plan=<이 보고서 경로>`
|
|
52
|
-
- 별도 터미널: `scripts/okstra.sh --task-key {{ header.taskKey }} --task-type implementation --approved-plan <이 보고서 경로>`
|
|
53
|
-
- 승인 + 실행 한 번에 (진입 명령 자체를 승인 의사로):
|
|
54
|
-
- Claude Code: `/okstra-run task-key={{ header.taskKey }} task-type=implementation approved-plan=<이 보고서 경로> approve`
|
|
55
|
-
- 별도 터미널: `scripts/okstra.sh --task-key {{ header.taskKey }} --task-type implementation --approved-plan <이 보고서 경로> --approve`
|
|
56
|
-
- 보류·거부: 체크박스를 `[ ]` 로 두고 `--approve` 를 사용하지 마세요. 필요 변경은 `## 5.` 표에 `Blocks=approval` 행으로 등록한 뒤 같은 phase 를 재실행합니다.
|
|
57
|
-
|
|
58
|
-
{% endif %}
|
|
59
45
|
{% if clarificationCarryIn and clarificationCarryIn.sourceFile %}
|
|
60
46
|
## 0. Clarification Response Carried In From Previous Run
|
|
61
47
|
|
|
62
48
|
- Source file: `{{ clarificationCarryIn.sourceFile }}`
|
|
63
|
-
-
|
|
49
|
+
- {{ t("sectionIntro.clarificationCarryIn") }}
|
|
64
50
|
|
|
65
51
|
{% endif %}
|
|
66
52
|
## Summary of the Problem or Verification Target
|
|
67
53
|
|
|
68
|
-
|
|
54
|
+
{{ t("sectionIntro.ticketCoverage") }}
|
|
69
55
|
|
|
70
|
-
| ID | Ticket ID |
|
|
56
|
+
| ID | Ticket ID | {{ t("columns.summary") }} | {{ t("columns.source") }} |
|
|
71
57
|
|----|-----------|------------|----------------------------|
|
|
72
58
|
{% for row in summary -%}
|
|
73
59
|
| {{ row.id }} | `{{ row.ticketId }}` | {{ row.summary }} | {{ row.source }} |
|
|
@@ -78,43 +64,43 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
78
64
|
{%- else %}
|
|
79
65
|
## Ticket Coverage
|
|
80
66
|
|
|
81
|
-
|
|
67
|
+
{{ t("ticketCoverage.intro") }}
|
|
82
68
|
|
|
83
69
|
{% if ticketCoverage.singleTicket -%}
|
|
84
70
|
- Single ticket run: {{ ticketCoverage.singleTicket }}
|
|
85
71
|
{%- else %}
|
|
86
|
-
| Ticket ID |
|
|
72
|
+
| Ticket ID | {{ t("ticketCoverage.columnSections") }} | {{ t("ticketCoverage.columnRelatedIds") }} |
|
|
87
73
|
|-----------|-----------|---------------|
|
|
88
74
|
{% for row in ticketCoverage.rows -%}
|
|
89
75
|
| `{{ row.ticketId }}` | `{{ row.sections }}` | `{{ row.relatedIds }}` |
|
|
90
76
|
{% endfor %}
|
|
91
77
|
{%- endif %}
|
|
92
78
|
|
|
93
|
-
|
|
79
|
+
{{ t("ticketCoverage.ruleNote") }}
|
|
94
80
|
|
|
95
81
|
{% endif %}
|
|
96
82
|
## Execution Status by Agent
|
|
97
83
|
|
|
98
|
-
|
|
84
|
+
{{ t("sectionIntro.executionStatus") }}
|
|
99
85
|
|
|
100
|
-
| Agent | Role | Model | Status |
|
|
86
|
+
| Agent | Role | Model | Status | {{ t("columns.rawTokens") }} | {{ t("columns.billableTokens") }} | {{ t("columns.cost") }} | Duration | Summary of Key Findings |
|
|
101
87
|
|-------|------|-------|--------|-----------|-----------|------------|----------|-------------------------|
|
|
102
88
|
{% for row in executionStatus -%}
|
|
103
89
|
| {{ row.agent }} | {{ row.role }} | {{ row.model }} | {{ row.status }} | {{ row.totalTokens | format_int }}{% if row.cliTotalTokens %} (CLI: {{ row.cliTotalTokens | format_int }}){% endif %} | {{ row.billableTokens | format_int }} | {{ row.costUsd | format_usd }}{% if row.cliCostUsd %} (+ CLI {{ row.cliCostUsd | format_usd }}){% endif %} | {{ row.durationMs | format_duration_ms }} | {{ row.summary }} |
|
|
104
90
|
{% endfor %}
|
|
105
91
|
|
|
106
|
-
##
|
|
92
|
+
## {{ t("tokenSummary.heading") }}
|
|
107
93
|
|
|
108
|
-
|
|
|
94
|
+
| {{ t("tokenSummary.tableHeaderItem") }} | {{ t("columns.rawTokens") }} | {{ t("columns.billableTokensInputEquiv") }} | {{ t("columns.cost") }} |
|
|
109
95
|
|------|-----------|------------------------|------------|
|
|
110
|
-
|
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
|
|
|
96
|
+
| {{ t("tokenSummary.rowLead") }} | `{{ tokenUsage.lead.totalTokens | format_int }}` | `{{ tokenUsage.lead.billableTokens | format_int }}` | `{{ tokenUsage.lead.costUsd | format_usd }}` |
|
|
97
|
+
| {{ t("tokenSummary.rowWorkerTotal") }} | `{{ tokenUsage.worker.totalTokens | format_int }}` | `{{ tokenUsage.worker.billableTokens | format_int }}` | `{{ tokenUsage.worker.costUsd | format_usd }}` |
|
|
98
|
+
| {{ t("tokenSummary.rowGrandTotal") }} | **`{{ tokenUsage.grand.totalTokens | format_int }}`** | **`{{ tokenUsage.grand.billableTokens | format_int }}`** | **`{{ tokenUsage.grand.costUsd | format_usd }}`** |
|
|
99
|
+
| {{ t("tokenSummary.rowCliExtra") }} | | | `{{ tokenUsage.cli.costUsd | format_usd }}` |
|
|
114
100
|
|
|
115
|
-
{# Phase 6
|
|
116
|
-
Phase 7
|
|
117
|
-
|
|
101
|
+
{# At Phase 6 numeric cells are null and render as `--`.
|
|
102
|
+
Phase 7's okstra-token-usage.py populates tokenUsage in data.json then
|
|
103
|
+
re-invokes this renderer to produce the final markdown. #}
|
|
118
104
|
|
|
119
105
|
## 1. Cross Verification Results
|
|
120
106
|
|
|
@@ -127,13 +113,13 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
127
113
|
| {{ row.round }} | {{ row.inputQueueSize }} | {{ row.resolvedCount }} | {{ row.carriedForwardCount }} | {{ row.dispatches }} | {{ row.skippedWorkers }} |
|
|
128
114
|
{% endfor %}
|
|
129
115
|
|
|
130
|
-
- `round2SkippedReason`: `{{ crossVerification.roundHistory.round2SkippedReason }}` ←
|
|
116
|
+
- `round2SkippedReason`: `{{ crossVerification.roundHistory.round2SkippedReason }}` ← {{ t("roundHistory.round2SkippedReasonNote") }}
|
|
131
117
|
|
|
132
118
|
{% endif %}
|
|
133
119
|
### 1.1 Consensus
|
|
134
120
|
|
|
135
121
|
{% if crossVerification.consensus | length == 0 -%}
|
|
136
|
-
|
|
122
|
+
{{ t("emptyState.consensusItems") }}
|
|
137
123
|
{%- else %}
|
|
138
124
|
| ID | Ticket ID | Statement | Source items (worker:item) | Evidence (path:line / log / worker report) |
|
|
139
125
|
|----|-----------|-----------|----------------------------|---------------------------------------------|
|
|
@@ -142,12 +128,12 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
142
128
|
{% endfor %}
|
|
143
129
|
{%- endif %}
|
|
144
130
|
|
|
145
|
-
|
|
131
|
+
{{ t("sectionIntro.sourceItemsRule") }}
|
|
146
132
|
|
|
147
133
|
### 1.2 Differences
|
|
148
134
|
|
|
149
135
|
{% if crossVerification.differences | length == 0 -%}
|
|
150
|
-
|
|
136
|
+
{{ t("emptyState.differences") }}
|
|
151
137
|
{%- else %}
|
|
152
138
|
| ID | Ticket ID | Disagreement | Workers (position + item) | Evidence |
|
|
153
139
|
|----|-----------|--------------|---------------------------|----------|
|
|
@@ -158,22 +144,22 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
158
144
|
|
|
159
145
|
## 2. Final Verdict
|
|
160
146
|
|
|
161
|
-
|
|
147
|
+
{{ t("finalVerdict.intro") }}
|
|
162
148
|
|
|
163
|
-
|
|
|
149
|
+
| {{ t("verdictCard.tableHeaderLabel") }} | {{ t("verdictCard.tableHeaderValue") }} |
|
|
164
150
|
|------|----|
|
|
165
151
|
| Final Conclusion | {{ finalVerdict.finalConclusion }} |
|
|
166
152
|
| Verdict Token | `{{ finalVerdict.verdictToken }}` |
|
|
167
153
|
| Direction | `{{ finalVerdict.direction }}` |
|
|
168
|
-
|
|
|
169
|
-
|
|
|
154
|
+
| {{ t("verdictCard.rationaleLabel") }} | {{ finalVerdict.rationaleRowIds | join(', ') }} |
|
|
155
|
+
| {{ t("verdictCard.nextStepLabel") }} | {{ finalVerdict.nextStep }} |
|
|
170
156
|
|
|
171
157
|
## 3. Evidence and Detailed Analysis
|
|
172
158
|
|
|
173
159
|
### 3.1 Primary Evidence
|
|
174
160
|
|
|
175
161
|
{% if evidence.primary | length == 0 -%}
|
|
176
|
-
|
|
162
|
+
{{ t("emptyState.primaryEvidence") }}
|
|
177
163
|
{%- else %}
|
|
178
164
|
| ID | Ticket ID | Evidence | Source items (worker:item) | Source (path:line / log) |
|
|
179
165
|
|----|-----------|----------|----------------------------|---------------------------|
|
|
@@ -182,12 +168,12 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
182
168
|
{% endfor %}
|
|
183
169
|
{%- endif %}
|
|
184
170
|
|
|
185
|
-
|
|
171
|
+
{{ t("evidence.sourceItemsColumnNote") }}
|
|
186
172
|
|
|
187
173
|
### 3.2 Secondary Evidence or Alternate Interpretations
|
|
188
174
|
|
|
189
175
|
{% if not evidence.secondary or evidence.secondary | length == 0 -%}
|
|
190
|
-
|
|
176
|
+
{{ t("emptyState.secondaryEvidence") }}
|
|
191
177
|
{%- else %}
|
|
192
178
|
| ID | Ticket ID | Hypothesis or supporting evidence | Source / confidence |
|
|
193
179
|
|----|-----------|-----------------------------------|---------------------|
|
|
@@ -199,7 +185,7 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
199
185
|
## 4. Missing Information and Risks
|
|
200
186
|
|
|
201
187
|
{% if missingInformation | length == 0 -%}
|
|
202
|
-
|
|
188
|
+
{{ t("emptyState.risks") }}
|
|
203
189
|
{%- else %}
|
|
204
190
|
| ID | Ticket ID | Item | Risk if ignored | Mitigation Owner |
|
|
205
191
|
|----|-----------|------|-----------------|------------------|
|
|
@@ -211,7 +197,7 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
211
197
|
{% if header.taskType == 'implementation-planning' %}
|
|
212
198
|
## 4.5 Implementation Plan Deliverables
|
|
213
199
|
|
|
214
|
-
### 4.5.1 Option Candidates (
|
|
200
|
+
### 4.5.1 Option Candidates{% if t("sectionAside.optionCandidates") != "Option Candidates" %} ({{ t("sectionAside.optionCandidates") }}){% endif %}
|
|
215
201
|
|
|
216
202
|
{% for opt in implementationPlanning.optionCandidates %}
|
|
217
203
|
**{{ opt.name }}**
|
|
@@ -224,12 +210,12 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
224
210
|
| {{ fs.id }} | `{{ fs.ticketId }}` | {{ fs.action }} | `{{ fs.path }}` | {{ fs.summary }} |
|
|
225
211
|
{% endfor %}
|
|
226
212
|
|
|
227
|
-
-
|
|
228
|
-
-
|
|
213
|
+
- {{ t("implementationPlanning.optionInterfacesLabel") }}: {{ opt.interfaces }}
|
|
214
|
+
- {{ t("implementationPlanning.optionBlastRadiusLabel") }}: {{ opt.blastRadius }}
|
|
229
215
|
|
|
230
216
|
{% endfor %}
|
|
231
217
|
|
|
232
|
-
### 4.5.2 Trade-off Matrix (
|
|
218
|
+
### 4.5.2 Trade-off Matrix{% if t("sectionAside.tradeOffMatrix") != "Trade-off Matrix" %} ({{ t("sectionAside.tradeOffMatrix") }}){% endif %}
|
|
233
219
|
|
|
234
220
|
| Option | Complexity | Risk | Reversibility | Test Coverage Cost | Rollout Cost |
|
|
235
221
|
|--------|-----------|------|---------------|--------------------|--------------|
|
|
@@ -237,16 +223,16 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
237
223
|
| {{ row.option }} | {{ row.complexity }} | {{ row.risk }} | {{ row.reversibility }} | {{ row.testCoverageCost }} | {{ row.rolloutCost }} |
|
|
238
224
|
{% endfor %}
|
|
239
225
|
|
|
240
|
-
### 4.5.3 Recommended Option (
|
|
226
|
+
### 4.5.3 Recommended Option{% if t("sectionAside.recommendedOption") != "Recommended Option" %} ({{ t("sectionAside.recommendedOption") }}){% endif %}
|
|
241
227
|
|
|
242
|
-
|
|
|
228
|
+
| {{ t("implementationPlanning.recommendedTableHeaderLabel") }} | {{ t("implementationPlanning.recommendedTableHeaderValue") }} |
|
|
243
229
|
|------|----|
|
|
244
230
|
| Recommended Option | {{ implementationPlanning.recommendedOption.name }} |
|
|
245
|
-
|
|
|
246
|
-
|
|
|
247
|
-
|
|
|
231
|
+
| {{ t("implementationPlanning.coreReasonLabel") }} | {{ implementationPlanning.recommendedOption.coreReason }} |
|
|
232
|
+
| {{ t("implementationPlanning.rationaleLabel") }} | {{ implementationPlanning.recommendedOption.rationale }} |
|
|
233
|
+
| {{ t("implementationPlanning.rejectedSummaryLabel") }} | {{ implementationPlanning.recommendedOption.rejectedSummary }} |
|
|
248
234
|
|
|
249
|
-
### 4.5.4 Stepwise Execution Order (
|
|
235
|
+
### 4.5.4 Stepwise Execution Order{% if t("sectionAside.stepwiseExecutionOrder") != "Stepwise Execution Order" %} ({{ t("sectionAside.stepwiseExecutionOrder") }}){% endif %}
|
|
250
236
|
|
|
251
237
|
| Step | Ticket ID | Action (≤ 5min) | Files | Command / Test | Expected outcome |
|
|
252
238
|
|------|-----------|------------------|-------|----------------|-------------------|
|
|
@@ -254,21 +240,21 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
254
240
|
| {{ row.step }} | `{{ row.ticketId }}` | {{ row.action }} | `{{ row.files }}` | `{{ row.commandOrTest }}` | {{ row.expectedOutcome }} |
|
|
255
241
|
{% endfor %}
|
|
256
242
|
|
|
257
|
-
|
|
243
|
+
{{ t("sectionIntro.stepRule") }}
|
|
258
244
|
|
|
259
|
-
### 4.5.5 Dependency / Migration Risk (
|
|
245
|
+
### 4.5.5 Dependency / Migration Risk{% if t("sectionAside.dependencyRisk") != "Dependency / Migration Risk" %} ({{ t("sectionAside.dependencyRisk") }}){% endif %}
|
|
260
246
|
|
|
261
247
|
{% if implementationPlanning.dependencyMigrationRisk | length == 0 -%}
|
|
262
|
-
|
|
248
|
+
{{ t("emptyState.dependencyRisk") }}
|
|
263
249
|
{%- else %}
|
|
264
|
-
| ID | Kind | Item |
|
|
250
|
+
| ID | Kind | Item | {{ t("implementationPlanning.columnImpact") }} | {{ t("implementationPlanning.columnMitigation") }} |
|
|
265
251
|
|----|------|------|------|------------------|
|
|
266
252
|
{% for row in implementationPlanning.dependencyMigrationRisk -%}
|
|
267
253
|
| {{ row.id }} | {{ row.kind }} | {{ row.item }} | {{ row.impact }} | {{ row.mitigation }} |
|
|
268
254
|
{% endfor %}
|
|
269
255
|
{%- endif %}
|
|
270
256
|
|
|
271
|
-
### 4.5.6 Validation Checklist (
|
|
257
|
+
### 4.5.6 Validation Checklist{% if t("sectionAside.validationChecklist") != "Validation Checklist" %} ({{ t("sectionAside.validationChecklist") }}){% endif %}
|
|
272
258
|
|
|
273
259
|
| Phase | Ticket ID | Check | Command / Observation | Expected outcome |
|
|
274
260
|
|-------|-----------|-------|------------------------|-------------------|
|
|
@@ -276,17 +262,17 @@ workerId: {{ frontmatter.workerId | yaml_scalar }}
|
|
|
276
262
|
| {{ row.phase }} | `{{ row.ticketId }}` | {{ row.check }} | `{{ row.commandOrObservation }}` | {{ row.expectedOutcome }} |
|
|
277
263
|
{% endfor %}
|
|
278
264
|
|
|
279
|
-
### 4.5.7 Rollback Strategy (
|
|
265
|
+
### 4.5.7 Rollback Strategy{% if t("sectionAside.rollbackStrategy") != "Rollback Strategy" %} ({{ t("sectionAside.rollbackStrategy") }}){% endif %}
|
|
280
266
|
|
|
281
|
-
| ID | Step | Action | Trigger signal |
|
|
267
|
+
| ID | Step | Action | Trigger signal | {{ t("columns.checkMethod") }} |
|
|
282
268
|
|----|------|--------|----------------|-----------|
|
|
283
269
|
{% for row in implementationPlanning.rollbackStrategy -%}
|
|
284
270
|
| {{ row.id }} | {{ row.step }} | `{{ row.action }}` | {{ row.triggerSignal }} | `{{ row.verificationMethod }}` |
|
|
285
271
|
{% endfor %}
|
|
286
272
|
|
|
287
|
-
### 4.5.9 Plan Body Verification (
|
|
273
|
+
### 4.5.9 Plan Body Verification{% if t("sectionAside.planBodyVerification") != "Plan Body Verification" %} ({{ t("sectionAside.planBodyVerification") }}){% endif %}
|
|
288
274
|
|
|
289
|
-
|
|
275
|
+
{{ t("sectionIntro.planBodyVerification") }}
|
|
290
276
|
|
|
291
277
|
- **Round count**: `{{ implementationPlanning.planBodyVerification.roundCount }}`
|
|
292
278
|
- **Gate result**: `{{ implementationPlanning.planBodyVerification.gateResult }}`
|
|
@@ -310,7 +296,7 @@ Phase 6 에서 report-writer 가 합성한 4.5 본문을 lead 가 plan-item 단
|
|
|
310
296
|
#### Dissent log
|
|
311
297
|
|
|
312
298
|
{% if implementationPlanning.planBodyVerification.dissentLog | length == 0 -%}
|
|
313
|
-
|
|
299
|
+
{{ t("emptyState.dissent") }}
|
|
314
300
|
{%- else %}
|
|
315
301
|
{% for row in implementationPlanning.planBodyVerification.dissentLog -%}
|
|
316
302
|
- **{{ row.planItem }}**: `{{ row.workerRole }}` — {{ row.body }}
|
|
@@ -321,7 +307,7 @@ Phase 6 에서 report-writer 가 합성한 4.5 본문을 lead 가 plan-item 단
|
|
|
321
307
|
{% if header.taskType == 'release-handoff' %}
|
|
322
308
|
## 4.6 Release Handoff Deliverables
|
|
323
309
|
|
|
324
|
-
|
|
310
|
+
{{ t("releaseHandoff.auditNote") }}
|
|
325
311
|
|
|
326
312
|
### 4.6.1 Source Verification Report
|
|
327
313
|
|
|
@@ -329,29 +315,29 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
329
315
|
- Quoted `Verdict Token` row from that report's `## 2.` table:
|
|
330
316
|
> {{ releaseHandoff.sourceVerificationReport.verdictTokenQuote }}
|
|
331
317
|
|
|
332
|
-
### 4.6.2 Feature Branch & Working-Tree State (run
|
|
318
|
+
### 4.6.2 Feature Branch & Working-Tree State{% if t("releaseHandoff.branchStateAside") != "captured at run start" %} ({{ t("releaseHandoff.branchStateAside") }}){% endif %}
|
|
333
319
|
|
|
334
320
|
- Feature branch: `{{ releaseHandoff.featureBranchState.branchName }}`
|
|
335
|
-
-
|
|
321
|
+
- {{ t("releaseHandoff.gitStatusShortLabel") }}:
|
|
336
322
|
```
|
|
337
323
|
{{ releaseHandoff.featureBranchState.gitStatusShort }}
|
|
338
324
|
```
|
|
339
|
-
-
|
|
325
|
+
- {{ t("releaseHandoff.existingPrLabel") }}: `{{ releaseHandoff.featureBranchState.existingPrUrl or '(none)' }}`
|
|
340
326
|
|
|
341
|
-
### 4.6.3 User Selections (
|
|
327
|
+
### 4.6.3 User Selections{% if t("releaseHandoff.userSelectionsAside") != "menu response log" %} ({{ t("releaseHandoff.userSelectionsAside") }}){% endif %}
|
|
342
328
|
|
|
343
|
-
|
|
|
329
|
+
| {{ t("releaseHandoff.questionsTableHeader.questionId") }} | {{ t("releaseHandoff.questionsTableHeader.questionBody") }} | {{ t("releaseHandoff.questionsTableHeader.userResponse") }} | {{ t("releaseHandoff.questionsTableHeader.allowedOptions") }} |
|
|
344
330
|
|---------|-----------|--------------------|--------------------|
|
|
345
|
-
| H1 |
|
|
346
|
-
| H2 |
|
|
347
|
-
| H3 |
|
|
331
|
+
| H1 | {{ t("releaseHandoff.h1Body") }} | `{{ releaseHandoff.userSelections.h1 }}` | `local only` / `push + PR` / `skip` |
|
|
332
|
+
| H2 | {{ t("releaseHandoff.h2Body") }} | `{{ releaseHandoff.userSelections.h2 or t("releaseHandoff.h2DefaultLabel") }}` | {{ t("releaseHandoff.h2OptionsLabel") }} |
|
|
333
|
+
| H3 | {{ t("releaseHandoff.h3Body") }} | `{{ releaseHandoff.userSelections.h3 }}` | `use as-is` / `edit then proceed` / `cancel` |
|
|
348
334
|
|
|
349
335
|
### 4.6.4 Executed Commands
|
|
350
336
|
|
|
351
337
|
{% if releaseHandoff.executedCommands | length == 0 -%}
|
|
352
|
-
- (
|
|
338
|
+
- {{ t("releaseHandoff.noMutationNote") }}
|
|
353
339
|
{%- else %}
|
|
354
|
-
| # | command (verbatim) | exit code |
|
|
340
|
+
| # | command (verbatim) | exit code | {{ t("releaseHandoff.commandsTableHeader.outputSummary") }} |
|
|
355
341
|
|---|---------------------|-----------|--------------------|
|
|
356
342
|
{% for row in releaseHandoff.executedCommands -%}
|
|
357
343
|
| {{ row.number }} | `{{ row.command }}` | `{{ row.exitCode }}` | {{ row.outputSummary }} |
|
|
@@ -405,8 +391,8 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
405
391
|
- Plan file (project-relative): `{{ implementation.approvedPlanReference.planFile }}`
|
|
406
392
|
- Approval evidence:
|
|
407
393
|
> {{ implementation.approvedPlanReference.approvalEvidence }}
|
|
408
|
-
-
|
|
409
|
-
-
|
|
394
|
+
- {{ t("executionMeta.runExecutorWorktreePath") }}: `{{ implementation.approvedPlanReference.executorWorktreePath }}`
|
|
395
|
+
- {{ t("executionMeta.runBaseRef") }}: `{{ implementation.approvedPlanReference.baseRefSha }}`
|
|
410
396
|
|
|
411
397
|
### 4.7.2 Commit List
|
|
412
398
|
|
|
@@ -435,7 +421,7 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
435
421
|
### 4.7.4 Out-of-plan Edits
|
|
436
422
|
|
|
437
423
|
{% if implementation.outOfPlanEdits | length == 0 -%}
|
|
438
|
-
|
|
424
|
+
{{ t("emptyState.outOfPlanEdits") }}
|
|
439
425
|
{%- else %}
|
|
440
426
|
| ID | File | Rationale | Trigger |
|
|
441
427
|
|----|------|-----------|---------|
|
|
@@ -459,8 +445,8 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
459
445
|
- Read-only command log: {{ block.readOnlyCommandLog }}
|
|
460
446
|
- Independent validation re-run: {{ block.independentValidationRerun }}
|
|
461
447
|
- Style / lint / type-check: {{ block.styleLintTypecheck or '--' }}
|
|
462
|
-
- Declined fix recommendations: {{ block.declinedFixRecommendations or
|
|
463
|
-
- Discrepancy: {{ block.discrepancy or
|
|
448
|
+
- Declined fix recommendations: {{ block.declinedFixRecommendations or t("emptyState.declinedFixRecommendations") }}
|
|
449
|
+
- Discrepancy: {{ block.discrepancy or t("emptyState.discrepancy") }}
|
|
464
450
|
{% endfor %}
|
|
465
451
|
|
|
466
452
|
### 4.7.7 Rollback Verification
|
|
@@ -482,11 +468,11 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
482
468
|
### 4.8.1 Source Implementation Report
|
|
483
469
|
|
|
484
470
|
- Path (project-relative): `{{ finalVerification.sourceImplementationReport.path }}`
|
|
485
|
-
-
|
|
471
|
+
- {{ t("evidenceMeta.commitListSummary") }}:
|
|
486
472
|
> {{ finalVerification.sourceImplementationReport.commitListQuote }}
|
|
487
|
-
-
|
|
488
|
-
-
|
|
489
|
-
-
|
|
473
|
+
- {{ t("evidenceMeta.targetWorktreePath") }}: `{{ finalVerification.sourceImplementationReport.worktreePath }}`
|
|
474
|
+
- {{ t("evidenceMeta.capturedHeadBaseSha") }}: `{{ finalVerification.sourceImplementationReport.baseHeadSha }}`
|
|
475
|
+
- {{ t("evidenceMeta.gitStatusAtRunStart") }}:
|
|
490
476
|
```
|
|
491
477
|
{{ finalVerification.sourceImplementationReport.gitStatusShort }}
|
|
492
478
|
```
|
|
@@ -506,7 +492,7 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
506
492
|
### 4.8.3 Residual Risk
|
|
507
493
|
|
|
508
494
|
{% if finalVerification.residualRisk | length == 0 -%}
|
|
509
|
-
|
|
495
|
+
{{ t("emptyState.lingeringRisks") }}
|
|
510
496
|
{%- else %}
|
|
511
497
|
| ID | Item | Mitigation owner | Escalation trigger |
|
|
512
498
|
|----|------|------------------|---------------------|
|
|
@@ -515,9 +501,9 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
515
501
|
{% endfor %}
|
|
516
502
|
{%- endif %}
|
|
517
503
|
|
|
518
|
-
### 4.8.4 Validation Evidence (
|
|
504
|
+
### 4.8.4 Validation Evidence{% if t("finalVerification.validationEvidenceAside") != "requirements coverage" %} ({{ t("finalVerification.validationEvidenceAside") }}){% endif %}
|
|
519
505
|
|
|
520
|
-
| ID |
|
|
506
|
+
| ID | {{ t("finalVerification.columnRequirement") }} | Artifact | Status |
|
|
521
507
|
|----|--------------------------------|----------|--------|
|
|
522
508
|
{% for row in finalVerification.validationEvidence -%}
|
|
523
509
|
| {{ row.id }} | {{ row.requirement }} | `{{ row.artifact }}` | {{ row.status }} |
|
|
@@ -535,18 +521,27 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
535
521
|
|
|
536
522
|
{{ finalVerification.routingRecommendation }}
|
|
537
523
|
|
|
524
|
+
{% endif %}
|
|
525
|
+
{% if header.taskType == 'improvement-discovery' %}
|
|
526
|
+
## 4.9 Improvement Candidates
|
|
527
|
+
|
|
528
|
+
> Lens whitelist and column schema enforced by `validators/validate-improvement-report.py`. Row count is bounded by the brief's `candidate-cap` (default 8, absolute max 12).
|
|
529
|
+
|
|
530
|
+
| Cand ID | Lens | Title | Scope | Severity | Effort | Consensus | Source workers | Recommended next-phase | Evidence |
|
|
531
|
+
|---------|------|-------|-------|----------|--------|-----------|----------------|------------------------|----------|
|
|
532
|
+
|
|
538
533
|
{% endif %}
|
|
539
534
|
## 5. Clarification Items
|
|
540
535
|
|
|
541
|
-
|
|
536
|
+
{{ t("sectionIntro.clarificationItems") }}
|
|
542
537
|
|
|
543
538
|
{% if clarificationItems | length == 0 -%}
|
|
544
|
-
|
|
539
|
+
{{ t("emptyState.noClarification") }}
|
|
545
540
|
{%- else %}
|
|
546
|
-
|
|
541
|
+
{{ t("clarification.fillAndRerun") }}
|
|
547
542
|
|
|
548
543
|
- Claude Code: `/okstra-run resume-clarification task-key={{ header.taskKey }}`
|
|
549
|
-
-
|
|
544
|
+
- {{ t("clarification.separateTerminalLabel") }}: `scripts/okstra.sh --resume-clarification --task-key {{ header.taskKey }}`
|
|
550
545
|
|
|
551
546
|
| ID | Ticket ID | Kind | Statement | Expected form | Blocks | Status | User input |
|
|
552
547
|
|----|-----------|------|-----------|---------------|--------|--------|-----------|
|
|
@@ -554,7 +549,7 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
554
549
|
| {{ row.id }} | `{{ row.ticketId }}` | `{{ row.kind }}` | {{ row.statement }} | {{ row.expectedForm }} | `{{ row.blocks }}` | {{ row.status }} | {{ row.userInput or '' }} |
|
|
555
550
|
{% endfor %}
|
|
556
551
|
|
|
557
|
-
|
|
552
|
+
{{ t("clarification.columnGuide") }}
|
|
558
553
|
|
|
559
554
|
- **`Kind`** ∈ `{material, decision, data-point}`.
|
|
560
555
|
- **`Blocks`** ∈ `{approval, next-phase, none}`.
|
|
@@ -572,16 +567,16 @@ git/gh mutating 명령이 실행된 phase 의 감사 기록.
|
|
|
572
567
|
{% for cmd in step.commands %}
|
|
573
568
|
- {{ cmd.label }}:
|
|
574
569
|
- Claude Code: `{{ cmd.claudeCode }}`
|
|
575
|
-
-
|
|
570
|
+
- {{ t("clarification.separateTerminalLabel") }}: `{{ cmd.terminal }}`
|
|
576
571
|
{% endfor -%}
|
|
577
572
|
{%- endif %}
|
|
578
573
|
{% endfor %}
|
|
579
574
|
{%- endif %}
|
|
580
575
|
|
|
581
|
-
## 7. Follow-up Tasks (
|
|
576
|
+
## 7. Follow-up Tasks{% if t("followUpTasks.headingAside") != "Follow-up Tasks" %} ({{ t("followUpTasks.headingAside") }}){% endif %}
|
|
582
577
|
|
|
583
578
|
{% if followUpTasks | length == 0 -%}
|
|
584
|
-
|
|
579
|
+
{{ t("emptyState.noFollowUp") }}
|
|
585
580
|
{%- else %}
|
|
586
581
|
| ID | Ticket ID | Origin | New Task ID | Title | Suggested task-type | Scope (files/areas) | Reason / Why deferred | Priority (P0/P1/P2) | Auto-spawn? |
|
|
587
582
|
|----|-----------|--------|-------------|-------|---------------------|---------------------|------------------------|---------------------|-------------|
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"lang": "en",
|
|
4
|
+
"note": "okstra final-report fixed strings (English). Keys must mirror ko.json exactly. Add a key here AND in ko.json in the same commit."
|
|
5
|
+
},
|
|
6
|
+
"emptyState": {
|
|
7
|
+
"consensusItems": "- No consensus items.",
|
|
8
|
+
"differences": "- No significant differences. 1.1 Consensus stands as-is.",
|
|
9
|
+
"primaryEvidence": "- No primary evidence.",
|
|
10
|
+
"secondaryEvidence": "- No secondary evidence or alternate interpretations.",
|
|
11
|
+
"risks": "- No missing information or risks.",
|
|
12
|
+
"dependencyRisk": "- No dependency / migration risks.",
|
|
13
|
+
"dissent": "- No dissenting opinions.",
|
|
14
|
+
"outOfPlanEdits": "- No out-of-plan edits.",
|
|
15
|
+
"declinedFixRecommendations": "- None.",
|
|
16
|
+
"discrepancy": "- None.",
|
|
17
|
+
"lingeringRisks": "- No tracked lingering risks.",
|
|
18
|
+
"noClarification": "- No additional information requested. The Section 2 verdict stands as-is.",
|
|
19
|
+
"noFollowUp": "- No follow-up tasks. The next phase for this run is in §6 (Recommended Next Steps)."
|
|
20
|
+
},
|
|
21
|
+
"columns": {
|
|
22
|
+
"summary": "Summary",
|
|
23
|
+
"source": "Source (brief/source/worker)",
|
|
24
|
+
"rawTokens": "Raw tokens",
|
|
25
|
+
"billableTokens": "Billable tokens",
|
|
26
|
+
"billableTokensInputEquiv": "Billable tokens (input-equiv.)",
|
|
27
|
+
"cost": "Cost (USD)",
|
|
28
|
+
"checkMethod": "How to check"
|
|
29
|
+
},
|
|
30
|
+
"sectionAside": {
|
|
31
|
+
"dependencyRisk": "Dependency / Migration Risk",
|
|
32
|
+
"validationChecklist": "Validation Checklist",
|
|
33
|
+
"rollbackStrategy": "Rollback Strategy",
|
|
34
|
+
"planBodyVerification": "Plan Body Verification",
|
|
35
|
+
"recommendedOption": "Recommended Option",
|
|
36
|
+
"optionCandidates": "Option Candidates",
|
|
37
|
+
"tradeOffMatrix": "Trade-off Matrix",
|
|
38
|
+
"stepwiseExecutionOrder": "Stepwise Execution Order"
|
|
39
|
+
},
|
|
40
|
+
"sectionIntro": {
|
|
41
|
+
"verdictCard": "At-a-glance verdict card. Every value in this table MUST exactly match the authoritative values in `## 2. Final Verdict` and `## 6. Recommended Next Steps`.",
|
|
42
|
+
"clarificationCarryIn": "Walk every C-* row of the prior report's `## 5. Clarification Items` table against new evidence. Update each row's `Status` to `resolved` or `obsolete` and carry it into this run's `## 5.` table. Cite the resolution evidence (file:line / log / worker result) inline.",
|
|
43
|
+
"ticketCoverage": "Summarize 3-5 core problems / requirements / verification targets as a table. Base this on the brief, source material, and worker results.",
|
|
44
|
+
"executionStatus": "Aggregate each worker's status, assigned model, and key findings into one table. Do NOT replace worker artifacts with ungrounded claims.",
|
|
45
|
+
"sourceItemsRule": "`Source items` rule: list which worker items this consensus row was synthesised from, as a comma-list of `<worker>:<item-id>` pairs. Full policy: `prompts/profiles/_common-contract.md` \"Cross-worker traceability\" SSOT.",
|
|
46
|
+
"stepRule": "Rule: each step is roughly 2-5 minutes. Every step MUST include exact file paths and commands.",
|
|
47
|
+
"planBodyVerification": "Result of Phase 6 — report-writer's synthesised 4.5 body re-cast to workers by the lead on a plan-item basis, with verdicts collected.",
|
|
48
|
+
"clarificationItems": "Track items that must be answered by the user or backed by attached material before the next run advances, **all inside one table**."
|
|
49
|
+
},
|
|
50
|
+
"tokenSummary": {
|
|
51
|
+
"heading": "Token Usage Summary",
|
|
52
|
+
"tableHeaderItem": "Item",
|
|
53
|
+
"rowLead": "Lead",
|
|
54
|
+
"rowWorkerTotal": "Worker subtotal",
|
|
55
|
+
"rowGrandTotal": "**Grand total**",
|
|
56
|
+
"rowCliExtra": "Codex/Gemini CLI add-on"
|
|
57
|
+
},
|
|
58
|
+
"verdictCard": {
|
|
59
|
+
"tableHeaderLabel": "Item",
|
|
60
|
+
"tableHeaderValue": "Value",
|
|
61
|
+
"approvalRequiredSuffix": "frontmatter `approved` must be `true` to enter `implementation`",
|
|
62
|
+
"rationaleLabel": "Rationale summary",
|
|
63
|
+
"nextStepLabel": "Next step"
|
|
64
|
+
},
|
|
65
|
+
"ticketCoverage": {
|
|
66
|
+
"intro": "Reverse index of tickets covered in this run. All body items are linked to a ticket via the `Ticket ID` column or `[TICKETID: <id>]` tag.",
|
|
67
|
+
"columnSections": "Sections",
|
|
68
|
+
"columnRelatedIds": "Related item IDs",
|
|
69
|
+
"ruleNote": "Rule: `Ticket ID` must match the ticket key exactly as it appears in the body. When `Issue / Ticket` is empty and falls back, use the `Task ID` value as-is without prefix (e.g. `8852`). Use `unknown` when not identifiable."
|
|
70
|
+
},
|
|
71
|
+
"finalVerdict": {
|
|
72
|
+
"intro": "State the final conclusion and recommended direction in one table. `Direction` ∈ `continue-investigation / begin-implementation / approve / reject / hold`. When `task-type` is `final-verification`, `Verdict Token` must be one of `accepted / conditional-accept / blocked`; `release-handoff` uses this value as an entry gate. For all other task-types use `not-applicable`."
|
|
73
|
+
},
|
|
74
|
+
"evidence": {
|
|
75
|
+
"sourceItemsColumnNote": "`Source items` column rule is the same as §1.1."
|
|
76
|
+
},
|
|
77
|
+
"roundHistory": {
|
|
78
|
+
"round2SkippedReasonNote": "value is one of `queue-empty | max-rounds-1 | all-reverify-non-result | not-skipped | convergence-disabled | single-analyser-only`"
|
|
79
|
+
},
|
|
80
|
+
"implementationPlanning": {
|
|
81
|
+
"optionInterfacesLabel": "Affected interfaces / public contracts / downstream consumers",
|
|
82
|
+
"optionBlastRadiusLabel": "Blast radius estimate",
|
|
83
|
+
"recommendedTableHeaderLabel": "Item",
|
|
84
|
+
"recommendedTableHeaderValue": "Value",
|
|
85
|
+
"coreReasonLabel": "Core reason",
|
|
86
|
+
"rationaleLabel": "Rationale (trade-off row / principle)",
|
|
87
|
+
"rejectedSummaryLabel": "Summary of rejected options",
|
|
88
|
+
"columnImpact": "Impact",
|
|
89
|
+
"columnMitigation": "Mitigation / prerequisite"
|
|
90
|
+
},
|
|
91
|
+
"releaseHandoff": {
|
|
92
|
+
"auditNote": "Audit trail for the phase that ran git/gh mutating commands.",
|
|
93
|
+
"branchStateAside": "captured at run start",
|
|
94
|
+
"gitStatusShortLabel": "`git status --short` output",
|
|
95
|
+
"existingPrLabel": "Existing PR",
|
|
96
|
+
"userSelectionsAside": "menu response log",
|
|
97
|
+
"questionsTableHeader": {
|
|
98
|
+
"questionId": "Question ID",
|
|
99
|
+
"questionBody": "Question",
|
|
100
|
+
"userResponse": "User response (raw)",
|
|
101
|
+
"allowedOptions": "Allowed options"
|
|
102
|
+
},
|
|
103
|
+
"h1Body": "Which action should run?",
|
|
104
|
+
"h2Body": "PR base branch (when H1 = `push + PR`)",
|
|
105
|
+
"h3Body": "How should the PR title/body draft be handled?",
|
|
106
|
+
"h2DefaultLabel": "(n/a)",
|
|
107
|
+
"h2OptionsLabel": "staging / preprod / prod / main / dev / user input",
|
|
108
|
+
"noMutationNote": "(no mutating command — H1=`skip` or H3=`cancel`)",
|
|
109
|
+
"commandsTableHeader": {
|
|
110
|
+
"outputSummary": "stdout/stderr summary"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"executionMeta": {
|
|
114
|
+
"runExecutorWorktreePath": "This run's `EXECUTOR_WORKTREE_PATH`",
|
|
115
|
+
"runBaseRef": "This run's base ref"
|
|
116
|
+
},
|
|
117
|
+
"evidenceMeta": {
|
|
118
|
+
"commitListSummary": "Cited commit list / diff summary",
|
|
119
|
+
"targetWorktreePath": "Target worktree path for verification",
|
|
120
|
+
"capturedHeadBaseSha": "head/base SHA captured at run start",
|
|
121
|
+
"gitStatusAtRunStart": "`git status --short` (at run start)"
|
|
122
|
+
},
|
|
123
|
+
"clarification": {
|
|
124
|
+
"fillAndRerun": "Fill in your answers then re-run the same phase:",
|
|
125
|
+
"separateTerminalLabel": "Separate terminal",
|
|
126
|
+
"columnGuide": "Column guide (full definitions: `prompts/profiles/_common-contract.md §Clarification request policy` SSOT):"
|
|
127
|
+
},
|
|
128
|
+
"followUpTasks": {
|
|
129
|
+
"headingAside": "Follow-up Tasks"
|
|
130
|
+
},
|
|
131
|
+
"finalVerification": {
|
|
132
|
+
"validationEvidenceAside": "requirements coverage",
|
|
133
|
+
"columnRequirement": "Requirement (plan/brief citation)"
|
|
134
|
+
}
|
|
135
|
+
}
|