diff --git a/.yoi/tickets/00001KX0DSMPT/artifacts/orchestration-plan.jsonl b/.yoi/tickets/00001KX0DSMPT/artifacts/orchestration-plan.jsonl index 7d83e691..03de8e07 100644 --- a/.yoi/tickets/00001KX0DSMPT/artifacts/orchestration-plan.jsonl +++ b/.yoi/tickets/00001KX0DSMPT/artifacts/orchestration-plan.jsonl @@ -1,2 +1,3 @@ {"id":"orch-plan-20260708-104512-1","ticket_id":"00001KX0DSMPT","kind":"after","related_ticket":"00001KX0G06VA","note":"This Ticket is queued while `00001KX0G06VA` is inprogress because both touch Workspace/Backend profile/resource launch surfaces (`workspace-server` settings/API/hosts/server and profile archive/resource fetch integration). Sequence after the active resource-fetch implementation to avoid conflicting public API and ProfileSourceArchive authority-boundary changes.","author":"orchestrator","at":"2026-07-08T10:45:12Z"} {"id":"orch-plan-20260708-104530-2","ticket_id":"00001KX0DSMPT","kind":"waiting_capacity_note","note":"Queue review after Dashboard authorization. The declared dependency `00001KWZ5KERY` is closed, so that blocker is resolved. However `00001KX0G06VA` is currently inprogress on branch `work/00001KX0G06VA-resource-fetch-api` and changes the same ProfileSourceArchive/resource/workspace-server launch API surfaces this Ticket needs to build on. Leave this Ticket queued until the active resource-fetch branch is reviewed/merged or its API shape is otherwise decided; then re-route/start from the updated orchestration branch.","author":"orchestrator","at":"2026-07-08T10:45:30Z"} +{"id":"orch-plan-20260708-115622-3","ticket_id":"00001KX0DSMPT","kind":"accepted_plan","accepted_plan":{"summary":"`00001KWZ5KERY` と `00001KX0G06VA` が closed/merged になり、previous waiting reason は解除された。Workspace/Profile editing API/pages を updated orchestration branch から実装開始する。","branch":"work/00001KX0DSMPT-workspace-profile-settings","worktree":"/home/hare/Projects/yoi/.worktree/00001KX0DSMPT-workspace-profile-settings","role_plan":"単一 sibling Coder Pod に implementation worktree を委譲し、Workspace/Profile settings scoped APIs、safe Profile registry/source read-write model、settings UI pages、Backend discovery invalidation、launch candidate integration、diagnostic/redaction tests を実装する。完了後、別 sibling Reviewer Pod で Ticket IntentPacket / ProfileSourceArchive/resource-fetch authority boundary / acceptance criteria に照らして read-only review する。"},"author":"orchestrator","at":"2026-07-08T11:56:22Z"} diff --git a/.yoi/tickets/00001KX0DSMPT/item.md b/.yoi/tickets/00001KX0DSMPT/item.md index a9bbc33d..4a55a181 100644 --- a/.yoi/tickets/00001KX0DSMPT/item.md +++ b/.yoi/tickets/00001KX0DSMPT/item.md @@ -1,8 +1,8 @@ --- title: 'Add Workspace settings API and pages for Workspace/Profile editing' -state: 'queued' +state: 'inprogress' created_at: '2026-07-08T08:34:01Z' -updated_at: '2026-07-08T10:45:48Z' +updated_at: '2026-07-08T11:56:36Z' assignee: null queued_by: 'workspace-panel' queued_at: '2026-07-08T10:44:13Z' diff --git a/.yoi/tickets/00001KX0DSMPT/thread.md b/.yoi/tickets/00001KX0DSMPT/thread.md index 03d3bb12..19fdecab 100644 --- a/.yoi/tickets/00001KX0DSMPT/thread.md +++ b/.yoi/tickets/00001KX0DSMPT/thread.md @@ -60,3 +60,96 @@ Escalate if: - 人間が `00001KX0G06VA` を中断してこの Ticket を先に実装する、または両者を同一 combined worktree で統合実装する方針に切り替えたい場合。 --- + + + +## Decision + +Routing decision: implementation_ready + +Reason: +- Previous waiting reason is resolved: `00001KX0G06VA` is now merged/validated/closed, so the ProfileSourceArchive resource-fetch API shape this Ticket depends on is stable enough to build against。 +- Declared dependency `00001KWZ5KERY` is also closed, so Decodal Profile source model / ProfileSourceArchive boundary is available。 +- Ticket body gives concrete Workspace/Profile settings API, read/write source model, UI routes, diagnostics, redaction invariants, and validation criteria。 +- typed relation blocker is resolved (`depends_on 00001KWZ5KERY` target closed); no active inprogress Ticket remains。 +- The user requested sequential consumption once no blocker remains, and the Dashboard queue authorization is already present。 + +Evidence checked: +- Ticket body / thread / artifacts。 +- `TicketRelationQuery(00001KX0DSMPT)`: outgoing `depends_on 00001KWZ5KERY`; target is closed。 +- `TicketOrchestrationPlanQuery(00001KX0DSMPT)`: prior `after 00001KX0G06VA` / waiting note; `00001KX0G06VA` is now closed with merge commit `01f94b75` and close commit `a645ee5b`。 +- Orchestrator worktree git status: clean on `orchestration`。 +- queued Ticket 一覧: this Ticket 1件。inprogress は 0 件。 + +IntentPacket: + +Intent: +- Workspace-scoped Browser API and pages for Workspace metadata and Profile registry/source editing, using Backend as the authority and the Decodal/ProfileSourceArchive model already merged。 +- Frontend should edit Profiles through safe Backend APIs, not filesystem paths, and Worker launch profile candidates should reflect updated Backend discovery/validation state。 + +Binding decisions / invariants: +- Workspace/Profile editing APIs live under `/api/w//settings...` or consistent scoped Workspace API paths。 +- Browser-facing API/UI must not expose host absolute paths, secret values, Runtime endpoints/tokens, socket/session paths, runtime-local store paths, archive content/digest, or raw resource handles。 +- Profile source references use safe ids/artifact ids/display paths rather than raw absolute paths。 +- Writes must validate syntax/schema/selector uniqueness/path safety before commit and return typed diagnostics。 +- Decodal/ProfileSourceArchive source model from `00001KWZ5KERY` and resource-fetch boundary from `00001KX0G06VA` are authority inputs; do not reintroduce Runtime filesystem discovery。 +- Runtime direct sync is out of scope; Backend discovery/launch options invalidation is in scope。 + +Requirements / acceptance criteria: +- Workspace metadata read/update API works for display name and safe identity/source summaries。 +- Profile registry/source read/update APIs support create/update/delete with revision/etag-style optimistic check。 +- Settings UI has Workspace overview and Profile list/source editor routes under `/w//settings...`。 +- Profile updates re-run Backend discovery/validation and update Worker launch profile candidates。 +- Duplicate selector, invalid registry schema, invalid Decodal syntax, path/symlink escape, artifact too large, and concurrent update conflict return typed diagnostics。 +- Browser WorkingDirectory / Worker launch profile candidates and settings Profile list share the same Backend discovery result。 + +Implementation latitude: +- Endpoint naming, module boundaries, revision token shape, source/artifact id representation, UI component split, and editor implementation can follow existing workspace-server / Svelte style。 +- v0 plain textarea/editor is acceptable; no heavyweight editor required。 +- Imported source write support can be limited to bounded module root or deferred with typed diagnostics if not needed for core v0。 + +Escalate if: +- Secret value editor, multi-user auth/RBAC, Runtime direct sync, Plugin/MCP/sandbox artifact sync, Ticket/Objective/Memory editor integration, or a new Profile source semantic model beyond Decodal/ProfileSourceArchive is required。 + +Validation: +- `cargo test -p yoi-workspace-server` +- `cargo check -p yoi` +- `cd web/workspace && deno task check && deno task test` +- `git diff --check` +- `yoi ticket doctor` +- `nix build .#yoi --no-link` + +Current code map: +- Workspace/profile settings backend: `crates/workspace-server/src/server.rs`, `hosts.rs`, `config.rs`, `resource_broker.rs`, Decodal/archive helpers。 +- Profile archive/config: `crates/worker-runtime/src/profile_archive.rs`, `config_bundle.rs` for source model reference。 +- Frontend settings: `web/workspace/src/routes/w/[workspaceId]/settings/**`, `web/workspace/src/lib/workspace-settings/**`, worker launch profile candidate helpers。 + +Critical risks / reviewer focus: +- No raw paths/secrets/runtime internals or resource handles leak to Browser。 +- Profile editing updates the same Backend discovery/launch options used by Worker launch。 +- Optimistic concurrency and path/symlink escape checks fail closed。 +- Decodal validation is real and not only superficial string checks。 +- Existing Runtime resource fetch / ProfileSourceArchive authority boundaries remain intact。 + +--- + + + +## State changed + +Queued acceptance recorded after previous waiting reason was resolved. + +Checked context: +- Ticket body / thread / artifacts。 +- `TicketRelationQuery(00001KX0DSMPT)`: depends_on `00001KWZ5KERY`; target is closed。 +- `TicketOrchestrationPlanQuery(00001KX0DSMPT)`: prior `after 00001KX0G06VA` / waiting note を確認。`00001KX0G06VA` is now closed / merged。 +- Orchestrator worktree git status: clean on `orchestration`。 +- queued Ticket はこの Ticket 1件のみ。inprogress は 0 件。 + +Acceptance basis: +- Previous blocker/waiting reason is resolved。 +- concrete missing decision / information は残っていない。 +- Ticket scope is Workspace/Profile settings API and pages using already-merged Decodal/ProfileSourceArchive and resource-fetch boundaries。 +- side effect はこの `queued -> inprogress` acceptance 後に、worktree-workflow に沿って implementation worktree を作成してから開始する。 + +---