This repository has been archived on 2026-09-17. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
nixos-config/docs/intent/board-research-intent-directory-lifecycle.md
pijukka 05575df408 docs: commit backlog of already-resolved intent/review corpus files
board-agent's own README documents docs/intent/ and docs/research-intent/
as tracked corpus directories, and docs/review/<slug>.md as the reviewer's
persisted report per card - but the pipeline only writes these files to
the checkout, it never commits them itself. This had built up a backlog
of intent/review docs for cards already marked deployed or archiviert in
the live board state, which were sitting uncommitted in the working tree.

Adds that backlog as-is: the originating intents, their reviewer reports,
the research-intent/research pair for the board UX evaluation, and one
standalone process-retrospective report (board-review-pipeline-context-
overhead.md, same genre as the two already-tracked audit reports in
docs/review/). No code changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T7UVrKsttMP9a6FiGFna9b
2026-09-10 12:06:53 +02:00

98 lines
4.7 KiB
Markdown

# Intent: Research-Intent-Verzeichnis ohne Worker-Startfehler bereitstellen
## Ziel
`board-agent-worker.service` und damit der nach einem Builder-Commit
eingeplante Reviewer müssen auch dann starten, wenn noch kein echter
Research-Intent unter `docs/research-intent/` existiert. Die Vorbereitung
des privaten Codex-Homes darf niemals versuchen, in den durch systemd
schreibgeschützten Repository-Checkout zu schreiben.
## Beobachteter Fehler
Der Builder der Karte `research-pipeline-board-datamodel` hat Commit
`c5dd811` erfolgreich erzeugt. Der anschließend eingeplante Review-Job
`research-pipeline-board-datamodel-1788795685` blieb jedoch in
`/var/lib/board-agent/inbox/`, weil `board-agent-worker.service` bereits in
`ExecStartPre` scheiterte:
```text
install: cannot create directory
'/home/drone/nixos-config/docs/research-intent': Read-only file system
```
Nach mehreren path-getriggerten Startversuchen erreichte die Unit zusätzlich
`start-limit-hit`. Der Reviewer-Prozess selbst wurde nicht gestartet.
## Belegte Ursache
- `researchIntentDir` zeigt auf `${repoDir}/docs/research-intent`.
- `prepareCodexHome` führt aktuell `install -d` gleichzeitig für die beiden
privaten Verzeichnisse unter `/var/lib/board-agent/` und für dieses
Repository-Verzeichnis aus.
- `board-agent-worker.service` läuft mit `ProtectSystem="strict"`; der
Checkout ist für die Unit absichtlich nicht schreibbar.
- Das Verzeichnis `docs/research-intent/` ist im Commit nicht vorhanden.
Git versioniert leere Verzeichnisse nicht.
- `trigger.py:list_research_cards()` behandelt ein fehlendes Verzeichnis
bereits sicher als leere Kartenmenge. Ein Laufzeit-`mkdir` im Worker ist
daher weder für den Trigger noch für den Reviewer erforderlich.
## Umfang / Auftrag an den Builder
- `docs/research-intent/` durch einen getrackten, nicht als Research-Intent
interpretierbaren Platzhalter dauerhaft im Checkout anlegen, zum Beispiel
`docs/research-intent/.gitkeep`. Kein zusätzliches `*.md`, das durch
`list_research_cards()` versehentlich als Karte erscheinen könnte.
- `${researchIntentDir}` aus `prepareCodexHome` entfernen. Dieses Skript darf
ausschließlich seine privaten Laufzeitverzeichnisse unter
`/var/lib/board-agent/` vorbereiten und bei Bedarf `auth.json` kopieren.
- `BOARD_RESEARCH_INTENT_DIR` unverändert auf den Repository-Pfad zeigen
lassen. Trigger und Worker benötigen dort nur Lesezugriff; spätere
Research-Intent-Dateien werden durch den normalen Git-/Builder-Workflow
angelegt.
- Die bestehende Härtung (`ProtectSystem="strict"`,
`ProtectHome="read-only"`) beibehalten. Den Fehler ausdrücklich **nicht**
durch einen pauschalen Schreibpfad für das Repository oder für
`docs/research-intent/` umgehen.
- Sicherstellen, dass eine Aktivierung der korrigierten Unit den vorhandenen
`start-limit-hit` auflöst und der bereits wartende Review-Job anschließend
genau einmal verarbeitet werden kann. Falls dafür eine deklarative
systemd-Anpassung nötig ist, diese eng auf die Board-Worker-Unit begrenzen.
- Den Architekturhinweis in `board-agent/README.md` ergänzen: Corpus-
Verzeichnisse im Repository sind getrackte Eingaben; `ExecStartPre` erzeugt
ausschließlich privaten Runtime-State.
## Tests
- Nix-Auswertung beziehungsweise Unit-Prüfung: `ExecStartPre` enthält keinen
Schreibzugriff auf `${repoDir}` oder `docs/research-intent`.
- Das getrackte Platzhalter-Artefakt erzeugt in `GET /api/board` keine
Research-Karte.
- Mit leerem `docs/research-intent/` starten
`board-agent-trigger.service` und ein manueller Testlauf von
`board-agent-worker.service` unter der bestehenden Sandbox erfolgreich.
- Ein bereits in `BOARD_INBOX_DIR` liegender Review-Job wird nach der
Aktivierung genau einmal übernommen; es entsteht weder ein Duplikat noch
ein Verlust des vorhandenen Queue-Eintrags.
- Bestehende Board-Agent-Tests bleiben grün.
## Ausgeschlossen
- Keine Umsetzung des eigentlichen Research-Worker-Dispatchs.
- Keine Änderung an Codex-/Claude-Modellen oder Runtime-Snapshots.
- Kein Abschwächen der systemd-Sandbox.
- Kein Löschen oder manuelles Umschreiben des wartenden Review-Jobs.
- Keine generische Fehleranzeige im Board; diese folgt in der separaten Karte
`board-worker-startup-failures-on-card`.
## Erfolgskriterien
- `board-agent-worker.service` startet ohne Schreibversuch im Repository.
- Die Worker- und Path-Unit sind nach Aktivierung nicht mehr im Zustand
`failed` beziehungsweise `start-limit-hit`.
- Der Review von Commit `c5dd811` kann mit dem unveränderten Queue-Eintrag
anlaufen.
- `docs/research-intent/` existiert in einem frischen Checkout, ohne eine
Phantomkarte im Board zu erzeugen.
- Die bisherigen Härtungsgrenzen der Unit bleiben vollständig erhalten.