From ae227c7e4d1f0c64cd7d6a85bc86f056019bd9fe Mon Sep 17 00:00:00 2001 From: Hare Date: Thu, 9 Jul 2026 18:10:08 +0900 Subject: [PATCH] ticket: record profile source tree symlink fix --- .yoi/tickets/00001KX1JNJ2Y/item.md | 2 +- .yoi/tickets/00001KX1JNJ2Y/thread.md | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/.yoi/tickets/00001KX1JNJ2Y/item.md b/.yoi/tickets/00001KX1JNJ2Y/item.md index f517280e..f890cec5 100644 --- a/.yoi/tickets/00001KX1JNJ2Y/item.md +++ b/.yoi/tickets/00001KX1JNJ2Y/item.md @@ -2,7 +2,7 @@ title: 'Add ProfileSourceTree virtual filesystem and Decodal profile editor' state: 'inprogress' created_at: '2026-07-08T19:18:25Z' -updated_at: '2026-07-09T08:57:15Z' +updated_at: '2026-07-09T09:10:00Z' assignee: null queued_by: 'workspace-panel' queued_at: '2026-07-09T07:56:07Z' diff --git a/.yoi/tickets/00001KX1JNJ2Y/thread.md b/.yoi/tickets/00001KX1JNJ2Y/thread.md index 474d9676..2c807aa9 100644 --- a/.yoi/tickets/00001KX1JNJ2Y/thread.md +++ b/.yoi/tickets/00001KX1JNJ2Y/thread.md @@ -282,3 +282,31 @@ Non-blocking follow-ups: - Editor extension wiring is compile/static-source covered rather than directly unit-tested; acceptable for now, but smoke coverage would help future dependency regressions。 --- + + + +## Implementation report + +Second review-fix implementation report: + +- Coder Pod completed remaining requested changes and committed follow-up `13c6548b fix: reject profile source root symlinks` on branch `work/00001KX1JNJ2Y-profile-source-tree`。 +- Worktree status was clean after commit。 +- Fix summary: + - Added shared `ProfileSourceRoot` guard。 + - Rejects `.yoi/profiles` when it is a symlink。 + - Verifies canonical `.yoi/profiles` remains under the canonical workspace root。 + - Applied the guard consistently to source tree listing, file read/delete checks, write preparation, source summaries, and archive construction through tree scan/read paths。 + - Hardened writes so `.yoi` and `.yoi/profiles` are created one component at a time only after symlink/canonical containment checks。 + - Added regression coverage for `.yoi/profiles -> outside_dir`: write rejects before outside side effects, outside target is not created/modified, source tree read/list fails closed, and archive construction fails closed。 +- Orchestrator reran validation in the implementation worktree: + - `git diff --check`: pass + - `cargo test -p yoi-workspace-server`: pass(94 lib tests + 2 main tests) + - `cargo test -p worker-runtime --features ws-server,fs-store`: pass(47 lib tests + 5 main tests + doc tests) + - `cargo check -p yoi`: pass + - `cd web/workspace && deno task check`: pass(0 errors / 0 warnings) + - `cd web/workspace && deno task test`: pass(19 tests) + - `yoi ticket doctor`: ok + - `nix build .#yoi --no-link`: pass +- Requesting second follow-up external review against `941b9126..13c6548b` and full combined implementation。 + +---