yoi/.yoi/tickets/00001KX0DSMPT/thread.md

11 KiB
Raw Blame History

作成

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 00001KWZ5KERY is now closed, so the original Decodal/ProfileSourceArchive prerequisite is satisfied。
  • However 00001KX0G06VA is currently inprogress on branch work/00001KX0G06VA-resource-fetch-api
  • This Tickets Workspace/Profile editing API and pages need to build on the same profile/resource/workspace-server launch surfaces that 00001KX0G06VA is actively changingProfileSourceArchive 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_on 00001KWZ5KERY; target is closed。
  • TicketOrchestrationPlanQuery(00001KX0DSMPT): prior record 0 件だったため、今回 after 00001KX0G06VA と waiting-capacity note を記録。
  • TicketList: queued はこの Ticket 1件、inprogress は 00001KX0G06VA 1件。
  • 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: 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/<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 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/<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-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 を作成してから開始する。

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