f1c422af49
Closes Stream H Task 10 (H10) that was deferred from the initial Stream H
push. Adds two pure helpers to tools/subagent-prompt-prefix.mjs and wires
them into buildHeader() so subagents spawned inside a linked git worktree
get a SETUP block with vendor symlink + storage/framework mkdir guidance
in their injected prompt.
Two new exports:
1. detectWorktreeMode({cwd, gitDir, gitCommonDir}) — pure detector that
returns {isWorktree, parentRepoRoot}. Worktree is detected when the
per-worktree git-dir differs from the shared git-common-dir; the
parent repo root is derived by stripping the trailing `/.git` segment
from the common dir (separators normalized to forward slashes). Handles
null inputs gracefully and accepts mixed forward/backslash separators.
2. buildSetupBlock({isWorktree, parentRepoRoot, platform}) — pure renderer
that returns the SETUP — worktree bootstrap text block (or '' to omit
when not in a worktree or parentRepoRoot is missing). Picks `mklink /D`
on win32 vs `ln -s` elsewhere. Mentions all four storage/framework
subdirs (cache, sessions, views, testing) per memory
`feedback_subagent_worktree_bootstrap.md` — exactly what Pest 4 needs
to resolve the Eloquent facade and view cache paths inside a worktree.
buildHeader() now resolves --git-dir + --git-common-dir alongside the
existing --show-toplevel, calls detectWorktreeMode to classify the
spawn site, then inserts buildSetupBlock's output between rule 5 and
the END marker. When not in a worktree the block is empty and the header
layout is unchanged.
Regression: vitest tools 1785/1785 GREEN (was 1776; +9 tests across
"detectWorktreeMode (Stream H Task 10)" and "buildSetupBlock (Stream H
Task 10)" describe blocks in the new
tools/subagent-prompt-prefix-h10.test.mjs file). The pre-existing
tools/subagent-prompt-prefix.test.mjs is intentionally excluded from
vitest config (node:test runner used for subprocess-style tests) — H10
helpers are pure and live in the vitest scope so the new test file is
not added to the exclude list.
Stream H Task 10 of 11 — closes the deferred H10. Plan:
docs/superpowers/plans/2026-05-30-router-gate-v4-stream-H.md