11 KiB
作成
LocalTicketBackend によって作成されました。
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: blocked_by_dependency_or_missing_authority
Reason:
- Declared dependency
00001KWZ5KERYis now closed, so the original Decodal/ProfileSourceArchive prerequisite is satisfied。 - However
00001KX0G06VAis currentlyinprogresson branchwork/00001KX0G06VA-resource-fetch-api。 - This Ticket’s Workspace/Profile editing API and pages need to build on the same profile/resource/workspace-server launch surfaces that
00001KX0G06VAis actively changing(ProfileSourceArchive resource handling, workspace-server settings/API/hosts/server, Browser-facing profile launch configuration)。 - Starting this Ticket now would create a high-conflict parallel branch and risks designing Profile editing against the wrong resource-fetch/public API boundary。
- Therefore this routing pass leaves the Ticket queued and does not record
queued -> inprogress, create a worktree, or spawn role Pods。
Evidence checked:
- Ticket body / thread / artifacts。
TicketRelationQuery(00001KX0DSMPT): depends_on00001KWZ5KERY; target is closed。TicketOrchestrationPlanQuery(00001KX0DSMPT): prior record 0 件だったため、今回after 00001KX0G06VAと waiting-capacity note を記録。TicketList: queued はこの Ticket 1件、inprogress は00001KX0G06VA1件。- Orchestrator worktree git status: clean on
orchestration。
Next action:
00001KX0G06VAの implementation/review/merge outcome を待つ。- resource-fetch API shape が merge されたら、この Ticket を再 routing し、updated orchestration branch から start する。
Escalate if:
- 人間が
00001KX0G06VAを中断してこの Ticket を先に実装する、または両者を同一 combined worktree で統合実装する方針に切り替えたい場合。
Decision
Routing decision: implementation_ready
Reason:
- Previous waiting reason is resolved:
00001KX0G06VAis now merged/validated/closed, so the ProfileSourceArchive resource-fetch API shape this Ticket depends on is stable enough to build against。 - Declared dependency
00001KWZ5KERYis 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 00001KWZ5KERYtarget 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): outgoingdepends_on 00001KWZ5KERY; target is closed。TicketOrchestrationPlanQuery(00001KX0DSMPT): priorafter 00001KX0G06VA/ waiting note;00001KX0G06VAis now closed with merge commit01f94b75and close commita645ee5b。- 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/<workspace-id>/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
00001KWZ5KERYand resource-fetch boundary from00001KX0G06VAare 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/<workspace-id>/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-servercargo check -p yoicd web/workspace && deno task check && deno task testgit diff --checkyoi ticket doctornix 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.rsfor 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_on00001KWZ5KERY; target is closed。TicketOrchestrationPlanQuery(00001KX0DSMPT): priorafter 00001KX0G06VA/ waiting note を確認。00001KX0G06VAis 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 -> inprogressacceptance 後に、worktree-workflow に沿って implementation worktree を作成してから開始する。
Implementation report
Implemented workspace-scoped Workspace/Profile settings in the delegated worktree.
Summary:
- Added scoped Workspace settings API to read/update display metadata through the workspace identity record with revision checks.
- Added scoped Profile settings API for workspace Decodal Profile registry/source discovery, create/update/delete, default selector updates, typed diagnostics, revision conflict checks, safe source-root/path validation, and Decodal/ProfileSourceArchive validation.
- Added Backend launch-options integration so project profile candidates refresh from the same settings projection; project-profile spawns carry the resolved ConfigBundle through the Runtime resource-fetch/config boundary.
- Added Settings page UI for workspace display name, profile registry/default selector, profile source creation/edit/delete, and safe diagnostics without exposing raw host paths, secrets, runtime endpoints/tokens, socket/session/store paths, archive content/digest, resource handles, or runtime internals.
Validation:
- git diff --check
- cargo test -p yoi-workspace-server
- cargo check -p yoi
- cd web/workspace && deno task check && deno task test
- yoi ticket doctor
- nix build .#yoi --no-link
Implementation report
Follow-up fixes for external review blockers.
Summary:
- Profile settings RuntimeOperationFailed responses now include typed Browser diagnostics and map profile validation/conflict/not-found codes to bad-request/conflict/not-found HTTP statuses; response messages are redacted while preserving diagnostic codes.
- Project profile discovery now attaches source/Decodal validation failures to each project profile summary, excludes invalid project profiles from launch candidates, and rejects invalid project selectors during Worker launch candidate validation.
- Registry/default mutations now validate default selector existence, selector/source consistency, missing source files, symlink/path escape, source size, Decodal/ProfileSourceArchive validity, and invalid registry schema before committing registry changes.
- Added API/unit coverage for duplicate selector, invalid Decodal/source schema, stale revision conflicts, too-large source content, symlink escape redaction, invalid candidate exclusion/rejection, and missing/default reference rejection.
Validation:
- git diff --check
- cargo test -p yoi-workspace-server
- cargo check -p yoi
- cd web/workspace && deno task check && deno task test
- yoi ticket doctor
- nix build .#yoi --no-link