Der letzte Übertrag aus Sitzung C: `RunningBuild` trug kein Repository, der
Executor ist aber instanzweit. Zwei Folgen, beide gemessen und jetzt behoben:
- Das Worktree-Aufräumen schützte die Worktrees ALLER Repositories. Ein
laufender Build eines anderen Repositories auf einem gleichnamigen Branch
hielt hier einen Worktree fest, dessen Branch längst von origin weg war.
- Die Current-Builds-Ansicht und `/api/builds/current` zeigten die Builds
aller Repositories, schlugen ihren Status aber in den Ergebnissen NUR
dieses Repositories nach — ein fremder Build fiel auf RUNNING zurück und
zeigte einen Zustand, den niemand aufgezeichnet hat. Dasselbe beim
Live-Log: der Schlüssel eines fremden Builds wurde beantwortet.
`RunningBuild.repo` ist der `RepoContext` selbst, verglichen wird per
Referenz — der Kontext ist die Identität (ADR 0009), und der Executor hat ihn
in `startBuild` ohnehin zur Hand. Watcher, API und UI filtern damit auf ihr
eigenes Repository.
Drei neue Tests, Gegenprobe per Mutation gezogen: Nimmt man die drei Filter
wieder heraus, fallen genau diese drei und sonst keiner. 493 Tests grün,
ktlint sauber.
Architektur-Skill und Plan (docs/plan/22-multi-repo.md) nachgezogen — die
Aussage „RunningBuild carries no repository" stimmte nicht mehr. Was von
Sitzung D bleibt: die repo-bezogenen Routen und die Oberfläche, die weiterhin
nur `registry.current()` bedienen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>