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-usage-indicator-ui.md
pijukka 41e05ed43f board: automatic escalation ladder for limit_reached Builder retries
The Operator's ===OPERATOR-DECISION=== schema gains an optional
"escalation" field (<=2 steps of model/reasoning_effort/iteration_limit,
validated against a new per-runtime orchestration.MODEL_POOL allowlist):
per-parent for direct_builder, per-child for split. On limit_reached,
completion_watcher.py now walks this ladder (via the shared
fanout.escalation_ladder_for()) instead of a single flat identical-params
retry, escalating model/iteration_limit before falling back to today's
manual repair/Aufteilen-angefordert checkpoints. A card that never went
through the Operator keeps its existing flat single-retry behavior
unchanged. orchestration.child_failed(), fanout.child_terminal(), and
trigger.py's Aufteilen-angefordert guard all switch from the old hardcoded
">= 1" threshold to the card's actual ladder length. board.html surfaces
the current attempt count on affected cards.

Also includes the board-session-usage-indicator research writeup (Codex
app-server JSON-RPC + Claude /api/oauth/usage as the two non-interactive
usage sources) and its Operator-produced child intents, plus the
operator_klaerung_noetig phase-visibility fix already staged in this
checkout (distinct phase for a needs_human/crashed Operator run that never
produced children, instead of reusing "durch_kinder_blockiert").

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SyeDivnWm6hgiNd3YKjK7Z
2026-09-10 13:58:52 +02:00

64 lines
2.8 KiB
Markdown

# Intent: Nutzungsanzeige in der Board-Kopfzeile
## Ziel
Ein kleines, dauerhaft sichtbares UI-Element im Intent-Board, das auf
einen Blick zeigt, wie viel Prozent des aktuellen Nutzungslimits für
Claude Code und Codex CLI noch übrig sind — damit vor dem Losschicken
einer Karte sichtbar ist, ob überhaupt noch Spielraum besteht.
## Umfang
- In `hosts/blunix/localServices/board-agent/board.html`:
- Ein kompaktes Element in der bestehenden `<header>`-Zeile neben
`<h1>Intent-Board</h1>` (oder als schmale eigene Leiste direkt
darunter), unauffällig gestaltet im vorhandenen Stil.
- Periodischer Abruf von `GET /api/board/usage` alle 60 Sekunden,
getrennt vom bestehenden `setInterval(render, 5000)`, plus ein
initialer Abruf beim Laden.
- Anzeige der *verbleibenden* Prozent, berechnet aus den vom Endpunkt
gelieferten verbrauchten Prozent (`100 - used_percent`, auf ganze
Prozent gerundet und auf 0..100 begrenzt), knapp formatiert, etwa
"Claude: 60 % übrig · Codex: 0 % übrig".
- Der Endpunkt liefert je Anbieter ein 5-Stunden- und ein
Wochenfenster; angezeigt wird pro Anbieter der knappere der beiden
Werte (also das kleinere "übrig"), damit die Anzeige nie zu
optimistisch ist. Die `resets_at`-Zeitstempel dürfen höchstens als
`title`-Tooltip erscheinen.
- Bei `null` oder fehlgeschlagenem Abruf für einen Anbieter dessen
Wert als "—" darstellen; die jeweils andere Seite bleibt sichtbar.
Ein fehlgeschlagener Abruf darf das übrige Board-Rendering nicht
stören.
- Ein Strukturtest in `test_board_agent.py` im Stil der vorhandenen
`board.html`-Tests (Vorhandensein des Elements, des Abrufs von
`/api/board/usage` und des 60-Sekunden-Intervalls).
## Explizit ausgeschlossen
- Keine Änderung an `trigger.py`, `board-agent.nix` oder am
Antwortvertrag des Endpunkts.
- Kein neuer Dialog, keine neue Spalte, keine Änderung an Board-Spalten
oder Trigger-Logik.
- Kein Verlauf/Graph über die Zeit, keine Alarmierung bei niedrigem
Kontingent, keine Aufschlüsselung pro Rolle.
## Annahmen
- `GET /api/board/usage` existiert bereits und liefert je Anbieter
`five_hour_used_percent`, `seven_day_used_percent` und die zugehörigen
`resets_at`-Felder, jeweils möglicherweise `null`.
- Der Endpunkt gibt bereits nur berechnete Prozentwerte heraus; das
Frontend braucht keine zusätzliche Filterung von Secrets.
## Offene Risiken
- Bei dauerhaft fehlschlagendem Endpunkt darf die Kopfzeile nicht
flackern oder Fehlermeldungen aufdrängen; die Leerdarstellung muss
ruhig bleiben.
## Erfolgskriterien
- Das Board zeigt einen aktuellen, unaufdringlichen Prozentwert für
Claude und für Codex oder eine klare Leerdarstellung.
- Die Anzeige aktualisiert sich ohne Seitenneuladen.
- Der Testlauf von `test_board_agent.py` ist grün.