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
Methodenuebergreifende Provider auf Kernel v0.3; verbindliche Coding Rules fuer Agenten in ADP und .cursor/rules. Co-authored-by: Cursor <cursoragent@cursor.com>
81 lines
2.3 KiB
Python
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,
|
|
)
|
|
)
|