src/frameworks/claude/claudeInvoker.ts — calls ensureWorktree and dispatches with the worktree path as cwd (FR-3); deletes the "⛔ CRITICAL: Data Source Rules" disclaimer and the glab/gh interpolation (FR-7)
src/frameworks/queue/pQueueAdapter.ts — MR-scoped concurrency chain (FR-9); fresh review and followup on the same MR are serialized
src/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.ts — close + merge branches call removeWorktree (FR-5)
src/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.ts — close branch calls removeWorktree (FR-5)
src/main/routes.ts — composition root wires removeWorktree action backed by GitCommandCliGateway
src/tests/units/frameworks/claude/mcpContext.test.ts — factory mock of node:os so the new transitive import to daemonPaths does not crash module load
src/tests/acceptance/46-github-followup-review-on-push.acceptance.test.ts — drops the obsolete "Platform-aware MCP system prompt" suite (now owned by SPEC-170 scenario 11)
docs/feature-tracker.md — SPEC-170 status implementing
ensureWorktree returns EnsureResult { status: 'failed', reason: 'branch-not-found' }; claudeInvoker propagates the failure rather than silently falling back to plain localPath cwd
R3 settings write failure
No rollback. Logged as warning, dispatch continues. Worst case: Claude creates a nested sub-worktree (pre-SPEC-170 behaviour)
R5 fresh + followup serialization on same MR
Confirmed desired. The MR-key chain in pQueueAdapter keys by <platform>:<projectPath>:<mrNumber> and ignores the gitlab-followup prefix; the second operation waits for the first
R6 GitHub close vs merged
closed + closed+merged are funneled through the same closeResult branch in github.controller. Single insertion point sufficient
R10 sweep cross-project
sweepStaleWorktrees use case takes a getRepositories() callback and iterates each repo's getActiveMrs / getById for tracker cross-reference. Scheduler not yet wired (deferred)
FR-6 scheduler wiring — create src/frameworks/scheduler/worktreeSweepScheduler.ts mirroring cleanupScheduler.ts; wire startWorktreeSweepScheduler in src/main/server.ts; convert scenarios 6, 7, 8 to active tests
FR-8 fork handling — add sourceForkCloneUrl?: string to ReviewJob; populate from github.controller on cross-fork events; thread through claudeInvoker → MrSource; convert scenario 9
Scenarios 1 + 2 acceptance harness — currently asserted via unit tests on claudeInvoker + ensureWorktree.usecase; building the end-to-end acceptance harness around enqueueReview → claudeInvoker → ensureWorktree → dispatch deserves its own ticket
Pre-SPEC-170 worktree sweep on prod — one-time manual cleanup of .claude/worktrees/ under the operator's home; documented in deploy runbook (docs/HARNESS-ONBOARDING.md companion entry to add)