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

2.8 KiB

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.