--- description: Steering Kernel v0.4 — verbindliche Regeln für Read Models, Proposals, Attention, Agent-Slots, Ranker (alle Coding-Agenten) globs: backend/steering/**,backend/data_layer/initiative_snapshot.py,frontend/src/components/SteeringProposalsPanel.jsx,frontend/src/components/AgentSlotsPanel.jsx,frontend/src/utils/steeringProposals.js,frontend/src/utils/agentSlots.js,frontend/src/utils/sprintCommitProposal.js,frontend/src/pages/initiative/InitiativeInboxPage.jsx,frontend/src/pages/initiative/InitiativePlanPage.jsx,frontend/src/pages/initiative/InitiativeOverviewPage.jsx,frontend/src/pages/modes/PlanSprintPage.jsx alwaysApply: true --- # Kairo Steering Kernel — Coding Rules (verbindlich) **Primärdokument:** `docs/architecture/ADP_Steering_Kernel_Coding_Rules_v0.1.md` **Architektur:** `docs/architecture/ADP_Steering_Kernel_Extension_Model_v0.1.md` ## Herzmaschine - Initiative-Steuerung **nur** via `evaluate_steering()` in `backend/steering/kernel/evaluate.py` - Snapshot spiegelt `evaluation.read_models` + `evaluation.proposals` + `evaluation.agent_slots` — **kein** Duplikat-Rechnen ## Neue Fähigkeit = Provider registrieren | Was | Wo | |-----|-----| | Read Model | `steering/read_models/registry.py` | | Proposal | `steering/proposals/registry.py` | | Attention | `steering/attention/contributors/*.py` + Registry | | Agent-Slot | `steering/agent_slots/registry.py` | | Sprint-Ranker | `register_sprint_commit_ranker()` — weitere Ranker analog | Aktivierung über `steering_elements` / `data_slices` im Methoden-Vertrag — **nicht** über Page-Ifs oder `method_key`-Branches im Kernel. ## Proposals - **Kein Auto-Commit** — Accept in UI/API - **Keine feste Bug/Story-Policy** — `ranker_key` + `factors[]`; Heuristik = Fallback (`heuristic_v0`) - Abhängigkeiten: `dependency_refs`, `dependency_blocked` - KI: `agent_v1` Ranker + Actor-Slot — **keine** hardcodierten Prompts (Principle Gate) ## Agent-Slots - Deklarative Fenster für Actors — **kein** Prompt, **keine** Auto-Ausführung - Config: `operatingContext.agent_slot_config` (`enabled_slots`, `guardrail_pack`, `stale_debt_days`) - UI: `AgentSlotsPanel` + Snapshot `steering_kernel.agent_slots` ## Frontend - `SteeringProposalsPanel` + `PROPOSAL_UI_CONFIG` in `utils/steeringProposals.js` - Daten aus `steeringSnapshot.steering_kernel.proposals` - Keine neue Proposal-Page pro Methode ## Methoden-Parität (Ist) | Provider | Element-Gate | |----------|--------------| | `sprint_commit` | `work_cycle_scope` | | `gate_next_actions` | `gate_fulfillment` | | `intake_triage` | `backlog` slice, **excludes** `work_cycle_scope` | | `epic_rollup` | `backlog_epic_hierarchy` | | `planning_debt` / `execution_graph` | `gate_fulfillment` / `critical_path` | | `tech_debt_summary` | `backlog` + `actions` slices | | `review.due` / `recurring.due` / `review.guardrail` | Agent-Slots (data_slices + elements) | ## Verboten - Steuerungslogik außerhalb `backend/steering/` - Archetyp-Ifs für Steuerungs-UI - `evaluate_next_work` für Commit-Vorschläge (Plan ≠ Ist) - OM-Tabellen für Vorschläge ## Tests - Unit-Test pro Provider/Ranker - Snapshot-Integration wenn DB-Test verfügbar - Truth Table aktualisieren