diff --git a/.yoi/tickets/00001KVWPVHFJ/artifacts/orchestration-plan.jsonl b/.yoi/tickets/00001KVWPVHFJ/artifacts/orchestration-plan.jsonl new file mode 100644 index 00000000..2a962664 --- /dev/null +++ b/.yoi/tickets/00001KVWPVHFJ/artifacts/orchestration-plan.jsonl @@ -0,0 +1 @@ +{"id":"orch-plan-20260624-120242-1","ticket_id":"00001KVWPVHFJ","kind":"accepted_plan","accepted_plan":{"summary":"Ticket `00001KVWPVHFJ` は implementation_ready。専用 worktree `/home/hare/Projects/yoi/.worktree/00001KVWPVHFJ-storage-cleanup-cli` と branch `work/00001KVWPVHFJ-storage-cleanup-cli` で、safe Pod/session storage cleanup CLI を実装する。destructive operations は dry-run/force/live refusal/path-safety を厳守する。","branch":"work/00001KVWPVHFJ-storage-cleanup-cli","worktree":"/home/hare/Projects/yoi/.worktree/00001KVWPVHFJ-storage-cleanup-cli","role_plan":"Orchestrator: routing acceptance, worktree creation, final integration/validation/cleanup. Coder: CLI/storage implementation in dedicated child worktree. Reviewer: read-only review focusing on path safety, live Pod refusal, dry-run/force semantics, and session history preservation."},"author":"yoi-orchestrator","at":"2026-06-24T12:02:42Z"} diff --git a/.yoi/tickets/00001KVWPVHFJ/item.md b/.yoi/tickets/00001KVWPVHFJ/item.md index 5e9de6b1..8ef911d6 100644 --- a/.yoi/tickets/00001KVWPVHFJ/item.md +++ b/.yoi/tickets/00001KVWPVHFJ/item.md @@ -1,8 +1,8 @@ --- title: 'Pod/session storage cleanup CLI を追加する' -state: 'queued' +state: 'inprogress' created_at: '2026-06-24T11:39:41Z' -updated_at: '2026-06-24T12:01:42Z' +updated_at: '2026-06-24T12:04:07Z' assignee: null readiness: 'implementation_ready' risk_flags: ['pod-lifecycle', 'persistence', 'destructive-operation', 'cli-ux', 'session-history', 'authority-boundary'] diff --git a/.yoi/tickets/00001KVWPVHFJ/thread.md b/.yoi/tickets/00001KVWPVHFJ/thread.md index 6fac5d58..a9778587 100644 --- a/.yoi/tickets/00001KVWPVHFJ/thread.md +++ b/.yoi/tickets/00001KVWPVHFJ/thread.md @@ -13,4 +13,97 @@ LocalTicketBackend によって作成されました。 Ticket を `workspace-panel` が queued にしました。 +--- + + + +## Decision + +Routing decision: implementation_ready + +Reason: +- Dashboard Queue により人間が Orchestrator routing を許可した queued Ticket として確認した。 +- Ticket body は `yoi pod delete`, `yoi pod prune`, `yoi session prune --unreferenced` の command spelling、dry-run/force semantics、live Pod refusal、session history preservation、explicit age threshold、validation を具体的に列挙している。 +- `TicketRelationQuery` は blocking relation 0 件、`TicketOrchestrationPlanQuery` は既存 plan 0 件だった。 +- risk flags は pod-lifecycle / persistence / destructive-operation / cli-ux / session-history / authority-boundary だが、destructive operations の safety rails と escalation conditions が明記されている。risk は reviewer focus として扱えばよく、planning return 理由にはならない。 +- 同時 queued Ticket `00001KVWPW3KX` は TUI Console rendering で code surface が別。conflict risk は低く、別 worktree/branch で並列開始可能。 + +Evidence checked: +- Ticket body / thread: `item.md`, `thread.md`。thread は create と ready->queued のみで未解決 blocker は記録されていない。 +- Relations / orchestration plan: relation 0 件、routing 前 plan 0 件。accepted plan `orch-plan-20260624-120242-1` を記録済み。 +- Code map: Grep で `crates/yoi/src/main.rs`, `crates/yoi/src/session_cli.rs`, `crates/pod-store/src/lib.rs`, `crates/session-store`, `crates/pod/src/entrypoint.rs`, `crates/pod/src/discovery.rs` 周辺を確認。 +- Workspace state: `/home/hare/Projects/yoi/.worktree/orchestration` は clean。active inprogress Ticket は 0 件。 + +IntentPacket: + +Intent: +- Pod/session storage を手動削除せずに安全に整理できる公式 CLI を追加し、Pod metadata delete / Pod prune / unreferenced session prune を dry-run-first、force-required、live-safe に実装する。 + +Binding decisions / invariants: +- No silent restore bypass。same-name fresh start は、ユーザーが明示的に stopped/restorable Pod metadata を削除した結果としてのみ発生する。 +- `pod delete` は session logs/history を削除しない。 +- live/reachable Pod metadata は削除しない。live 判定が不確実なら安全側に拒否する。 +- old cleanup に暗黙 threshold を持たせない。`--older-than` など明示 criteria が必要。 +- destructive deletion は `--force` 必須。`--dry-run` / default report を重視する。 +- Pod metadata authority は `pod-store`、session log authority は `session-store` のまま。 +- legacy top-level resume flags / bare Pod-name inference は再導入しない。 +- Panel/TUI の broad Pod manager 化は non-goal。 + +Requirements / acceptance criteria: +- `yoi pod delete [--force] [--dry-run]` で stopped/restorable Pod metadata を削除できる。 +- live/reachable Pod delete/prune は拒否され理由を出す。 +- `yoi pod prune --older-than [--force] [--dry-run]` は explicit threshold なしに old 判定削除しない。 +- `yoi session prune --unreferenced [--older-than ] [--force] [--dry-run]` は Pod metadata active pointer から参照されない session/segment を report/prune できる。 +- delete/prune output は deleted/would delete/kept/refused reason を bounded に示す。 +- focused tests が stopped Pod delete, live refusal, session preservation, unreferenced prune dry-run/force, threshold requirement, CLI parsing/help を cover する。 + +Implementation latitude: +- product CLI 側で management subcommands を捕捉するか、runtime entrypoint 側に安全に追加するかは coder が code map を見て判断してよい。 +- 必要なら shared cleanup module や `session-store` delete API を追加してよい。path safety tests を伴うこと。 +- Orphan detection は初期実装では active `PodMetadata.active.session_id` references を authority としてよい。lineage-aware retention は referenced sessions を削除しない限り follow-up に分けてよい。 +- Output は human-readable でよい。JSON は自然なら追加してよいが必須ではない。 + +Escalate if: +- live Pod detection を安全に拒否できるほど reliable にできない。 +- orphan detection が session lineage semantics の変更を必要とする。 +- Pod delete の副作用として sessions を削除する必要が出る。 +- storage migration / compatibility fallback が必要になる。 +- command design が existing `yoi pod` runtime entrypoint usage と衝突する。 +- cleanup が Panel role-session/Ticket claims, worktrees, branches, Ticket state を mutate しようとする。 + +Validation: +- `cargo fmt --check` +- focused `cargo test` for `yoi`, `pod-store`, `session-store`, affected Pod/discovery code +- `cargo check -p yoi -p pod -p pod-store -p session-store` +- `target/debug/yoi ticket doctor` または `yoi ticket doctor` +- `git diff --check` + +Current code map: +- Primary: `crates/yoi/src/main.rs`, `crates/yoi/src/session_cli.rs`, `crates/pod-store/src/lib.rs`, `crates/session-store/src/fs_store.rs`, `crates/session-store/src/lib.rs`, `crates/pod/src/entrypoint.rs`, `crates/pod/src/discovery.rs`。 +- Avoid: Panel/TUI manager UI, scheduler/stop semantics changes, Ticket/worktree/branch cleanup operations。 + +Critical risks / reviewer focus: +- accidental deletion of session history from `pod delete`。 +- live/reachable Pod metadata deletion。 +- unsafe path deletion or broad directory removal。 +- force/dry-run semantics bypass。 +- ambiguous age parsing/default threshold。 +- breaking `yoi pod` runtime entrypoint spawn/restore behavior。 + +Next action: +- `queued -> inprogress` を記録してから worktree-workflow で dedicated worktree を作成し、Coder/Reviewer sibling loop に進める。 + +--- + + + +## State changed + +Orchestrator acceptance: queued -> inprogress + +- 直前確認で `TicketShow` は state `queued`、blocking relation は 0 件、accepted plan `orch-plan-20260624-120242-1` を確認した。 +- 同時 queued Ticket `00001KVWPW3KX` は disjoint code surface のため別 worktree/branch で並列開始可能と判断した。 +- routing decision と IntentPacket は Ticket thread に記録済み。 +- これ以降に worktree-workflow で `/home/hare/Projects/yoi/.worktree/00001KVWPVHFJ-storage-cleanup-cli` を作成し、multi-agent-workflow に接続する。 + --- diff --git a/.yoi/tickets/00001KVWPW3KX/artifacts/orchestration-plan.jsonl b/.yoi/tickets/00001KVWPW3KX/artifacts/orchestration-plan.jsonl new file mode 100644 index 00000000..00980e0a --- /dev/null +++ b/.yoi/tickets/00001KVWPW3KX/artifacts/orchestration-plan.jsonl @@ -0,0 +1 @@ +{"id":"orch-plan-20260624-120242-1","ticket_id":"00001KVWPW3KX","kind":"accepted_plan","accepted_plan":{"summary":"Ticket `00001KVWPW3KX` は implementation_ready。専用 worktree `/home/hare/Projects/yoi/.worktree/00001KVWPW3KX-thinking-group` と branch `work/00001KVWPW3KX-thinking-group` で、TUI Console の render-time Thinking block aggregation を実装する。protocol/history/persistence は変更せず、TUI rendering tests と focused validation を行う。","branch":"work/00001KVWPW3KX-thinking-group","worktree":"/home/hare/Projects/yoi/.worktree/00001KVWPW3KX-thinking-group","role_plan":"Orchestrator: routing acceptance, worktree creation, final integration/validation/cleanup. Coder: TUI implementation in dedicated child worktree. Reviewer: read-only review focusing on render-only aggregation, selection behavior, no protocol/history changes."},"author":"yoi-orchestrator","at":"2026-06-24T12:02:42Z"} diff --git a/.yoi/tickets/00001KVWPW3KX/item.md b/.yoi/tickets/00001KVWPW3KX/item.md index 0eaa7bce..8a10b31e 100644 --- a/.yoi/tickets/00001KVWPW3KX/item.md +++ b/.yoi/tickets/00001KVWPW3KX/item.md @@ -1,8 +1,8 @@ --- title: 'TUI Console: 連続した Thinking block を一つの表示グループにまとめる' -state: 'queued' +state: 'inprogress' created_at: '2026-06-24T11:39:59Z' -updated_at: '2026-06-24T12:01:41Z' +updated_at: '2026-06-24T12:04:07Z' assignee: null readiness: 'implementation_ready' risk_flags: ['tui-rendering', 'reasoning-display', 'block-aggregation', 'text-selection'] diff --git a/.yoi/tickets/00001KVWPW3KX/thread.md b/.yoi/tickets/00001KVWPW3KX/thread.md index c3bfd368..f9772067 100644 --- a/.yoi/tickets/00001KVWPW3KX/thread.md +++ b/.yoi/tickets/00001KVWPW3KX/thread.md @@ -29,4 +29,89 @@ LocalTicketBackend によって作成されました。 Ticket を `workspace-panel` が queued にしました。 +--- + + + +## Decision + +Routing decision: implementation_ready + +Reason: +- Dashboard Queue により人間が Orchestrator routing を許可した queued Ticket として確認した。 +- Ticket body は TUI Console の連続 Thinking block を render-time で一つの表示 group にまとめる目的、non-goals、binding invariants、validation を具体的に列挙している。 +- `TicketRelationQuery` は blocking relation 0 件、`TicketOrchestrationPlanQuery` は既存 plan 0 件だった。 +- risk flags は TUI rendering / reasoning-display / block-aggregation / text-selection だが、protocol / pod / persistence 変更をしない、source block sequence を保持する、turn boundary / non-Thinking block を跨がない、selection behavior を壊さない、という invariant が明示されている。risk は reviewer focus として扱えばよく、planning return 理由にはならない。 +- 同時 queued Ticket `00001KVWPVHFJ` は Pod/session storage cleanup CLI で code surface が別。conflict risk は低く、別 worktree/branch で並列開始可能。 + +Evidence checked: +- Ticket body / thread: `item.md`, `thread.md`。thread は create、planning->ready、ready->queued のみで未解決 blocker は記録されていない。 +- Relations / orchestration plan: relation 0 件、routing 前 plan 0 件。accepted plan `orch-plan-20260624-120242-1` を記録済み。 +- Code map: Grep で `ThinkingStart` / `ThinkingDelta` / `ThinkingStop` / `thinking` 周辺を確認し、primary files `crates/tui/src/block.rs`, `crates/tui/src/app.rs`, `crates/tui/src/ui.rs`, `crates/tui/src/tool.rs` が妥当。 +- Workspace state: `/home/hare/Projects/yoi/.worktree/orchestration` は clean。active inprogress Ticket は 0 件。 + +IntentPacket: + +Intent: +- TUI Console の transcript rendering で、assistant turn 内に連続する `Thinking` blocks を一つの表示 group として描画し、reasoning が細切れに見える UX を改善する。 + +Binding decisions / invariants: +- これは render-time aggregation。history / protocol / persistence / block sequence は変更しない。 +- turn boundary を跨いで group 化しない。 +- non-Thinking block を跨いで group 化しない。 +- streaming / incomplete thinking を隠さない。 +- Thinking を selectable/copyable transcript text に変える UX 変更はしない。 +- Dashboard / Panel / web UI は対象外。 + +Requirements / acceptance criteria: +- 連続 Thinking blocks が Console 表示で一つのまとまりとして見える。 +- 既存の `Read` aggregation / tool rendering と同様に、rendering helper が consumed count 等で `compute_history` の走査を壊さない。 +- 単独 Thinking block の表示は regress しない。 +- Detail mode / collapsed mode / streaming state が破綻しない。 +- focused unit tests で consecutive Thinking, non-Thinking separator, turn boundary, incomplete/streaming case を確認する。 + +Implementation latitude: +- `render_thinking` を単体 renderer として残し、必要なら aggregate renderer/helper を追加してよい。 +- Header 文言、elapsed 表示、detail mode の separator/index/blank line は既存 UX に沿って実装判断してよい。 +- `compute_history` の構造に合わせ、最小変更で実装してよい。 + +Escalate if: +- protocol / pod / persistence 層の変更が必要になる。 +- Thinking を text selection/copy target にする必要が出る。 +- Provider-specific reasoning metadata の意味づけ変更が必要になる。 +- Console 以外の UI surface に範囲が広がる。 +- broad TUI rendering rewrite が必要になる。 + +Validation: +- `cargo test -p tui` または focused `cargo test -p tui thinking` / rendering tests。 +- `cargo fmt --check`。 +- `git diff --check`。 +- 必要に応じて `cargo check -p tui`。 + +Current code map: +- Primary: `crates/tui/src/block.rs`, `crates/tui/src/app.rs`, `crates/tui/src/ui.rs`, `crates/tui/src/tool.rs`。 +- Avoid: protocol/history/persistence, Dashboard/Panel/web UI, broad TUI rewrite。 + +Critical risks / reviewer focus: +- source blocks/history を変更してしまうこと。 +- non-Thinking block や turn boundary を跨いだ誤 grouping。 +- streaming/incomplete thinking state の欠落。 +- text selection/copy semantics の accidental change。 + +Next action: +- `queued -> inprogress` を記録してから worktree-workflow で dedicated worktree を作成し、Coder/Reviewer sibling loop に進める。 + +--- + + + +## State changed + +Orchestrator acceptance: queued -> inprogress + +- 直前確認で `TicketShow` は state `queued`、blocking relation は 0 件、accepted plan `orch-plan-20260624-120242-1` を確認した。 +- 同時 queued Ticket `00001KVWPVHFJ` は disjoint code surface のため別 worktree/branch で並列開始可能と判断した。 +- routing decision と IntentPacket は Ticket thread に記録済み。 +- これ以降に worktree-workflow で `/home/hare/Projects/yoi/.worktree/00001KVWPW3KX-thinking-group` を作成し、multi-agent-workflow に接続する。 + ---