Entscheidungsinstanz an der Spitze: Mensch, Agent oder Mensch zuerst mit Frist (#690)

- cases.top in instance.json: Human | Agent | HumanFirst, agentId, humanFirstHours
- TopRole: der entscheidende Agent steht in keiner Einheit, liest keine Fremdinhalte
  und hat nur Taskboard, Escalation, Memory, FileRW, AgentComm; geprueft beim Setzen,
  bei jeder Zustellung und vor jeder Entscheidung
- CaseDesk: was bisher an der Spitze beim Menschen landete, geht nach Einstellung an
  den Agenten; Tagesdeckel und Frist gehen weiter an den Menschen. handle verwehrt,
  forward geht an den Menschen. Mensch zuerst: Uebergabe nach Ablauf, eigene Frist.
  Der Mensch kann einen Fall des Agenten selbst entscheiden.
- Beschluesse des Agenten: ByTopAgent, zum Lesen vorgelegt; jeder Beschluss laesst
  sich mit Begruendung zuruecknehmen und bindet dann niemanden mehr
- Briefing fuer den Agenten an der Spitze, auch ohne Einheiten
- OrgAdministration.SetTop mit Audit; Werkzeugsperre und Verschiebesperre
- WebUI Vorgaenge: Reiter Spitze, Lesen/Zuruecknehmen, Zaehler; i18n en/de
- Tests: TopRoleTests (15), OrgAdministrationTests (+2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-09-29 09:27:26 +02:00
co-authored by Claude Opus 5.5
parent e22edb418a
commit e8964e3c74
16 changed files with 1020 additions and 26 deletions
@@ -923,6 +923,36 @@
"cases.scopeAll": "the whole instance",
"cases.decidedBy": "Decided by",
"cases.failed": "Failed: {error}",
"cases.entry.revoked": "withdrawn",
"cases.tabTop": "Top",
"cases.atTop": "at the top",
"cases.decideInstead": "Decide instead",
"cases.topAgentAt": "Deciding agent takes over",
"cases.byTopAgent": "deciding agent",
"cases.toRead": "to read",
"cases.revoked": "withdrawn",
"cases.revokedReason": "Withdrawn",
"cases.markRead": "Mark as read",
"cases.revoke": "Withdraw",
"cases.revokeTitle": "Withdraw decision {id}",
"cases.revokeReason": "Reason",
"cases.revokePlaceholder": "Why it no longer holds",
"cases.revokeHint": "The decision stays in the collection with your reason, but binds nobody from now on. Everyone who raised the case or was a side of it is told.",
"cases.revokedDone": "Decision withdrawn.",
"cases.topTitle": "Who decides at the top",
"cases.topIntro": "Cases that reach the top of the tree — above the last lead — are decided here. The top is a role: a human, a deciding agent, or the human first with the agent behind. A case nobody decides by its deadline always comes to a human.",
"cases.topModeLabel": "Decided by",
"cases.topMode.Human": "A human",
"cases.topMode.Agent": "A deciding agent",
"cases.topMode.HumanFirst": "A human first, then the agent",
"cases.topAgent": "Deciding agent",
"cases.topUnfit": "does not fit",
"cases.topHumanFirstHours": "Hours the human has",
"cases.topReason": "Reason for the change",
"cases.topReasonPlaceholder": "Recorded in the audit log",
"cases.topSaved": "The top is set.",
"cases.topProblem": "The deciding agent takes no cases now: {problem} Until this is fixed, they go to a human.",
"cases.topRules": "A deciding agent stands above all units and may only hold Taskboard, Escalation, Memory, FileRW and AgentComm — it decides, it does not carry out: no mail, no money, no publishing, no changes to agents or rights. Every decision needs reasons, binds the whole instance and is presented to you here to read or withdraw. It makes the organisation faster, not more right.",
"mcp.title": "External access (MCP)",
"mcp.hint": "A personal token lets your own client, such as Claude Code, work as this agent: with exactly its tools and rights. Every call is audited, and what needs approval is put to you as usual.",
"mcp.label": "Name",