| .. | ||
| .gitignore | ||
| README.md | ||
| rq_orchestrator.py | ||
| rq_orchestrator_cli.py | ||
| test_a4.py | ||
Red Queen — A4: Bounded Orchestrator (V1)
Der Bounded Orchestrator verbindet erstmals kontrolliert die A1-Architektur,
den A2 Mission/WP-State (missions.db, autoritativ für Transitionen), den A3
Deterministic Safety Layer (safety.db, verbindliche Safety-Decision) und
die Hermes-native delegate_task-Sub-Agenten (Planner/Maker/Checker) zu
einer expliziten, garantiert endenden Build-Pipeline:
MISSION → VALIDATE STATE → VALIDATE SAFETY → PLAN → VALIDATE PLAN
→ CREATE WORK PACKAGES → SELECT RUNNABLE WP → MAKER → TEST
→ FRESH CHECKER → SAFETY DECISION → STATE UPDATE → NEXT BOUNDED STEP
→ FINALIZE / STOP
WICHTIG: A4 ist KEIN 24/7-System. Kein Heartbeat, kein Mission-Cron, kein dauerhafter Worker, kein while-True-Agentloop, kein Background-Daemon, kein Self-Improvement-Automation, keine automatische Rain-Eskalation. A4 läuft nur nach einem expliziten Start und endet garantiert (bounded).
Architektur-Prinzip
Red Queen (ein Hermes-Agent) ist der Orchestrator. Der echte Sub-Agenten-Versand
(Planner/Maker/Checker) läuft über die Hermes-native delegate_task-Engine — ein
Python-Prozess kann diese NICHT aufrufen. Deshalb implementiert A4 die
deterministische Orchestrierungs-Logik als reine, inaktive Python-Library
(Orchestrator), die Red Queen als Entscheidungs- und State-Maschine importiert
und ansteuert:
- Die Library entscheidet deterministisch: was ist runnable, Safety-Gate, Risk>Size, Approval-Gate, Completion-Gate, Bounded-Run-Limits, Repair-Flow, idempotente Wiederaufnahme, Restart-Persistenz.
- Red Queen selbst startet die tatsächlichen Child-Agenten (Planner/Maker/Checker)
über
delegate_task, übergibt ihnen das von der Library erzeugte Dispatch-Contract und führt das Ergebnis überapply_child_resultzurück. - Für Tests wird ein simuliertes
ChildDispatcher-Callable injiziert — die Library selbst startet nichts und läuft nie zyklisch.
Datenfluss & Gates
| Schritt | Mechanik | Verbindlich |
|---|---|---|
| 1. Plan erhalten | von Planner | Output-Format laut AGENT_CONTRACTS |
| 2. Plan-Validierung | PlanValidator.validate() |
§6; ungültig → REJECT, keine Ausführung |
| 3. WP-Anlage | A2 MissionStore |
kein direkter SQL außerhalb A2-APIs |
| 4. Runnable-Selection | select_runnable() |
§8; DONE-Deps + READY + Safety CLOSED + Scope erlaubt |
| 5. Consistency-Gate | _consistency_gate() |
§9: A2-State + A3-Check vor JEDER Mutation |
| 6. Risk-Klassifikation | classify_risk() |
§26/27: RISK überschreibt SIZE |
| 7. Approval-Gate | requires_approval() |
§25: CRITICAL/Approval-Target → APPROVAL_REQUIRED |
| 8. Dispatch | build_maker_contract / build_checker_contract |
Minimum-Necessary-Context |
| 9. Safety-Decision | A3 evaluate_next_action |
verbindlich |
| 10. Repair-Flow | RETRY max 3 / gleiche Error-Sig max 2 | SAFETY_CONTRACT |
| 11. Circuit-Enforcement | Circuit OPEN → NO MUTATION | §19 |
| 12. Completion-Gate | mission_completion_gate() |
§20 + Final-Review-Gate |
| 13. Bounded-Run | run_bounded() |
§22: endet garantiert |
A2/A3-Integration
A4 importiert und nutzt die bestehenden Module (kein Duplikat):
from a2.rq_mission import MissionStore # autoritativ für Mission-/WP-Transitions
from a3.rq_safety import SafetyStore # verbindliche Safety-Decision
- A2 (
missions.db) ist die autoritative Quelle für Mission-/WP-State und erlaubte Transitionen. - A3 (
safety.db) ist die verbindliche Safety-Decision (evaluate_next_action,check_safety_state,record_attempt,open_circuit). - A4 selbst hält keine neue zentrale DB; Run-Flags/Sub-Agent-Evidence werden über A2/A3-APIs bzw. den A3-Safety-Evidence-Mechanismus persistiert.
- Import-Lösung:
sys.pathwird um Repo-Root unda4/ergänzt (Path(__file__).resolve().parent.parent).
Planner/Maker/Checker-Contract
| Rolle | Output | Gate |
|---|---|---|
| Planner | WORK_PACKAGES / DEPENDENCIES / RISK_CLASS / ORDER / TEST_REQUIREMENTS | Red Queen validiert deterministisch (§6) |
| Maker | IMPLEMENTATION_SUMMARY / FILES_CHANGED / TESTS_RUN / TEST_RESULTS | Nie final PASS |
| Checker | PASS / FAIL / Verdict | FRESH Child, ohne Maker-Argumentation |
build_maker_contract und build_checker_contract erzeugen die
Minimum-Necessary-Context-Contracts. Der Checker-Contract enthält bewusst
keine Maker-Rechtfertigung (AGENT_CONTRACTS §3). Werte werden secret-redacted.
Bounded Run (Limits aus Konstanten)
MAX_WORK_PACKAGES_PER_RUN = 12
MAX_REPAIR_CYCLES = 3 # entspricht A3 MAX_MAKER_CHECKER_REPAIRS
MAX_CHILDREN_ACTIVE = 3
MAX_BOUNDED_RUNTIME = 1000 # Sekunden / Steps
run_one_step() führt GENAU EINEN deterministischen Schritt aus und endet
garantiert (keine Rekursion). run_bounded() stoppt bei
MISSION_COMPLETED / BLOCKED / ESCALATED / CIRCUIT_OPEN / NO_RUNNABLE_WP / RUN_BUDGET_REACHED / ERROR — kein self-reschedule.
Approval Gates
WP, die laut ROOT_SSH_GATE einen kritischen Bereich berühren (SSH, Firewall,
Auth, Secrets, Recovery, Red Queen Runtime, Circuit Breaker, Root Policy, Live
Trading) → ST_APPROVAL_REQUIRED, keine Ausführung. Red Queen legt den Antrag
im EXTERNAL_REVIEW-Format vor und wartet auf Christian.
Failure Handling / Idempotenz
- Failure:
evaluate_next_action-Decision wird verbindlich befolgt (RETRY / DEBUG / SECOND_OPINION / BLOCK / CIRCUIT_BREAK). Repair max 3, gleiche Error-Signatur max 2. Kein implizit PASS, kein endlos Spawn. - SECOND_OPINION → KEIN automatisches Rain (nur interner frischer Child oder BLOCK; Rain ausschließlich Christian-gated, EXTERNAL_REVIEW_CONTRACT).
- Idempotenz: DONE-WP wird nie erneut Maker; bereits registrierter Attempt nicht doppelt; COMPLETED-Mission nie erneut; gleiche Child-Task-ID nie doppelt gewertet.
- Restart: State in A2/A3-DBs persistent; nach Restart wird der Zustand gelesen, ohne doppelte WP-Ausführung oder verlorene Attempts.
Sub-Agent-Evidence (§30)
make_child_evidence() erzeugt einen maschinenlesbaren Evidence-Record
(Child Role, Child Task ID, Mission ID, WP ID, Start, Result, Verdict) —
KEINE Chain-of-Thought. Credentials werden redactiert (nur EXISTS/LENGTH/redacted).
CLI
rq_orchestrator_cli.py — --json, Exit-Code 2 bei OrchestratorError (A2/A3-Muster):
plan Plan validieren + WP-Anlage
run-one-step Einen deterministischen Schritt ausführen
run-bounded Begrenzter Run (endet garantiert)
complete Completion-Gate prüfen / Final-Review
status Status abfragen
evaluate A3-Safety-Decision
approve Approval registrieren
Test Harness
python3 a4/test_a4.py — isolierte, deterministische Tests (temp-DBs, kein Netz,
kein hermes). Injiziert simulierte ChildDispatcher. Exit-Code 0 = PASS.
Deckt A4 §6–§33 ab: Plan-/Dependency-Validierung, Runnable-Selection, A2/A3-
Consistency-Gate, Maker/Checker-Contract, Checker-Pass/Fail, Retry allowed/denied,
Retry-4-Impossible, Circuit-open-blocks-Maker, Approval-Gate, Risk-overrides-Size,
No-Runnable-Stop, Completion-/Final-Review-Gate, Idempotent-WP, Restart-Resume,
Child-Failure, Reason-Codes, Secret-safe-Logging.
Known Limitations
- A4 selbst führt keine echte
delegate_taskaus (das macht Red Queen). - Kein automatisches Rain; kein Heartbeat/Cron/Daemon.
- DEBUG ist als Schnittpunkt implementiert (leitet an A5-Debugger/Strategiewechsel weiter), erzwingt aber keine interne Debugger-Logik.