Kairo-Jinkendo/backend/steering/proposals/sprint_commit_agent_v1.py
Lars 1bbc5dbfce
All checks were successful
Deploy Development / deploy (push) Successful in 46s
Test Suite / pytest-backend (push) Successful in 4m8s
Test Suite / lint-backend (push) Successful in 2s
Test Suite / compose-smoke (push) Has been skipped
Test Suite / k6 /api/health Baseline (push) Successful in 19s
Test Suite / playwright-smoke (push) Successful in 13s
refactor(steering): Sprint-Vorschlaege mit austauschbarem Ranker und Abhaengigkeiten
Keine feste Bug-zuerst-Policy: heuristic_v0 als Fallback, agent_v1-Slot vorbereitet, parent_action-Abhaengigkeiten und factors[] fuer spaetere KI-Steuerung.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 11:38:22 +02:00

65 lines
2.0 KiB
Python

"""Agent sprint ranker slot — placeholder for Principle Gate / Actor execution."""
from __future__ import annotations
from typing import Any
from steering.eval_context import SteeringEvalContext
from steering.proposals.sprint_commit_context import (
RankedSprintCommitCandidate,
SprintCommitCandidate,
register_sprint_commit_ranker,
)
from steering.proposals.sprint_commit_heuristic_v0 import HeuristicV0SprintCommitRanker
_FALLBACK = HeuristicV0SprintCommitRanker()
class AgentV1SprintCommitRanker:
"""
Agent-gestütztes Ranking — noch nicht aktiv (Principle Gate).
Kontext kommt aus Snapshot/Operating Context; Scoring über auditierten Actor,
nicht aus hardcodiertem Prompt. Bis Freigabe: Fallback auf heuristic_v0.
"""
key = "agent_v1"
def rank(
self,
ctx: SteeringEvalContext,
*,
candidates: list[SprintCommitCandidate],
read_models: dict[str, Any],
target_work_cycle_id: str,
) -> list[RankedSprintCommitCandidate]:
# TODO(P6+): Actor-Slot + Governance-Pack; KI wählt Subset + Begründung
ranked = _FALLBACK.rank(
ctx,
candidates=candidates,
read_models=read_models,
target_work_cycle_id=target_work_cycle_id,
)
return [
RankedSprintCommitCandidate(
candidate=row.candidate,
rank=row.rank,
score=row.score,
reason_code=row.reason_code,
summary=f"{row.summary} (Agent-Ranker: Fallback heuristic_v0)",
factors=row.factors
+ [
{
"code": "ranker_fallback",
"weight": 0,
"label": "agent_v1 noch nicht freigegeben",
}
],
ranker_key="agent_v1_fallback",
)
for row in ranked
]
register_sprint_commit_ranker(AgentV1SprintCommitRanker())