Kairo-Jinkendo/backend/steering/attention/contributors/read_models.py
Lars b747200f3a
All checks were successful
Deploy Development / deploy (push) Successful in 46s
Test Suite / pytest-backend (push) Successful in 4m13s
Test Suite / lint-backend (push) Successful in 3s
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 12s
feat(steering): K-Ext-2 Attention-Registry, Gate/Intake-Proposals, generische UI
Methodenuebergreifende Provider auf Kernel v0.3; verbindliche Coding Rules fuer Agenten in ADP und .cursor/rules.

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

81 lines
2.3 KiB
Python

"""Read-model / proposal derived attention."""
from __future__ import annotations
from steering.attention.context import AttentionEvalContext
from steering.attention.contributors.registry import (
AttentionContributor,
register_attention_contributor,
)
from steering.proposals.gate_next_actions import gate_next_actions_attention_items
from steering.proposals.intake_triage import intake_triage_attention_items
from steering.proposals.sprint_commit import sprint_commit_attention_items
from steering.read_models.epic_rollup import epic_rollup_attention_items
def _epic_rollup(ctx: AttentionEvalContext) -> list[dict]:
rollups = ctx.read_models.get("epic_rollup")
if not rollups:
return []
return epic_rollup_attention_items(
initiative_id=ctx.initiative_id, rollups=rollups
)
def _sprint_commit(ctx: AttentionEvalContext) -> list[dict]:
proposals = ctx.proposals.get("sprint_commit")
if not proposals:
return []
return sprint_commit_attention_items(
initiative_id=ctx.initiative_id,
proposals=proposals,
actions=ctx.actions,
)
def _gate_next_actions(ctx: AttentionEvalContext) -> list[dict]:
proposals = ctx.proposals.get("gate_next_actions")
if not proposals:
return []
return gate_next_actions_attention_items(
initiative_id=ctx.initiative_id, proposals=proposals
)
def _intake_triage(ctx: AttentionEvalContext) -> list[dict]:
proposals = ctx.proposals.get("intake_triage")
if not proposals:
return []
return intake_triage_attention_items(
initiative_id=ctx.initiative_id, proposals=proposals
)
register_attention_contributor(
AttentionContributor(
key="epic_rollup",
requires_elements=frozenset({"backlog_epic_hierarchy"}),
contribute=_epic_rollup,
)
)
register_attention_contributor(
AttentionContributor(
key="sprint_commit",
requires_elements=frozenset({"work_cycle_scope"}),
contribute=_sprint_commit,
)
)
register_attention_contributor(
AttentionContributor(
key="gate_next_actions",
requires_elements=frozenset({"gate_fulfillment"}),
contribute=_gate_next_actions,
)
)
register_attention_contributor(
AttentionContributor(
key="intake_triage",
contribute=_intake_triage,
)
)