okstra 0.95.0 → 0.96.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.
@@ -412,15 +412,18 @@ stage-group 의 상호작용 순서: **G1 base 선택 → G2 stage 확인(선택
412
412
  위상정렬이 담고, task 화 이후의 통합 일정은 okstra-schedule 이 맡는다. okstra-brief 는
413
413
  이 경로에 개입하지 않는다. 검증: `validators/validate_fanout.py`(validate-run 훅).
414
414
 
415
- ### branch_confirm (worktree 결정 확인)
415
+ ### confirm 단계의 worktree 미리보기
416
416
 
417
- okstra-run wizard 는 최종 confirm 직전에 `branch_confirm` 단계로 "새 브랜치/worktree 생성 vs
418
- 현재 worktree 재사용"을 명시 확인한다. 결정은 `worktree.preview_worktree_decision()`(부수효과 없음)
419
- 으로 미리보고, 같은 헬퍼를 `provision_task_worktree` 실행에 쓰므로 미리보기와 실제가 일치한다.
420
- worktree 격리 동작 자체는 변경 없음(확인 게이트만). 옵션은 항상 `진행`/`중단` 을 포함하고,
421
- worktree 생성 케이스에만 `base-ref 다시 고르기`(edit) 추가된다 어떤 케이스든 picker 로
422
- 렌더링 가능한 2-옵션 이상을 보장한다. `중단` 은 터미널이다: state 가 `aborted` 로 고정되고
423
- 이후 `next_prompt` `kind: "aborted"` 반환하며 `render-args` `ok: false` 로 거부한다.
417
+ okstra-run wizard 는 별도 분기 확인 단계를 두지 않고, 최종 `confirm` 직전 요약 블록
418
+ (`confirmation_block`)에 "새 브랜치/worktree 생성 vs 현재 worktree 재사용"을 `worktree` 한 줄로
419
+ 보여준다. 결정은 `worktree.preview_worktree_decision()`(부수효과 없음)으로 미리보고, 같은 헬퍼를
420
+ `provision_task_worktree` 실행에 쓰므로 미리보기와 실제가 일치한다. `implementation` stage
421
+ 격리로 동작하므로 task-key 디렉터리가 아니라 이번 run 실제 stage worktree 관점으로
422
+ 미리본다(`preview_stage_worktree_decision` / stage `auto` `compute_worktree_path`).
423
+ `final-verification` stage worktree 읽기 전용 재사용하므로 worktree 줄을 생략한다.
424
+ `confirm` 옵션은 `Proceed`/`Edit`/`중단` 3-옵션이다 — `Edit` 은 임의 step 으로 되감기(base-ref
425
+ 재선택 포함), `중단` 은 터미널이다: state 가 `aborted` 로 고정되고 이후 `next_prompt` 는
426
+ `kind: "aborted"` 만 반환하며 `render-args` 는 `ok: false` 로 거부한다.
424
427
 
425
428
 
426
429
  ---
@@ -469,9 +472,11 @@ task manifest, task index, instruction-set, runs, history가 이 루트 아래
469
472
  │ ├── logs/
470
473
  │ │ └── errors-<task-type>-<seq>.jsonl # optional, lead-only writer
471
474
  │ └── worker-results/
472
- └── history/
473
- ├── timeline.json
474
- └── fix-cycles.jsonl # optional, fix cycle 진입 시에만 생성 (append-only)
475
+ ├── history/
476
+ ├── timeline.json
477
+ └── fix-cycles.jsonl # optional, fix cycle 진입 시에만 생성 (append-only)
478
+ └── recap/
479
+ └── recap-log.jsonl # optional, recap facet 의 전/후 요약·Q&A append-only 로그 (다른 산출물 불변)
475
480
  ```
476
481
 
477
482
  실제 디렉터리 세그먼트는 안전한 경로 생성을 위해 slug 형태로 정규화될 수 있습니다.
@@ -189,6 +189,9 @@ Important modules:
189
189
  | Module | Role |
190
190
  |---|---|
191
191
  | `run.py` | `prepare_task_bundle()` single authority and CLI parser |
192
+ | `implementation_stage.py` | `implementation` 단일-stage run 오케스트레이션 — consumer 상태 복구 → 가용 Stage Map entry 선택 → 격리 stage worktree provision → 선택 stage 를 run context 로 발행 (`run.py` 에서 추출) |
193
+ | `stage_targets.py` | Stage readiness/verification 정책 SSOT — 어떤 stage 가 실행 가능한지, 어느 commit 에서 분기하는지, final-verification 이 무엇을 검사하는지 결정 (`consumers.jsonl` 행과 git ancestry 검사를 단일 인터페이스 뒤로 캡슐화) |
194
+ | `stage_reconcile.py` | stage prepare 흐름 공용 best-effort git reconciliation (`git_reconcile.auto_reconcile` 위임; advisory — 실패는 stderr 보고만, dependency gate 가 권위 판정 유지) |
192
195
  | `run_context.py` | Per-task mutex, run context and run-input persistence; `consumers_mutex` helper for atomic `consumers.jsonl` writes |
193
196
  | `consumers.py` | Append-only `consumers.jsonl` writer + reader — records which `implementation` runs consumed which `implementation-planning` stage |
194
197
  | `paths.py` | Path/sequence computation for task/run artifacts |