6ca67a6a37769652588905c9cf476961d4c86e7b
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>
Werkator
Lightweight, declarative and highly opinionated software build system (CI/CD).
Documentation
- docs/configuration.md — configuration reference
- docs/bootstrapping.md — initializing a repository with
init - docs/deployment.md — running Werkator as a systemd service behind a reverse proxy
Developer Setup
Source .envrc to add tools/ to your PATH, or install direnv to have this done automatically on cd:
source .envrc
Common tasks:
./gradlew build # compile and run all checks
./gradlew test # run tests
./gradlew ktlintFormat # auto-format Kotlin sources
./gradlew ktlintCheck # check formatting (also runs as part of build)
adr-status # show all architecture decisions at a glance
direnv
direnv sources .envrc automatically whenever you enter the repository and unloads it when you leave.
# Ubuntu
sudo apt install direnv
# add to ~/.bashrc or ~/.zshrc
eval "$(direnv hook bash)" # or: eval "$(direnv hook zsh)"
Trust the project's .envrc once per clone:
direnv allow
Tools (tools/)
| Command | Description |
|---|---|
adr-status |
List all Architecture Decision Records with their status and decision summary |
Architecture Decision Records
Major technical decisions are documented as ADRs in docs/adrs/.
adr-status # show all decisions at a glance
New ADRs follow the template at docs/adrs/0000-00-00.adr-template.md.
Languages
Kotlin
87%
HTML
4.6%
Shell
4.2%
JavaScript
3%
CSS
1.2%