8.7 KiB
8.7 KiB
作成
LocalTicketBackend によって作成されました。
Decision
Worker / Session / workdir retention discussion from Objective 00001KWW44EXK:
- Worker is the archival unit; Session/transcript belongs under Worker archive.
- Worker retention must support pinned to protect selected history from cleanup/prune.
- Workdir files are cache when clean and reconstructable from repository + selector/resolved commit.
- Dirty workdir is an active/recovery state; dirty orphan should require recovery Worker or explicit discard, not automatic prune.
- Backend should keep canonical Worker/Workdir/link records in SQLite, while Runtime owns materialized files, raw paths, process/cwd binding, and cleanup execution.
- Runtime direct/unmanaged workdirs must be distinguishable from Backend-managed workdirs.
Intake summary
Marked ready by yoi ticket state.
State changed
Marked ready by yoi ticket state.
State changed
Ticket を workspace-panel が queued にしました。
Decision
Routing decision: implementation_ready
Reason:
- Ticket は Backend SQLite Worker registry / Workdir registry / Worker-Workdir link table の scope、retention/link authority、Backend-managed vs unmanaged Runtime workdir distinction、acceptance criteria を具体化している。
- typed relation blocker は 0 件、OrchestrationPlan record は 0 件。queued Ticket はこの Ticket 1件のみ、inprogress は 0 件。
- Objective
00001KWW44EXKの retention 方針に沿った concrete implementation Ticket であり、実装前に必要な missing decision は見当たらない。 - queued notification is human authorized routing/start。
Evidence checked:
- Ticket body / thread / artifacts。
TicketRelationQuery(00001KX6BPY7M): 0 件。TicketOrchestrationPlanQuery(00001KX6BPY7M): 0 件。- Orchestrator worktree git status: clean on
orchestration。 - queued Ticket 一覧: this Ticket 1件。inprogress は 0 件。
- Recent code history includes Runtime workdir pages / Worker launch / Execution Workspace materialization / Browser-managed execution workspaces already merged, giving implementation substrate。
IntentPacket:
Intent:
- Add Backend-owned SQLite Worker registry, Workdir registry, and Worker-Workdir link authority so Backend can explain Worker/workdir retention and relationships independently of live Runtime catalog/path state。
Binding decisions / invariants:
- Worker is the archival/retention unit. Session/transcript refs belong under Worker archive/reference shape, not independent long-term authority。
- Workdir canonical record exists in Backend SQLite; Runtime owns actual files, raw materialized paths, process/cwd binding, cleanup execution。
- Worker-Workdir relation authority is a SQLite link table; summary copies are non-authoritative。
- Workdir files are reproducible cache, not durable history。
- Dirty workdir is active/recovery state; dirty orphan is not automatically pruned。
- Browser-facing UI uses
workdirwording; internalworking_directorycompatibility names may remain during migration。 - Raw Runtime path must not be stored in Backend registry or shown in Browser responses。
- Runtime direct/unmanaged workdirs must be distinguishable from Backend-managed workdirs and not mixed into managed lists。
Requirements / acceptance criteria:
- Add typed Backend SQLite tables for Worker registry, Workdir registry, and Worker-Workdir links with migration/default path for existing workspaces。
- Backend workdir creation creates/updates Backend Workdir registry before requesting Runtime materialization。
- Backend Worker creation creates/updates Backend Worker registry and Worker-Workdir link。
- Runtime Worker / Workdir status observations sync into Backend registry without deleting canonical record when files disappear。
- Backend registry can answer stopped Worker -> removed/missing Workdir relationship。
- Worker archive/retention metadata can represent
pinned。 - Browser Worker/Workdir lists are based on Backend-managed registry plus Runtime observation merge。
- Backend-managed vs unmanaged/external Runtime Workdirs are distinguishable。
Implementation latitude:
- Exact table names/enum names/API response shape/test helper layout can follow current
workspace-serverstore/server style。 - Session/transcript refs can be future-compatible nullable/json-ish shape if full archive model is not yet implemented。
- Runtime observation sync can be minimal v0 as long as canonical Backend rows remain authoritative and unmanaged/external is typed。
Escalate if:
- Actual prune/delete execution, dirty orphan recovery Worker auto-start, session/transcript full deletion UI, or storing Runtime raw paths in Backend canonical records becomes necessary。
Validation:
cargo test -p yoi-workspace-server --libcargo test -p worker-runtime --features ws-server,fs-storecargo check -p yoicd web/workspace && deno task check && deno task testgit diff --checkyoi ticket doctornix build .#yoi --no-link
Current code map:
- Backend store/schema:
crates/workspace-server/src/store.rs。 - Backend server/workdir/worker APIs:
crates/workspace-server/src/server.rs,hosts.rs,companion.rs。 - Runtime workdir/worker models:
crates/worker-runtime/src/{runtime.rs,working_directory.rs,execution_workspace.rs,catalog.rs,http_server.rs}。 - Frontend workdir/worker pages:
web/workspace/src/routes/w/[workspaceId]/..., workspace sidebar/workdir/worker helpers。
Critical risks / reviewer focus:
- Do not store or expose raw Runtime materialized paths。
- Backend registry/link table must remain relation authority, not transient Runtime observation。
- Runtime direct unmanaged workdirs must be visible/diagnosable as unmanaged, not silently treated as Backend-managed。
- Missing/removed workdir files must not erase canonical Backend records。
pinnedretention must be representable and protected from future cleanup/prune surfaces。
State changed
Queued acceptance recorded after Workspace Dashboard Queue notification authorized Orchestrator routing.
Checked context:
- Ticket body / thread / artifacts。
TicketRelationQuery(00001KX6BPY7M): blocking relation 0 件。TicketOrchestrationPlanQuery(00001KX6BPY7M): prior record 0 件。今回 accepted_plan を記録済み。- Orchestrator worktree git status: clean on
orchestration。 - queued Ticket はこの Ticket 1件のみ。inprogress は 0 件。
Acceptance basis:
- concrete missing decision / information は残っていない。
- Ticket scope is Backend Worker/Workdir registry/link authority; actual prune/delete/recovery automation and raw Runtime path persistence are explicitly out of scope。
- side effect はこの
queued -> inprogressacceptance 後に、worktree-workflow に沿って implementation worktree を作成してから開始する。
Implementation report
Implementation routing update:
- Worktree-workflow に従い implementation worktree を作成した。
- Worktree:
/home/hare/Projects/yoi/.worktree/00001KX6BPY7M-worker-workdir-registry - Branch:
work/00001KX6BPY7M-worker-workdir-registry
- Worktree:
- Worktree には tracked
.yoiproject records が見えている。 .yoi/memory/.yoi/runtime/.yoi/log/.yoi/logs/.yoi/local/.yoi/*.lock/.yoi/*secret*は作成直後に存在しないことを確認した。- Sibling Coder Pod
yoi-coder-00001KX6BPY7M-worker-workdirを起動した。 - Scope policy: runtime workspace root は read-only、implementation worktree は write 可。Coder task では root/original workspace での read/write/validation/git operation を禁止し、この implementation worktree だけを作業対象に指定した。
- Coder には短い task と Ticket record 読み取り指示を渡した。
- 完了後は diff / validation evidence を Orchestrator が確認し、別 sibling Reviewer Pod に read-only review を依頼する。
StopPodは既知の不具合があるため使用しない。