fix(worktree): audit observation fetch/display for composite project names

Three sites didn't account for parent/worktree composite naming:

- PaginationHelper.stripProjectPath: marker used full composite, breaking
  path sanitization for worktrees checked out outside a parent/leaf layout.
  Now extracts the leaf segment.
- observations/store.ts: fallback imported getCurrentProjectName from
  shared/paths.ts (a duplicate impl without worktree detection). Switched
  to getProjectContext().primary so writes key into the same project as
  reads.
- SearchManager.getRecentContext: fallback used basename(cwd) and lost
  the parent prefix, making the MCP tool find nothing in worktrees.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alex Newman
2026-04-16 17:38:49 -07:00
parent d589bc5f25
commit a65ab055ca
5 changed files with 154 additions and 152 deletions
+5 -3
View File
@@ -24,15 +24,17 @@ export class PaginationHelper {
* Uses first occurrence of project name from left (project root)
*/
private stripProjectPath(filePath: string, projectName: string): string {
const marker = `/${projectName}/`;
// Composite names ("parent/worktree") don't appear in on-disk paths for
// standard git worktrees — only the checkout basename does. Match on the
// leaf segment so the heuristic works regardless of worktree layout.
const leaf = projectName.includes('/') ? projectName.split('/').pop()! : projectName;
const marker = `/${leaf}/`;
const index = filePath.indexOf(marker);
if (index !== -1) {
// Strip everything before and including the project name
return filePath.substring(index + marker.length);
}
// Fallback: return original path if project name not found
return filePath;
}