Taskboard fasst nach: stockende, entblockte und wartende Aufgaben erkennen und nachfassen (#646)

Alle 30 Minuten, als Abfrage statt Modelllauf: Agentenaufgabe in Arbeit ohne
Aenderung (Vorgabe 24 h) -> einmal neu gestartet, stockt sie binnen einer
Woche wieder, geht es an die Leitung bzw. den Menschen; blockiert mit
erledigten Blockern -> wieder offen; @human-Aufgabe ueber 48 h -> in einer
Sammelaufgabe fuer den Menschen; in_review ueber 48 h und wiederholtes
LoopLimitExceeded (3 in 7 Tagen) -> Aufgabe an die Leitung. Einmal je Zustand,
hoechstens 10 Nachfassungen je Durchgang, jede im Audit. Befunde liegen
abfragbar in TaskFindings (fuer #680); WebUI-Karte 'Liegengeblieben'.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-10-02 11:49:04 +02:00
co-authored by Claude Opus 5.5
parent 095722ae9c
commit e42ec100b0
10 changed files with 617 additions and 3 deletions
@@ -302,6 +302,26 @@ public sealed class SqliteStorage
CREATE INDEX IF NOT EXISTS IX_RunDaily_Unit ON RunDaily (UnitId, Day);
-- #646: work that lives but does not move — once per kind, task and state it was found in.
CREATE TABLE IF NOT EXISTS TaskFindings (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Kind TEXT NOT NULL,
TaskId TEXT NOT NULL,
Mark TEXT NOT NULL,
Assignee TEXT NOT NULL DEFAULT '',
Title TEXT NOT NULL DEFAULT '',
Detail TEXT NOT NULL DEFAULT '',
SinceAt TEXT NOT NULL,
FirstSeenAt TEXT NOT NULL,
LastSeenAt TEXT NOT NULL,
ActedAt TEXT NULL,
Action TEXT NOT NULL DEFAULT '',
ResolvedAt TEXT NULL,
UNIQUE (Kind, TaskId, Mark)
);
CREATE INDEX IF NOT EXISTS IX_TaskFindings_Open ON TaskFindings (ResolvedAt, ActedAt);
-- Staging (A2): eingefrorene, freigabepflichtige Tool-Aufrufe. Ausgeführt wird
-- genau der gespeicherte Argument-JSON (Plan-Freeze).
-- #698: a unit's doctrine, every version kept — who, when, which run, why.