Epic Notes: separate the jobs, then bring them back

Follow https://raph.fyi/writing/coding-with-agents-epic-notes/#worktrees

1. In epic-stack / lab/notes, establish the 42-test baseline and clean
   preparation commit. Reuse an existing clean checkpoint; do not reset it.
   Give the WORKTREES prompt. If both worktrees and workshop-start exist,
   verify their branches/starting commit and use them without rerunning
   setup. If all are absent, approve the helper once. On partial setup,
   preserve folders and diagnose first.
2. node workshop/add-worktrees.mjs creates ../epic-filter (lab/filter) and
   ../epic-title (lab/title). Each receives npm ci and separate synthetic
   SQLite databases. It tags the starting commit workshop-start.
3. Open each folder in a separate VS Code window. Start OpenCode in that
   folder. One writer per folder. No autonomous subagents required.
4. Filter session: PLAN, BUILD, EVIDENCE. Original reference 42 -> 47 tests.
   Title session: TEST first (reference 3 failures / 5 passes), then
   EXPERIMENT. Freeze the approved evaluator test paths/hashes.
5. EXPERIMENT: maximum ten minutes and two candidate repairs. Stop after
   the first accepted candidate. Never edit tests to make a repair pass.
   Log actual hypotheses, commands, exit codes and counts. A quota/network
   block is blocked, not an incorrect repair. Title reference: 50 pass.
6. Return to coordinator epic-stack / lab/notes. INTEGRATE prompt: inspect,
   approve named-file local commits, merge filter then title. No pushes.
   Reference combined full suite: 55 pass. Stop on conflicts and explain.
7. Fresh Plan review: use git diff workshop-start...HEAD as well as
   uncommitted/untracked files. git diff alone can miss committed features.
8. Start only the coordinator app and evaluate both behaviors in VS Code.

Small laptop: sequential agent sessions are fine. Run one test suite and
one app server at a time; stop the prior server before using port 3000.
Use Git Bash on Windows. Do not share/copy .env, databases or node_modules.
WSL users keep every folder/tool in the same Linux environment.
On partial helper failure, keep the created folders and diagnose the first
error; it refuses to overwrite existing folders/branches. Never force it.
Keep worktrees after class until your work is saved; no deletion required.

Reference fallback: only on fresh, unedited worktrees, apply solution01
in epic-filter; apply solution02 (red), then solution03 (green) in epic-title.
Relative paths ../solutions/01-filter.patch etc work because all folders
are beside the solutions directory. Compare, do not force over edits.

REFERENCE-ONLY START IF MODEL ACCESS IS BLOCKED
From fresh prepared epic-stack, run the unchanged baseline first:
npm test -- --run --maxWorkers=2
Stop on failure. Only if the preparation branch/checkpoint is absent:
git switch -c lab/notes
git add AGENTS.md opencode.json workshop
git -c user.name="Workshop Learner" -c user.email="learner@example.test" commit -m "Prepare local workshop"
git status --short

Confirm Git status is empty. Use the worktree setup above once. Keep
the same named windows. Apply01 in epic-filter,02 in epic-title. Run
the focused checks before03 so you see the actual failing assertions.
For the unchanged title implementation in epic-title:
git apply --check ../solutions/03-title-fix.patch
git apply ../solutions/03-title-fix.patch
npm test -- --run --maxWorkers=2 'app/routes/users/$username/notes/+shared/note-editor.test.tsx' 'app/routes/users/$username/notes/+shared/note-editor.server.test.tsx'

Run the full suite in both branches. Save only these reference files
after the checks pass. In epic-filter:
git add 'app/routes/users/$username/notes/_layout.tsx' 'app/routes/users/$username/notes/_layout.test.tsx'
git -c user.name="Workshop Learner" -c user.email="learner@example.test" commit -m "Filter note titles within the selected owner"
git status --short

In epic-title:
git add 'app/routes/users/$username/notes/+shared/note-editor.tsx' 'app/routes/users/$username/notes/+shared/note-editor.test.tsx' 'app/routes/users/$username/notes/+shared/note-editor.server.test.tsx'
git -c user.name="Workshop Learner" -c user.email="learner@example.test" commit -m "Reject blank note titles and normalize valid titles"
git status --short

In coordinator epic-stack / lab/notes (clean status first):
git -c user.name="Workshop Learner" -c user.email="learner@example.test" merge --ff-only lab/filter
git -c user.name="Workshop Learner" -c user.email="learner@example.test" merge --no-ff --no-edit lab/title
npm test -- --run --maxWorkers=2
npm run typecheck
npm run lint
git diff --check workshop-start...HEAD
git status --short

Stop on merge conflicts. Reference code is not proof of an agent run.
Evaluate the combined app using the Local URL of its current server.
No model access means the fresh AI review remains unverified.
