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
5.5 KiB
5.5 KiB
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.pyruft vor dem Modelllauf für fremde Änderungengit stash push --include-untrackedauf. 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 vorhandenedocs/intent/*.md.merged_board()rendert State-Einträge ohne zugehörige Datei nur dann, wenn derensourcegleichideaist. Ein bereits gespeichertersource=intent-Eintrag wird deshalb während des Stash nicht ausgegeben.board.htmllä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_umsetzungum die für eine sichere Darstellung nötigen unveränderlichen Kartendaten ergänzen: mindestens validierter Slug, Titel und kanonischerintent_pathunterdocs/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: trueliefern 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.jsonnoch Pfade außerhalb vondocs/intent/<slug>.mddü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 popfehlschlä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.pyergänzen, die den kompletten Sichtbarkeitsfall abdecken: vorhandene ungetrackte Intent-Datei, Übergang nachin_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-untrackeddie 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_REvalidieren. - Ein gespeicherter Pfad muss exakt
docs/intent/<slug>.mdentsprechen; 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_LOCKatomar gespeichert werden.
Erfolgskriterien
- Eine ungetrackte Intent-Karte bleibt während des gesamten Builder-Laufs
in
in_umsetzungsichtbar. - 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
- Diese Datei uncommitted im Arbeitsbaum belassen.
- Die daraus erzeugte Karte manuell von
geplantnachin_umsetzungverschieben. - Während des Builder-Laufs mehrere automatische Board-Refreshes abwarten und prüfen, dass die Karte sichtbar bleibt.
- Nach Abschluss prüfen, dass wieder der normale Intent-Inhalt geöffnet werden kann und kein fremdes Arbeitsbaum-Artefakt committed wurde.