okstra 0.214.0 → 0.214.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "okstra",
3
- "version": "0.214.0",
3
+ "version": "0.214.1",
4
4
  "description": "Host-aware multi-provider cross-verification orchestrator runtime and agent skills.",
5
5
  "license": "MIT",
6
6
  "author": "devonshin",
@@ -1,5 +1,5 @@
1
1
  {
2
- "package": "0.214.0",
3
- "builtAt": "2026-10-06T13:20:36.896Z",
2
+ "package": "0.214.1",
3
+ "builtAt": "2026-10-06T14:25:05.491Z",
4
4
  "repoRoot": "/home/runner/work/okstra/okstra"
5
5
  }
@@ -47,15 +47,15 @@ def _resolve_planning_input_path(path_value: str, project_root: Path) -> Path |
47
47
  return None
48
48
 
49
49
 
50
- def _is_existing_planning_report(
51
- path_value: str, project_root: Path, inp: PlanningInputs
50
+ def is_existing_planning_report(
51
+ path_value: str, project_root: Path, task_group: str, task_id: str,
52
52
  ) -> bool:
53
53
  from okstra_ctl.paths import task_dir
54
54
 
55
55
  try:
56
56
  report = lexical_absolute_path(Path(path_value))
57
57
  task_root = lexical_absolute_path(
58
- task_dir(project_root, inp.task_group, inp.task_id)
58
+ task_dir(project_root, task_group, task_id)
59
59
  )
60
60
  relative = report.relative_to(task_root)
61
61
  except ValueError:
@@ -95,8 +95,8 @@ def _validate_planning_entry_inputs(project_root: Path, inp: PlanningInputs) ->
95
95
  if inp.selected_direction_path:
96
96
  return
97
97
  if inp.clarification_response_path:
98
- if not _is_existing_planning_report(
99
- inp.clarification_response_path, project_root, inp
98
+ if not is_existing_planning_report(
99
+ inp.clarification_response_path, project_root, inp.task_group, inp.task_id
100
100
  ):
101
101
  raise PrepareError(
102
102
  "implementation-planning rerun --clarification-response must point "
@@ -588,10 +588,12 @@ STEPS: list[Step] = [
588
588
  and s.confirmed is None),
589
589
  build=_build_confirm, submit=_submit_confirm,
590
590
  owns=("confirmed", "edit_target", "confirmation_prompt", "confirmation_stages", "confirmation_scope", "user_authorization")),
591
+ # 되감기는 이 step 뒤에서 일어나 answered 에 남는다. 반복 가능이 아니면 두 번째
592
+ # 수정에서 건너뛰어져 위저드가 미확정인 채 done 을 냈다(dev-11126 planning).
591
593
  Step(S_EDIT_TARGET,
592
594
  applies=lambda s: s.confirmed is False and not s.edit_target,
593
595
  build=_build_edit_target, submit=_submit_edit_target,
594
- owns=()),
596
+ owns=(), repeatable=True),
595
597
  ]
596
598
 
597
599
 
@@ -10,6 +10,7 @@ from okstra_ctl.clarification_items import user_response_sidecars
10
10
  from okstra_ctl.manager_paths import MANAGER_CONTEXT_DIRECTIVE_PREFIX
11
11
  from okstra_ctl.json_boundary import JsonBoundaryError, load_owned_object, write_owned_object_atomic
12
12
  from okstra_ctl.report_language import is_language_tag
13
+ from okstra_ctl.phases.implementation_planning.entry import is_existing_planning_report
13
14
  from okstra_ctl.pr_template import PrTemplateError, resolve_pr_template_path
14
15
  from okstra_project.dirs import project_json_path
15
16
  from okstra_project.state import StateError, list_project_tasks
@@ -358,6 +359,16 @@ def _submit_clarification(state: WizardState, value: str) -> Optional[str]:
358
359
  state.clarification_response_path = ""
359
360
  return "clarification: (none)"
360
361
  p = _require_file(val, Path(state.project_root), "clarification-response")
362
+ # prepare 가 거절할 경로를 여기서 받으면 재실행이 조용히 새 계획 흐름
363
+ # (selected_direction_pick)으로 바뀌었다(dev-11126: implementation 리포트를 넣음).
364
+ if state.task_type == "implementation-planning" and not is_existing_planning_report(
365
+ str(p), Path(state.project_root), state.task_group, state.task_id,
366
+ ):
367
+ raise WizardError(
368
+ "an implementation-planning rerun takes an implementation-planning report "
369
+ "of this task (runs/implementation-planning/reports/"
370
+ f"final-report-implementation-planning-<seq>.data.json); got {p}"
371
+ )
361
372
  state.clarification_response_path = str(p)
362
373
  return f"clarification: {p}"
363
374