okstra 0.60.2 → 0.61.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/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/bin/lib/okstra/interactive.sh +8 -2
- package/runtime/python/okstra_ctl/render_final_report.py +6 -1
- package/runtime/templates/reports/final-report.template.md +18 -23
- package/runtime/templates/reports/i18n/en.json +1 -2
- package/runtime/templates/reports/i18n/ko.json +1 -2
package/package.json
CHANGED
package/runtime/BUILD.json
CHANGED
|
@@ -357,10 +357,16 @@ run_resume_clarification() {
|
|
|
357
357
|
local report_path="${lookup_result%$'\t'*}"
|
|
358
358
|
local resolved_type="${lookup_result##*$'\t'}"
|
|
359
359
|
|
|
360
|
+
# implementation-planning 도 §1 Clarification Items(plan-body 결정: 예 C-205
|
|
361
|
+
# tx-배관 step 누락)를 가지므로, 사용자가 결정란을 채운 뒤 같은 phase 를
|
|
362
|
+
# clarification-response 자동공급으로 재실행해 plan 을 재생성·gate 재판정할 수
|
|
363
|
+
# 있다. 자동검색(task_type_filter 없음)은 파일명 사전순 max 라 implementation-
|
|
364
|
+
# planning 이 requirements-discovery 에 밀리므로, 이 경로는 --task-type
|
|
365
|
+
# implementation-planning 을 명시했을 때만 해소된다.
|
|
360
366
|
case "$resolved_type" in
|
|
361
|
-
requirements-discovery|error-analysis) ;;
|
|
367
|
+
requirements-discovery|error-analysis|implementation-planning) ;;
|
|
362
368
|
*)
|
|
363
|
-
printf '%s (resolved task-type: %s)\n' '--resume-clarification only applies to requirements-discovery
|
|
369
|
+
printf '%s (resolved task-type: %s)\n' '--resume-clarification only applies to requirements-discovery, error-analysis, or implementation-planning runs' "$resolved_type" >&2
|
|
364
370
|
exit 1
|
|
365
371
|
;;
|
|
366
372
|
esac
|
|
@@ -522,7 +522,12 @@ def render_to_file(
|
|
|
522
522
|
except json.JSONDecodeError as exc:
|
|
523
523
|
raise FinalReportRenderError(f"invalid JSON in {data_path}: {exc}") from exc
|
|
524
524
|
|
|
525
|
-
|
|
525
|
+
# 템플릿은 data.json 위치가 아니라 이 모듈(설치본은 ~/.okstra/lib/python,
|
|
526
|
+
# repo 는 scripts/) 위치 기준으로 찾는다. data_path 를 start 로 넘기면
|
|
527
|
+
# 프로젝트의 .okstra 트리만 위로 뒤지다 templates/reports 를 못 찾아
|
|
528
|
+
# 설치본에서 항상 'could not locate template' 으로 실패한다(OKSTRA_HOME 을
|
|
529
|
+
# 수동 설정해야 했던 원인). 프로젝트별 override 는 --template 으로 한다.
|
|
530
|
+
resolved_template = template_path or find_default_template()
|
|
526
531
|
rendered = render(
|
|
527
532
|
data,
|
|
528
533
|
template_path=resolved_template,
|
|
@@ -32,6 +32,24 @@ implementation-option: {{ frontmatter.implementationOption | yaml_scalar }}
|
|
|
32
32
|
{% for row in followUpTasks if row.origin == 'phase-continuation' %}{% if loop.first %}- Next Step: run `/okstra-run`, select task `{{ header.taskKey }}`, choose task-type `{{ row.suggestedTaskType }}`
|
|
33
33
|
{% endif %}{% endfor %}- Okstra Version: `{{ header.okstraVersion }}`
|
|
34
34
|
|
|
35
|
+
{% if clarificationCarryIn and clarificationCarryIn.sourceFile %}
|
|
36
|
+
## 0. Clarification Response Carried In From Previous Run
|
|
37
|
+
|
|
38
|
+
{{ t("sectionIntro.clarificationCarryIn") }}
|
|
39
|
+
|
|
40
|
+
- Source file: `{{ clarificationCarryIn.sourceFile }}`
|
|
41
|
+
|
|
42
|
+
{% endif %}
|
|
43
|
+
## Summary of the Problem or Verification Target
|
|
44
|
+
|
|
45
|
+
{{ t("sectionIntro.ticketCoverage") }}
|
|
46
|
+
|
|
47
|
+
| {{ t("columns.recordMeta") }} | {{ t("columns.summary") }} |
|
|
48
|
+
|--------|------------|
|
|
49
|
+
{% for row in summary -%}
|
|
50
|
+
| **{{ row.id }}**<br>Ticket: `{{ row.ticketId }}`<br>{{ t("columns.source") }}: {{ row.source }} | {{ row.summary }} |
|
|
51
|
+
{% endfor %}
|
|
52
|
+
|
|
35
53
|
## Verdict Card
|
|
36
54
|
|
|
37
55
|
{{ t("sectionIntro.verdictCard") }}
|
|
@@ -61,12 +79,6 @@ implementation-option: {{ frontmatter.implementationOption | yaml_scalar }}
|
|
|
61
79
|
{% for row in clarificationItems -%}
|
|
62
80
|
| **{{ row.id }}**<br>Ticket: `{{ row.ticketId }}`<br>Kind: `{{ row.kind }}`<br>Blocks: `{{ row.blocks }}`<br>Status: {{ row.status }} | {{ row.statement }} | {{ row.expectedForm }} | {{ row.userInput or '' }} |
|
|
63
81
|
{% endfor %}
|
|
64
|
-
|
|
65
|
-
{{ t("clarification.columnGuide") }}
|
|
66
|
-
|
|
67
|
-
- **`Kind`** ∈ `{material, decision, data-point}`.
|
|
68
|
-
- **`Blocks`** ∈ `{approval, next-phase, none}`.
|
|
69
|
-
- **`Status`** ∈ `{open, answered, resolved, obsolete}`.
|
|
70
82
|
{%- endif %}
|
|
71
83
|
|
|
72
84
|
## 2. Evidence and Detailed Analysis
|
|
@@ -599,23 +611,6 @@ Acceptance: {{ stage.acceptance }}
|
|
|
599
611
|
| {{ t("verdictCard.rationaleLabel") }} | {{ finalVerdict.rationaleRowIds | join(', ') }} |
|
|
600
612
|
| {{ t("verdictCard.nextStepLabel") }} | {{ finalVerdict.nextStep }} |
|
|
601
613
|
|
|
602
|
-
{% if clarificationCarryIn and clarificationCarryIn.sourceFile %}
|
|
603
|
-
## 0. Clarification Response Carried In From Previous Run
|
|
604
|
-
|
|
605
|
-
- Source file: `{{ clarificationCarryIn.sourceFile }}`
|
|
606
|
-
- {{ t("sectionIntro.clarificationCarryIn") }}
|
|
607
|
-
|
|
608
|
-
{% endif %}
|
|
609
|
-
## Summary of the Problem or Verification Target
|
|
610
|
-
|
|
611
|
-
{{ t("sectionIntro.ticketCoverage") }}
|
|
612
|
-
|
|
613
|
-
| {{ t("columns.recordMeta") }} | {{ t("columns.summary") }} |
|
|
614
|
-
|--------|------------|
|
|
615
|
-
{% for row in summary -%}
|
|
616
|
-
| **{{ row.id }}**<br>Ticket: `{{ row.ticketId }}`<br>{{ t("columns.source") }}: {{ row.source }} | {{ row.summary }} |
|
|
617
|
-
{% endfor %}
|
|
618
|
-
|
|
619
614
|
{% if ticketCoverage.omit %}
|
|
620
615
|
{# Ticket Coverage omitted entirely — release-handoff / final-verification #}
|
|
621
616
|
{%- else %}
|
|
@@ -126,8 +126,7 @@
|
|
|
126
126
|
},
|
|
127
127
|
"clarification": {
|
|
128
128
|
"fillAndRerun": "Fill in your answers then re-run the same phase:",
|
|
129
|
-
"separateTerminalLabel": "Separate terminal"
|
|
130
|
-
"columnGuide": "Record cell field values:"
|
|
129
|
+
"separateTerminalLabel": "Separate terminal"
|
|
131
130
|
},
|
|
132
131
|
"followUpTasks": {
|
|
133
132
|
"headingAside": "Follow-up Tasks"
|