7.9 KiB
| title | state | created_at | updated_at | assignee | queued_by | queued_at |
|---|---|---|---|---|---|---|
| Workspace DB canonical schema design | closed | 2026-06-21T17:24:43Z | 2026-06-22T09:27:06Z | null | workspace-panel | 2026-06-22T08:48:39Z |
背景
Workspace web control plane は、Rust backend / SQLite store / static SPA / read-only filesystem bridge まで立ち上がっている。ただし現在の SQLite schema は起動・API skeleton 用の足場であり、Ticket / Objective / Repository / Host / Worker / Artifact を将来 DB 正本にするための canonical schema はまだ固まっていない。
DB 設計は過度に難しく扱わず、まずは既存 filesystem Ticket/Objective model と現在の orchestration 運用を素直に relational/event model へ写す。重要なのは、.yoi filesystem record をすぐ捨てることではなく、Web/API/Orchestrator が将来 DB authority に移れるだけの record 境界を決めること。
長期方針:
- Ticket / Objective は Workspace 配下に平たく存在する。
- Repository は Workspace に接続される source/storage であり、Git Repository はその一種。
- Ticket は必要に応じて Repository target selector を持つ。
- Ticket thread/events が実行履歴の authority であり、Ticket state は current snapshot として持つ。
- Worker は Ticket に関連づく logical agent/session だが、v0 では DB 正本として永続化しない。Host/Worker 一覧は runtime inspection / future Host protocol から逐次取得する live view とする。
- Worker の一元管理、データ永続化、アーカイブは将来必要になるが、Host/Worker protocol と lifecycle requirements が固まるまで v0 schema には入れない。
- Host は Worker が観測される実行環境または capacity を表すが、v0 では canonical table ではなく live view とする。
- CI/check information should be represented as Ticket events plus Artifact links in v0. If richer CI status is needed, design it later as a separate actions-like subsystem rather than a generic validation table.
- Orchestrator は将来的に fs/Bash/Git を直接持たず、Ticket / TicketEvent / TicketWorkerLink / live Host/Worker view / Artifact / Review の DB/API surface だけを見る。
- Memory / Knowledge の本格再設計はこの Ticket では扱わず、保存先を Workspace backend へ移す時に回収する。
要件
Canonical records / tables
DB design は artifacts/schema-v0.md を主たる設計記録とする。Ticket 本文では scope と要求だけを示す。
schema-v0.md では以下を明確に定義する。
- record / event / reference の区別。
- ID / timestamp / no-catch-all-payload column conventions。
AuthorRefv0。- event author/source を記録する typed snapshot。
- 初期実装では full
actorstable を必須にしない。 - auth / permission / assignment / team membership が必要になった時点で
actorstable へ昇格できる。
- table candidates and required columns:
workspacesticketsticket_eventsticket_relationsobjectivesobjective_ticket_linksrepositoriesticket_targetsticket_target_pathsticket_worker_linksartifactsaudit_events
- Orchestrator no-fs/no-bash の read/write surfaces。
- filesystem read-through から DB authority への migration modes。
初期設計で曖昧な actors entity を置かない。必要なのは event authorship であり、v0 では AuthorRef fields として扱う。
Authority / migration stance
- 当面は
.yoi/tickets/.yoi/objectivesfilesystem read-through を維持する。 - DB schema は canonical target として設計するが、この Ticket だけで full migration はしない。
- import/projection/export の方針を決める。
- filesystem -> DB import。
- DB -> filesystem export / compatibility snapshot。
- read-through bridge と DB authority の切り替え条件。
- 二重正本を避けるため、write path をいつ DB に切り替えるかを明記する。
- SQLite first でよいが、将来 Postgres/multi-tenant へ進めるよう、
workspace_idを全主要 record に含める。
Orchestrator no-fs/no-bash surface
DB/API だけを見て Orchestrator が判断できるように、以下の read/write surface を設計する。
Orchestrator が読むもの:
- Ticket state/thread/relations/targets。
- Ticket-associated WorkerRef links and worker status events。
- Objective context。
- Live Host/Worker view from runtime inspection or future Host protocol。
- Repository target and artifact source revision fields。
- Artifact summaries/diff metadata/log summaries。
- Review evidence。
Orchestrator が作るもの:
- Ticket comment/decision/state transition request。
- Ticket execution request / WorkerRef assignment / worker status events。
- Worker job request / assignment request。
- Review/check request。
- Close/done decision with evidence references。
fs/Bash/Git 操作は Host/Worker に閉じ込める。Orchestrator は raw repository filesystem や shell access を authority として持たない。
Initial implementation slice
この Ticket は design-only でもよいが、可能なら最小 schema migration まで含める。
crates/workspace-serverの SQLite schema を canonical design に合わせて整理する。- 既存 placeholder
runs/runnersnaming を、structured ticket events / live Host/Worker API /ticket_worker_linksへ寄せる。 - Migration versioning の方針を明記する。
- Existing read API を壊さない。
Non-goals
- Full DB migration of existing
.yoi/tickets/.yoi/objectives。 - Web UI からの Ticket/Objective mutation 実装。
- Memory / Knowledge の本格再設計。
- Multi-tenant production SaaS schema の完全設計。
- Auth/billing/quota/security の完全実装。
- Git hosting service の実装。
- Orchestrator profile から fs/Bash を実際に剥がすこと。
受け入れ条件
- Workspace DB canonical schema design が
artifacts/schema-v0.mdまたは同等の design record として記録されている。 schema-v0.mdが record / event / reference の区別を定義している。- Table/record 境界として Workspace / Ticket / TicketEvent / TicketRelation / Objective / ObjectiveTicketLink / Repository / TicketTarget / TicketTargetPath / TicketWorkerLink / Artifact / AuditEvent が定義されている。
- Separate top-level Run entity/table を v0 では作らず、structured Ticket events と TicketWorkerLink relation を execution history/management surface とする方針が明記されている。
- Host/Worker は v0 DB canonical table ではなく live runtime view とし、Ticket には WorkerRef snapshot/link を保存する方針が明記されている。
- Event/request/audit authorship は
AuthorRefv0 として required fields まで定義されている。 - 初期実装で full Actor entity/table を必須にしない方針と、将来 actors table へ昇格できる条件が明記されている。
- CI/check status は v0 core schema では Ticket events + Artifact links として扱い、actions-like subsystem は future work とする方針が明記されている。
.yoifilesystem read-through から DB authority へ移る migration/export/import 方針が明記されている。- Orchestrator no-fs/no-bash を可能にする DB/API read/write surface が明記されている。
- Memory / Knowledge は deferred として扱われ、この schema design の必須 scope から外れている。
- SQLite first だが、全主要 record に
workspace_idを持たせる方針が明記されている。 - 既存
runnerplaceholder naming を Host/Worker に移す方針が明記されている。 - 実装まで含める場合は
cargo fmt --check、cargo test -p yoi-workspace-server、cargo check、git diff --check、yoi ticket doctor、nix build .#yoi --no-linkが通る。