Kontrollpflicht der Leitung: Stichproben gegen das Audit (#693)

A lead looks at the runs of the agents it leads - held against the task and
against what the engine stamped, never by asking the agent.

- RunInspector (Core/Inspection): the mechanical check and first profile of
  the inspector foundation (#204). Flags failed runs, tool errors, refusals,
  unfinished calls, tasks answered with bookkeeping alone, and operations the
  agent names but never called in the run (the 2026-09-14 pattern).
- SpotChecks: picks runs per unit (rate, denser for new agents, new models and
  after a failure, daily cap), deterministic by run id; one task per lead.
- Escalation tool: spot_checks, inspect_run, check_done, propose_measure.
  Measures go to a human; nothing is carried out automatically. A security
  suspicion is its own case, not a personnel matter.
- Organisation view: settings per unit, recent checks, measures to decide.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-10-01 11:40:20 +02:00
co-authored by Claude Opus 5.5
parent ab1bd67464
commit 68e723a9c0
19 changed files with 1621 additions and 6 deletions
@@ -307,6 +307,41 @@ public sealed class SqliteStorage
UNIQUE (Period, Scope, Kind)
);
-- #693: runs picked for a lead to look at, and the measures a lead proposed.
CREATE TABLE IF NOT EXISTS SpotChecks (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
UnitId TEXT NOT NULL,
Lead TEXT NOT NULL,
AgentId TEXT NOT NULL,
RunId TEXT NOT NULL UNIQUE,
Why TEXT NOT NULL,
Findings TEXT NOT NULL,
CreatedAt TEXT NOT NULL,
Verdict TEXT NULL,
Note TEXT NULL,
ReviewedAt TEXT NULL,
TaskId TEXT NULL
);
CREATE INDEX IF NOT EXISTS IX_SpotChecks_Lead ON SpotChecks (Lead, Verdict);
CREATE INDEX IF NOT EXISTS IX_SpotChecks_Unit ON SpotChecks (UnitId, CreatedAt);
CREATE TABLE IF NOT EXISTS SpotMeasures (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
CheckId INTEGER NULL,
UnitId TEXT NOT NULL,
ProposedBy TEXT NOT NULL,
AgentId TEXT NOT NULL,
Kind TEXT NOT NULL,
Reasoning TEXT NOT NULL,
ProposedAt TEXT NOT NULL,
Status TEXT NOT NULL,
DecidedBy TEXT NULL,
DecidedAt TEXT NULL,
Note TEXT NULL,
TaskId TEXT NULL
);
CREATE TABLE IF NOT EXISTS StagedCalls (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
RunId TEXT NOT NULL,