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
4.5 KiB
4.5 KiB
Intent: Intent-Detail-Modal und Übergangs-Guardrails im Board
Ziel
Zwei zusammengehörige Verbesserungen am Board-Web-UI
(hosts/blunix/localServices/board-agent/):
- Der Intent-Inhalt einer Karte (
docs/intent/<slug>.md) soll beim Kartenklick lesbar sein, unabhängig davon, in welcher Spalte die Karte gerade steht. - Vorwärts-Übergänge zwischen Spalten, die eine oder mehrere Pipeline-Stufen überspringen, sollen serverseitig abgelehnt werden statt unkommentiert durchzugehen.
Umfang / Auftrag an den Builder
- In
trigger.py: einen neuen EndpointGET /api/board/cards/<id>/intentergänzen, analog zum bestehenden Review-Endpoint (GET /api/board/cards/<id>/review). Er liest den Inhalt der Datei unter demintent_pathder Karte und liefert ihn als Text/Markdown zurück. 404, wenn die Karte keinenintent_pathhat oder die Datei fehlt. - In
board.html: einen Klick-Handler für jede Karte mitsource === "intent"ergänzen (aktuell bekommen nurhas-review-Karten einen Handler). Der Klick öffnet ein eigenes<dialog>-Modal, das den Inhalt vonGET .../intentin einem<pre>-Block anzeigt — analog zum bestehendenshowReview()-Mechanismus, aber ein eigenständiges Modal. Keine Vermischung mit dem Review-Dialog; der bleibt unverändert und zeigt weiterhin ausschließlich den Review-Inhalt. - In
trigger.py'sPATCH /api/board/cards/<id>-Handler: die erlaubte Vorwärtsfolge der Spalten istidea → geplant → in_umsetzung → review → {bereit_fuer_deployment | planung_mit_feedback} → deployed. Ein Vorwärts-Sprung, der eine oder mehrere Stufen dieser Folge überspringt (z. B.geplant → deployeddirekt), wird mit HTTP 409 abgelehnt — gleiches Muster wie der bereits bestehendegeplant → in_umsetzung-Doppel-Trigger-Guard. Rückwärts-Bewegungen (in dieser Folge nach hinten, in beliebigem Abstand) bleiben uneingeschränkt erlaubt, ohne Guard.bereit_fuer_deployment → deployedundplanung_mit_feedback → geplantbleiben wie bisher reine Buchhaltung ohne Seiteneffekt (kein Auto-Deploy, kein Auto-Re-Enqueue). test_board_agent.py: Tests für den neuen Endpoint sowie für die neuen Guard-Fälle ergänzen (mindestens: ein erlaubter Vorwärtsschritt, ein abgelehnter übersprungener Vorwärtsschritt, ein erlaubter Rückwärtsschritt).
Ausgeschlossen
- Kein gemeinsames Modal für Intent- und Review-Inhalt, kein Tab-Umbau des bestehenden Review-Dialogs.
- Kein Markdown-Rendering zu HTML — reiner
<pre>-Text wie beim bestehenden Review-Dialog. - Kein automatisches Re-Enqueue eines Builder-Jobs beim Rework-Loop;
planung_mit_feedback → geplant → in_umsetzungbleibt zwei manuelle Schritte. - Kein Auto-Deploy-Trigger bei
→ deployed. - Keine Einführung von
docs/board/<slug>.yaml— State bleibt inBOARD_STATE_FILE/state.json, wie im bestehenden Phase-1-Scope festgelegt.
Annahmen
- Die erlaubte Vorwärtsfolge ist eindeutig aus der bestehenden
COLUMNS- Reihenfolge inboard.htmlableitbar. bereit_fuer_deploymentundplanung_mit_feedbackgelten beide gleichermaßen als gültige Nachfolger vonreviewund als gültige Vorgänger vondeployed(nurbereit_fuer_deploymentführt praktisch weiter zudeployed,planung_mit_feedbackführt zurück).- Rückwärts-Bewegungen brauchen keinen Guard, weil sie schon heute uneingeschränkt funktionieren und keine Seiteneffekte auslösen.
Offene Risiken
- Die Guard-Logik ist eine hartcodierte Reihenfolge, kein generisches State-Machine-Konfigurationsobjekt. Kommen künftig weitere Spalten/Phasen hinzu, muss diese Logik von Hand mitgepflegt werden — bewusster Trade-off gegen eine generischere, aber für den aktuellen Umfang überdimensionierte Lösung.
Erfolgskriterien
- Klick auf eine beliebige Intent-Karte, in jeder Spalte, öffnet ein Modal
mit dem aktuellen Inhalt ihrer
docs/intent/<slug>.md. - Ein Drag, der eine Pipeline-Stufe überspringt, wird mit 409 abgelehnt, die Karte bleibt in ihrer bisherigen Spalte.
- Bestehende und neue Tests in
test_board_agent.pysind grün. - Dieser Intent dient zugleich als Pipeline-Test: Nach dem Schreiben
dieser Datei wird die Karte manuell durch
geplant → in_umsetzunggezogen, um den bestehenden, durch diese Änderung unberührten Builder-Übergang end-to-end zu validieren. Diese Karte wird als erste von drei zusammengehörigen Karten (siehedocs/intent/planner-precise-package-removal-scope.mdunddocs/intent/reviewer-scale-depth-to-risk.md) durch die Pipeline gezogen.