Kairo-Jinkendo/frontend/src/components/SprintCommitProposalPanel.jsx
Lars 20636f88d2
All checks were successful
Deploy Development / deploy (push) Successful in 47s
Test Suite / pytest-backend (push) Successful in 4m11s
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 18s
Test Suite / playwright-smoke (push) Successful in 15s
feat(steering): Kernel v0.3 mit Read-Model- und Proposal-Registry (K-Ext-1, P6)
Erweitert evaluate_steering um read_models und proposals, migriert epic_rollup auf Registry, liefert sprint_commit-Vorschlaege und UI auf Plan-Sprint.

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

67 lines
2.3 KiB
JavaScript

import { proposalReasonLabel, sprintProposalsForCycle } from '../utils/sprintCommitProposal.js'
import { backlogKindLabel, resolveBacklogVocabulary } from '../utils/resolveBacklogVocabulary.js'
import { PriorityBadge } from './PriorityBadge.jsx'
export function SprintCommitProposalPanel({
proposals = [],
selectedWorkCycleId = '',
backlogVocabulary = null,
canManage = false,
onAcceptProposal,
busy = false,
}) {
const filtered = sprintProposalsForCycle(proposals, selectedWorkCycleId)
const vocabulary = resolveBacklogVocabulary(backlogVocabulary)
if (!selectedWorkCycleId || filtered.length === 0) {
return null
}
return (
<section className="card sprint-commit-proposals">
<div className="section-header">
<div>
<h2>Sprint-Vorschläge</h2>
<p className="section-lead muted">
Vom Steuerungskern priorisiert Accept committet ins Sprint-Backlog (kein Auto-Commit).
</p>
</div>
</div>
<ol className="item-list sprint-commit-proposals__list">
{filtered.map((proposal) => (
<li key={proposal.scope_id} className="list-item card-list-item sprint-commit-proposal">
<div className="list-item-main">
<strong>
{proposal.rank}. {proposal.title}
</strong>
<p className="list-item-sub muted">{proposalReasonLabel(proposal)}</p>
</div>
<div className="list-item-meta action-controls">
{proposal.item_kind && (
<span className="badge badge--kind muted">
{backlogKindLabel(vocabulary, proposal.item_kind)}
</span>
)}
<PriorityBadge priority={proposal.priority} />
{canManage && (
<button
type="button"
className="btn btn-primary btn-sm"
disabled={busy}
onClick={() =>
onAcceptProposal?.(proposal.scope_id, {
work_cycle_id: proposal.work_cycle_id,
})
}
>
In Sprint planen
</button>
)}
</div>
</li>
))}
</ol>
</section>
)
}