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

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.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.