generated from coulomb/repo-seed
feat(P5): IHF Phase 5 complete — agent-assisted distillation
Some checks failed
Test / test (push) Has been cancelled
Some checks failed
Test / test (push) Has been cancelled
Adds bounded AI support to the IHF governance loop. All AI outputs are attributed (model_ref), reviewable (AgentReviewRecord), and reversible. No autonomous decisions; no silent requirement promotion. - T01: Schema — agent_proposals, agent_review_records, confidence_annotations (migration 1743379200) - T02: AgentProposalsController (index/show/accept/reject, idempotent review guard), global nav "Agent" link - T03: SummarizeClusterAction — Claude API cluster summary on widget show - T04: DraftRequirementAction — AI requirement draft; acceptance creates RequirementCandidate (human-gated) - T05: DetectDuplicatesAction — duplicate_flag proposal on candidate show - T06: DetectPolicySensitivityAction — policy_flag with ConfidenceAnnotations per concern scope - T07: ProposeImplementationAction — impl_proposal from decision show - T08: AgentAuditDashboardAction — autoRefresh; KPI row, unreviewed queue, recent proposals, attribution log matrix - T09: integration tests, SCOPE.md updated, phase5-summary.md, flake.nix adds http-conduit/aeson/string-conversions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -82,8 +82,22 @@ instance View ShowView where
|
||||
<section>
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<h2 class="text-lg font-medium">Annotations</h2>
|
||||
<a href={NewAnnotationAction { widgetId = widget.id }}
|
||||
class="text-sm text-indigo-600 hover:text-indigo-800">+ Add</a>
|
||||
<div class="flex items-center gap-2">
|
||||
{if length annotations >= 3 then [hsx|
|
||||
<form method="POST" action={DraftRequirementAction { widgetId = widget.id }} class="inline">
|
||||
<button type="submit" class="text-xs border border-indigo-300 text-indigo-700 px-2 py-1 rounded hover:bg-indigo-50">
|
||||
Draft Requirement
|
||||
</button>
|
||||
</form>
|
||||
|] else mempty}
|
||||
<form method="POST" action={SummarizeClusterAction { widgetId = widget.id }} class="inline">
|
||||
<button type="submit" class="text-xs border border-blue-300 text-blue-700 px-2 py-1 rounded hover:bg-blue-50">
|
||||
Summarize Feedback
|
||||
</button>
|
||||
</form>
|
||||
<a href={NewAnnotationAction { widgetId = widget.id }}
|
||||
class="text-sm text-indigo-600 hover:text-indigo-800">+ Add</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
{forEach rootAnnotations (renderAnnotation childrenOf)}
|
||||
|
||||
Reference in New Issue
Block a user