From 155e039e66ce1464e658b20e19c34839f4683402 Mon Sep 17 00:00:00 2001 From: Hare Date: Sun, 21 Jun 2026 19:58:49 +0900 Subject: [PATCH] ticket: route deno and inflight snapshot work --- .../artifacts/orchestration-plan.jsonl | 1 + .yoi/tickets/00001KVMT2J25/item.md | 4 +- .yoi/tickets/00001KVMT2J25/thread.md | 78 +++++++++++++++++++ .../artifacts/orchestration-plan.jsonl | 1 + .yoi/tickets/00001KVMV03QY/item.md | 4 +- .yoi/tickets/00001KVMV03QY/thread.md | 77 ++++++++++++++++++ 6 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 .yoi/tickets/00001KVMT2J25/artifacts/orchestration-plan.jsonl create mode 100644 .yoi/tickets/00001KVMV03QY/artifacts/orchestration-plan.jsonl diff --git a/.yoi/tickets/00001KVMT2J25/artifacts/orchestration-plan.jsonl b/.yoi/tickets/00001KVMT2J25/artifacts/orchestration-plan.jsonl new file mode 100644 index 00000000..7007ef7b --- /dev/null +++ b/.yoi/tickets/00001KVMT2J25/artifacts/orchestration-plan.jsonl @@ -0,0 +1 @@ +{"id":"orch-plan-20260621-105843-1","ticket_id":"00001KVMT2J25","kind":"accepted_plan","accepted_plan":{"summary":"Implement protocol/pod/TUI support for connect-time snapshot of in-flight assistant text, thinking, and tool-call args so late attach/reconnect displays unfinished blocks and continues live deltas without gaps or duplicates.","branch":"impl/00001KVMT2J25-inflight-snapshot","worktree":"/home/hare/Projects/yoi/.worktree/00001KVMT2J25-inflight-snapshot","role_plan":"Orchestrator creates a dedicated child worktree and spawns a narrow-scope Coder. Reviewer will be spawned read-only after Coder reports implementation commit(s). After approval, Orchestrator integrates into `orchestration`, validates protocol/pod/TUI tests, records closure, and cleans only the child worktree/branch."},"author":"yoi-orchestrator","at":"2026-06-21T10:58:43Z"} diff --git a/.yoi/tickets/00001KVMT2J25/item.md b/.yoi/tickets/00001KVMT2J25/item.md index ea10d418..3a2bc4d6 100644 --- a/.yoi/tickets/00001KVMT2J25/item.md +++ b/.yoi/tickets/00001KVMT2J25/item.md @@ -1,8 +1,8 @@ --- title: 'Pod protocol: in-flight LLM response reconnect snapshot should include unfinished blocks' -state: 'queued' +state: 'inprogress' created_at: '2026-06-21T10:02:01Z' -updated_at: '2026-06-21T10:56:32Z' +updated_at: '2026-06-21T10:58:43Z' assignee: null readiness: 'implementation_ready' risk_flags: ['protocol', 'session-history', 'persistence', 'tui-reconnect', 'stream-state'] diff --git a/.yoi/tickets/00001KVMT2J25/thread.md b/.yoi/tickets/00001KVMT2J25/thread.md index dc49e079..9e2e3a6e 100644 --- a/.yoi/tickets/00001KVMT2J25/thread.md +++ b/.yoi/tickets/00001KVMT2J25/thread.md @@ -111,4 +111,82 @@ Deno 移行 refinement は誤付与として分離済み。`00001KVMT2J25` は Ticket を `workspace-panel` が queued にしました。 +--- + + + +## Decision + +Routing decision: `implementation_ready` + +Reason: +- Ticket body は in-flight LLM response reconnect snapshot の問題、affected blocks、protocol/pod/TUI relevant files、acceptance criteria、validation が具体化されている。 +- `readiness: implementation_ready` で、relations / orchestration plan に blocker はない。 +- Requirements sync で Deno refinement は誤付与として分離済みで、この Ticket は original protocol reconnect scope に戻されている。 +- 同時 queued の `00001KVMV03QY` は frontend Deno tooling migration であり、この Ticket の protocol/pod/TUI stream-state work と主対象が異なるため並列実装可能と判断する。 +- Orchestrator worktree は clean on `orchestration` at `b4786b40` で、対象 Ticket 用 worktree / branch は未作成。 + +Evidence checked: +- Ticket body / thread / artifacts via `TicketShow` and direct `item.md` read。 +- `TicketRelationQuery(00001KVMT2J25)`: no relations / blockers。 +- `TicketOrchestrationPlanQuery(00001KVMT2J25)`: no records。 +- Orchestrator git state / worktree list / branch list checked from `/home/hare/Projects/yoi/.worktree/orchestration` only。 +- Bounded code map: + - `crates/protocol/src/lib.rs`: `Event::Snapshot`, `TextDelta`, `ThinkingDelta`, `ToolCallArgsDelta`, serialization tests。 + - `crates/pod/src/segment_log_sink.rs`: committed `LogEntry` snapshot / live entry receiver。 + - `crates/pod/src/controller.rs`: direct broadcast of streaming deltas and current controller comments around stream reconstruction。 + - `crates/pod/src/ipc/server.rs`: connect-time snapshot event construction。 + - `crates/tui/src/app.rs`: `restore_snapshot` and live delta handling for text/thinking/tool-call args。 + +IntentPacket: + +Intent: +- Ensure late attach / reconnect during an in-flight LLM response can display already-generated unfinished text/thinking/tool-call args, then continue live deltas without gaps or duplicates。 + +Binding decisions / invariants: +- Fix at protocol/pod state level, not TUI-only workaround。 +- Do not persist unfinished model output as finalized assistant history。 +- Do not mutate/replay provider stream itself。 +- Preserve committed session-log gap-free semantics。 +- Preserve post-run reconnect behavior from finalized Snapshot entries。 +- No hidden context/history injection。 +- Keep in-flight snapshot bounded and typed; if large/unbounded policy is required, escalate。 + +Requirements / acceptance criteria: +- New client connecting during response sees unfinished assistant text, thinking/reasoning, and tool-call args generated before connect。 +- Live deltas after connect append to same logical block without missing or duplicated content。 +- Completed run reconnect still restores finalized transcript from normal Snapshot entries。 +- Snapshot/live boundary gap-free / duplicate-free behavior is tested。 +- TUI Snapshot restore + live delta handling has regression coverage。 +- Focused validation covers protocol/pod/TUI relevant paths。 + +Implementation latitude: +- Add structured `in_flight` state to `Event::Snapshot`, or implement bounded/sequence replay buffer if cleaner。 +- Controller/Pod may keep current accumulators for text/thinking/tool-call args。 +- TUI may seed unfinished blocks from Snapshot and continue applying live deltas to the same block。 +- Wire compatibility should be minimal; prioritize type safety and maintainability。 + +Escalate if: +- Design requires persisting unfinished output as durable history item。 +- In-flight snapshot state becomes large enough to need truncation/bounding policy beyond a straightforward current-turn accumulator。 +- Public protocol compatibility policy becomes a product decision。 +- Scope spreads to Dashboard/Pod list preview or broader UX surfaces beyond TUI/console attach。 + +Validation plan: +- `cargo fmt --check` +- Focused `cargo test -p protocol` roundtrip/serialization tests for snapshot in-flight state。 +- Focused `cargo test -p pod` tests for connect-time snapshot/live boundary and accumulator behavior。 +- Focused `cargo test -p tui` tests for snapshot seeding plus live delta continuation。 +- `cargo check -p protocol -p pod -p tui` +- `git diff --check` +- `yoi ticket doctor`。 + +--- + + + +## State changed + +Human authorized queue routing from Workspace Dashboard. Ticket has concrete acceptance criteria, no recorded blockers, and is semantically separate from the frontend Deno tooling Ticket, so Orchestrator accepts implementation. + --- diff --git a/.yoi/tickets/00001KVMV03QY/artifacts/orchestration-plan.jsonl b/.yoi/tickets/00001KVMV03QY/artifacts/orchestration-plan.jsonl new file mode 100644 index 00000000..551f734a --- /dev/null +++ b/.yoi/tickets/00001KVMV03QY/artifacts/orchestration-plan.jsonl @@ -0,0 +1 @@ +{"id":"orch-plan-20260621-105758-1","ticket_id":"00001KVMV03QY","kind":"accepted_plan","accepted_plan":{"summary":"Migrate `web/workspace` SvelteKit static SPA frontend tooling from npm/Node-primary to Deno-primary, including Deno config/tasks/lockfile, README/source-of-truth cleanup, generated artifact ignore/source-filter checks, and Deno check/build validation without changing backend authority.","branch":"impl/00001KVMV03QY-workspace-spa-deno","worktree":"/home/hare/Projects/yoi/.worktree/00001KVMV03QY-workspace-spa-deno","role_plan":"Orchestrator creates a dedicated child worktree and spawns a narrow-scope Coder. Reviewer will be spawned read-only after Coder reports implementation commit(s). After approval, Orchestrator integrates into `orchestration`, validates Deno/frontend/package hygiene, records closure, and cleans only the child worktree/branch."},"author":"yoi-orchestrator","at":"2026-06-21T10:57:58Z"} diff --git a/.yoi/tickets/00001KVMV03QY/item.md b/.yoi/tickets/00001KVMV03QY/item.md index 2150c4a9..27e78b0e 100644 --- a/.yoi/tickets/00001KVMV03QY/item.md +++ b/.yoi/tickets/00001KVMV03QY/item.md @@ -1,8 +1,8 @@ --- title: 'Workspace web SPA の frontend tooling を npm/Node から Deno に移行する' -state: 'queued' +state: 'inprogress' created_at: '2026-06-21T10:18:10Z' -updated_at: '2026-06-21T10:56:31Z' +updated_at: '2026-06-21T10:57:58Z' assignee: null readiness: 'implementation_ready' risk_flags: ['frontend-tooling', 'packaging', 'nix-source-filter', 'validation'] diff --git a/.yoi/tickets/00001KVMV03QY/thread.md b/.yoi/tickets/00001KVMV03QY/thread.md index 348d212a..aea97b74 100644 --- a/.yoi/tickets/00001KVMV03QY/thread.md +++ b/.yoi/tickets/00001KVMV03QY/thread.md @@ -13,4 +13,81 @@ LocalTicketBackend によって作成されました。 Ticket を `workspace-panel` が queued にしました。 +--- + + + +## Decision + +Routing decision: `implementation_ready` + +Reason: +- Ticket body は `web/workspace` の frontend tooling を npm/Node から Deno に移行する concrete follow-up として、requirements / acceptance criteria / validation が具体化されている。 +- `readiness: implementation_ready` で、relations / orchestration plan に blocker はない。 +- `00001KVMFFYVX` Workspace web control plane bootstrap は closed 済みで、移行対象の `web/workspace` が現在の `orchestration` に存在する。 +- `00001KVMT2J25` は protocol reconnect Ticket として別件であり、この Ticket の scope には混ぜないことが body に明記されている。 +- 同時 queued の `00001KVMT2J25` は protocol/pod/TUI stream-state work で、主対象が異なるため並列実装可能と判断する。 +- Orchestrator worktree は clean on `orchestration` at `b4786b40` で、対象 Ticket 用 worktree / branch は未作成。 + +Evidence checked: +- Ticket body / thread / artifacts via `TicketShow` and direct `item.md` read。 +- `TicketRelationQuery(00001KVMV03QY)`: no relations / blockers。 +- `TicketOrchestrationPlanQuery(00001KVMV03QY)`: no records。 +- Orchestrator git state / worktree list / branch list checked from `/home/hare/Projects/yoi/.worktree/orchestration` only。 +- Bounded code map: + - `web/workspace/package.json`, `package-lock.json`, `README.md`, `svelte.config.js`, `vite.config.ts`, `tsconfig.json`, `.gitignore` are current frontend tooling files。 + - `package.nix` currently excludes `web/workspace/node_modules`, `.svelte-kit`, and `build`。 + - `devshell.nix` already includes `deno`。 + +IntentPacket: + +Intent: +- Move Workspace web SPA frontend tooling from npm/Node-primary to Deno-primary while keeping SvelteKit static SPA and Rust backend authority unchanged。 + +Binding decisions / invariants: +- This is frontend tooling migration only; do not change Workspace backend API authority, Ticket/Objectives authority, or `.yoi` canonical record workflows。 +- Keep static SPA and Rust backend static-serving boundary。 +- Do not turn frontend into SSR/business/lifecycle authority。 +- Avoid ambiguous dual source-of-truth between npm and Deno。 +- Generated artifacts must remain out of git and Nix package source。 +- `00001KVMT2J25` protocol reconnect work remains separate。 + +Requirements / acceptance criteria: +- `web/workspace` check/build succeeds through Deno commands。 +- Add/clarify Deno project config such as `deno.json`/`deno.lock`/`deno task`。 +- README and project files make normal Deno install/check/build workflow clear。 +- Remove npm lockfile/scripts/Node-only guidance if unnecessary; if any npm/Node metadata remains, document whether it is compatibility artifact or canonical source-of-truth。 +- Preserve static output usable by Rust backend, default `web/workspace/build/` unless deliberately changed and documented。 +- Keep `web/workspace/build/`, `.svelte-kit/`, `node_modules` or Deno equivalents ignored/source-filtered。 +- Update `package.nix` / `devshell` / README only as needed for generated artifacts and validation commands。 + +Implementation latitude: +- Use Deno npm compatibility for SvelteKit/Vite/svelte-check if practical。 +- Keep `tsconfig.json` if Svelte LSP / svelte-check needs it。 +- Keep `@sveltejs/adapter-static` if static backend serving remains compatible。 +- Minimal `package.json` can remain if ecosystem requires it, but source-of-truth must be clear。 + +Escalate if: +- Deno-only check/build is unstable and Node/npm must remain primary。 +- Keeping/removing `package.json` or `package-lock.json` becomes a policy decision rather than implementation detail。 +- Migration requires SSR/Deno runtime server/Deno Deploy assumptions。 +- Rust backend static serving path or Nix package strategy requires major redesign。 +- Generated artifact boundaries become unclear。 + +Validation plan: +- `cd web/workspace && deno task check` +- `cd web/workspace && deno task build` +- `git diff --check` +- generated artifact ignore/source-filter check。 +- `nix build .#yoi --no-link` if package/source-filter changes。 +- `cargo check -p yoi-workspace-server` or focused server/static tests if static serving assumptions change。 + +--- + + + +## State changed + +Human authorized queue routing from Workspace Dashboard. Ticket has concrete acceptance criteria, no recorded blockers, and is semantically separate from the protocol reconnect Ticket, so Orchestrator accepts implementation. + ---