8.4 KiB
8.4 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: implementation_ready
Reason:
- Declared dependency
00001KWZ5KERYis closed, so Decodal ProfileSourceArchive / archive verify / Runtime FSなし resolution の基礎は available。 - Related follow-up
00001KX0DSMPTWorkspace/Profile settings API/pages is also closed, so settings/profile editing surface exists and this Ticket can refine it to ProfileSourceTree virtual filesystem + Decodal editor。 - Ticket body gives concrete model/API/UI/editor/dependency/validation requirements and clear non-goals。
- typed relation blocker is resolved; OrchestrationPlan record は 0 件。inprogress Ticket も 0 件。
- queued notification is human authorized routing/start。
Evidence checked:
- Ticket body / thread / artifacts。
TicketRelationQuery(00001KX1JNJ2Y): outgoingdepends_on 00001KWZ5KERY; target is closed。TicketOrchestrationPlanQuery(00001KX1JNJ2Y): 0 件。TicketList: queued はこの Ticket 1件、inprogress は 0 件。- Orchestrator worktree git status: clean on
orchestration。 - Relevant prior work: Decodal/ProfileSourceArchive closed, Workspace/Profile settings closed。
IntentPacket:
Intent:
- Add Backend-owned
ProfileSourceTreevirtual filesystem for Decodal profile sources, connect ProfileSourceArchive import closure building to that tree, strengthen Runtime archive import validation, and add Workspace settings Profile source tree editor usingdecodal-codemirror@0.1.2/ CodeMirror 6。
Binding decisions / invariants:
- Browser/editor works with virtual relative paths and safe source tree/file ids, never host absolute paths or raw filesystem authority。
- Backend validation is authority; Browser editor diagnostics are only assistance。
- Runtime reads only ProfileSourceArchive manifest / virtual paths, not Workspace filesystem。
ProfileSourceArchiveis a snapshot of source tree revision + selected root + import closure。- Browser-facing API must not expose host absolute path, symlink target path, Runtime endpoint/socket/session path, secret values, WorkingDirectory root path, raw resource handles, archive digest/content, or backend-private paths。
decodal-codemirror@0.1.2/ CodeMirror 6 dependency is in scope; formatter and Browser-side Decodal materialization as authority are out of scope。
Requirements / acceptance criteria:
- Implement typed
ProfileSourceTreemodel with tree id, revision/generation, virtual root metadata, files, provenance, diagnostics, and safe summaries。 - Implement virtual import resolver for relative imports and adopted namespace imports, with normalization and typed diagnostics for root escape, absolute path, URL/unsupported scheme, extension/content-type, depth/count/bytes limits。
- Build
ProfileSourceArchivefrom selected root virtual path and source tree import closure, including virtual path / source key / digest / size / content type / import map in manifest。 - Runtime
ArchiveSourceLoadervalidates manifest-contained virtual paths only and rejects manifest-outside import, absolute path,.., unsupported namespace。 - Add scoped Profile settings file-tree API: list trees, list files, read/write/create/delete file, validate tree/file; rename/move optional。
- Add Settings UI profile source tree list and file tree editor routes/pages using Decodal CodeMirror extension and Backend save/create/delete/validate APIs。
- Focused backend/runtime/web tests cover path normalization, import closure, archive manifest validation, Runtime import resolution, Browser redaction, file tree API, and editor route smoke。
Implementation latitude:
- Exact endpoint names, source tree storage format, namespace enum details, UI route/component split, and editor model can follow existing workspace-server/Svelte style。
- v0 may keep source tree storage minimal and project/workspace-backed, provided Browser contract remains virtual-path based and Backend validation remains authority。
Escalate if:
- Browser-facing raw host path authority, Runtime workspace filesystem discovery, Browser-side Decodal materialization as authority, formatter integration, plugin/MCP/sandbox artifact sync, or Profile source RDB-normalized editor becomes required。
Validation:
cargo test -p yoi-workspace-servercargo 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 profile settings/source model:
crates/workspace-server/src/profile_settings.rs,server.rs,hosts.rs。 - Decodal/Profile archive:
crates/worker-runtime/src/profile_archive.rs,config_bundle.rs。 - Frontend settings/profile editor:
web/workspace/src/routes/w/[workspaceId]/settings/**,web/workspace/src/lib/workspace-settings/**。
Critical risks / reviewer focus:
- virtual paths and tar paths must not allow absolute path /
../ symlink/path escape。 - Browser must never receive host absolute path, secret, runtime endpoint, archive digest/content, or raw handle。
- Runtime SourceLoader must be archive-manifest/import-map only, no FS/backend fallback。
- source tree validation/write must be revision-aware and fail closed with typed diagnostics。
- new editor dependency and Nix/lock updates must be correct。
State changed
Queued acceptance recorded after Workspace Dashboard Queue notification authorized Orchestrator routing.
Checked context:
- Ticket body / thread / artifacts。
TicketRelationQuery(00001KX1JNJ2Y): depends_on00001KWZ5KERY; target is closed。TicketOrchestrationPlanQuery(00001KX1JNJ2Y): 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 ProfileSourceTree virtual filesystem + Decodal editor follow-up on top of closed Decodal/ProfileSourceArchive and Workspace/Profile settings work。
- side effect はこの
queued -> inprogressacceptance 後に、worktree-workflow に沿って implementation worktree を作成してから開始する。
Implementation report
Implemented ProfileSourceTree virtual source-tree support for project Decodal profiles.
Summary:
- Added Runtime archive manifest validation for virtual source metadata, duplicate/undeclared tar entries, scoped import-map keys, namespace/path safety, and current-source relative import resolution without filesystem reads.
- Added Backend-owned project
ProfileSourceTreeAPI over virtualprofiles/...paths, revision-aware read/write/delete file operations, path validation, tree scanning, import closure/archive building from tree contents, and project-profile config bundle generation from archives. - Extended workspace server routes and browser API/types for scoped profile source tree access without exposing host absolute paths or resource/archive internals.
- Added a Profiles settings Decodal CodeMirror editor backed by virtual paths/revision tokens only.
- Added worker-runtime tests for scoped virtual imports and import-map mismatch rejection.
Validation:
git diff --checkcargo test -p yoi-workspace-servercargo test -p worker-runtime --features ws-server,fs-storecargo check -p yoicd web/workspace && deno task check && deno task testyoi ticket doctornix build .#yoi --no-link