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-keep-cards-visible-during-builder-stash.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

112 lines
5.5 KiB
Markdown

# Intent: Intent-Karten während des Builder-Stash sichtbar halten
## Ziel
Eine manuell angelegte, noch ungetrackte `docs/intent/<slug>.md` muss im
Intent Board sichtbar bleiben, nachdem sie von `geplant` nach
`in_umsetzung` verschoben wurde. Das gilt auch während der Builder seine
Arbeitskopie vorbereitet und fremde Änderungen vorübergehend per Git-Stash
beiseitelegt.
## Beobachteter Fehler
Nach dem Verschieben einer ungetrackten Intent-Karte nach `in_umsetzung`
verschwindet sie aus dem Board. Nach Abschluss des Builder-Laufs und einem
erfolgreichen `git stash pop` kann sie wieder erscheinen.
Der Fehler ist unabhängig von der ausgewählten Runtime (`codex` oder
`claude`). Der Runtime-Umschalter fiel zeitlich nur mit dem ersten
beobachteten Auftreten zusammen.
## Belegte Ursache
- `agent-codex/builder.py` ruft vor dem Modelllauf für fremde Änderungen
`git stash push --include-untracked` auf. Dadurch verschwindet auch die
ungetrackte Datei, aus der die gerade gestartete Board-Karte stammt,
vorübergehend aus dem Arbeitsbaum.
- `board-agent/trigger.py:list_intent_cards()` entdeckt Intent-Karten
ausschließlich über aktuell vorhandene `docs/intent/*.md`.
- `merged_board()` rendert State-Einträge ohne zugehörige Datei nur dann,
wenn deren `source` gleich `idea` ist. Ein bereits gespeicherter
`source=intent`-Eintrag wird deshalb während des Stash nicht ausgegeben.
- `board.html` lädt das Board alle fünf Sekunden neu. Sobald der nächste
Abruf in dieses Zeitfenster fällt, wird die Karte aus dem DOM entfernt.
- Das neu ergänzte `runtime`-Feld beeinflusst diese Filterung nicht.
## Umfang / Auftrag an den Builder
- Den Board-State beim erfolgreichen Übergang
`geplant -> in_umsetzung` um die für eine sichere Darstellung nötigen
unveränderlichen Kartendaten ergänzen: mindestens validierter Slug,
Titel und kanonischer `intent_path` unter `docs/intent/`.
- `merged_board()` so erweitern, dass ein gespeicherter Intent während
einer laufenden oder wartenden Pipeline weiterhin als Karte ausgegeben
wird, wenn seine Quelldatei vorübergehend fehlt.
- Einen fehlenden Intent nicht still wie eine normale Karte behandeln:
Die API soll einen maschinenlesbaren Zustand wie `source_missing: true`
liefern und das Frontend einen knappen Hinweis wie
„Intent-Datei vorübergehend nicht verfügbar“ anzeigen.
- Der Fallback darf ausschließlich aus serverseitig gespeicherten und
erneut validierten Werten aufgebaut werden. Weder beliebige Pfade aus
`state.json` noch Pfade außerhalb von `docs/intent/<slug>.md` dürfen
lesbar werden.
- Nach Rückkehr der Datei muss automatisch wieder die Datei als Source of
Truth gelten; es darf keine zweite dauerhaft abweichende Kopie des
Intent-Inhalts entstehen.
- Falls `git stash pop` fehlschlägt, muss die Karte sichtbar bleiben und
der bestehende Fehlerstatus beziehungsweise ein klarer Hinweis auf die
fehlende Quelldatei erkennbar sein.
- Tests in `board-agent/test_board_agent.py` ergänzen, die den kompletten
Sichtbarkeitsfall abdecken: vorhandene ungetrackte Intent-Datei,
Übergang nach `in_umsetzung`, vorübergehend fehlende Datei, weiterhin
gelieferte Karte und Rückkehr zur dateibasierten Darstellung.
- Den vorhandenen Builder-Stash-Test um die Board-relevante Randbedingung
ergänzen oder einen Integrationstest hinzufügen, der belegt, dass
`--include-untracked` die Quelldatei tatsächlich vorübergehend entfernt
und die Board-Fallback-Darstellung dieses Zeitfenster abfängt.
## Ausgeschlossen
- Keine Abschaffung des Schutzes vor dem versehentlichen Commit fremder
Arbeitsbaumänderungen.
- Intent-Dateien nicht pauschal vom Stash ausschließen: Sie könnten sonst
zusammen mit der Builder-Änderung unbeabsichtigt committed werden.
- Kein automatischer Commit einer manuell angelegten Intent-Datei allein
durch das Verschieben der Karte.
- Keine Änderung an der Provider-Auswahl oder an den Codex-/Claude-
Modellparametern.
- Kein automatischer Dienstneustart oder Deployment durch diesen Intent.
## Sicherheitsanforderungen
- Slug weiterhin mit der bestehenden `SLUG_RE` validieren.
- Ein gespeicherter Pfad muss exakt `docs/intent/<slug>.md` entsprechen;
keine frei wählbaren oder zustandsbasierten Dateipfade öffnen.
- State-only-Fallbacks dürfen keine unbekannten Kartenquellen sichtbar
machen.
- Gleichzeitige State-Updates müssen weiterhin unter `STATE_LOCK`
atomar gespeichert werden.
## Erfolgskriterien
- Eine ungetrackte Intent-Karte bleibt während des gesamten Builder-Laufs
in `in_umsetzung` sichtbar.
- Während die Datei gestasht ist, zeigt die Karte einen verständlichen
Hinweis statt zu verschwinden.
- Nach erfolgreichem Restore verschwindet der Hinweis ohne manuellen
Reload spätestens beim nächsten regulären Board-Refresh.
- Ein fehlgeschlagener Restore lässt die Karte mit erkennbarem Fehler
sichtbar.
- Getrackte Intent-Karten und reine Idea-Karten funktionieren unverändert.
- Der Runtime-Snapshot für Builder und Review bleibt unverändert erhalten.
- Alle bestehenden sowie die neuen Board- und Builder-Tests sind grün.
## Manuelle End-to-End-Prüfung
1. Diese Datei uncommitted im Arbeitsbaum belassen.
2. Die daraus erzeugte Karte manuell von `geplant` nach `in_umsetzung`
verschieben.
3. Während des Builder-Laufs mehrere automatische Board-Refreshes
abwarten und prüfen, dass die Karte sichtbar bleibt.
4. Nach Abschluss prüfen, dass wieder der normale Intent-Inhalt geöffnet
werden kann und kein fremdes Arbeitsbaum-Artefakt committed wurde.