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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "okstra",
3
- "version": "0.60.2",
3
+ "version": "0.61.0",
4
4
  "description": "Multi-agent cross-verification orchestrator runtime + Claude Code skills.",
5
5
  "license": "MIT",
6
6
  "author": "devonshin",
@@ -1,5 +1,5 @@
1
1
  {
2
- "package": "0.60.2",
3
- "builtAt": "2026-06-09T06:03:11.725Z",
2
+ "package": "0.61.0",
3
+ "builtAt": "2026-06-09T07:19:02.278Z",
4
4
  "repoRoot": "/home/runner/work/okstra/okstra"
5
5
  }
@@ -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 or error-analysis runs' "$resolved_type" >&2
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
- resolved_template = template_path or find_default_template(data_path)
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"
@@ -126,8 +126,7 @@
126
126
  },
127
127
  "clarification": {
128
128
  "fillAndRerun": "답을 채우신 뒤 같은 phase 를 다시 실행:",
129
- "separateTerminalLabel": "별도 터미널",
130
- "columnGuide": "항목 칸 안의 값 설명:"
129
+ "separateTerminalLabel": "별도 터미널"
131
130
  },
132
131
  "followUpTasks": {
133
132
  "headingAside": "후속 작업"