generated from coulomb/repo-seed
feat(P3): IHF Phase 3 complete — Governance and Decision Linkage
Implements the full governance layer: - Schema: requirements, decision_records, policy_references, implementation_change_references; requirement_candidates gets requirement_id back-reference - RequirementsController (index/show; promotion-only create) - DecisionRecordsController (CRUD + policy/impl ref management) - GovernanceDashboardAction on HubsController (AutoRefresh) - PromoteToRequirementAction + LinkToDecisionAction on candidates - Outcome immutability enforced at controller level (fill excludes outcome) - Full six-outcome vocabulary with Tailwind color roles - Integration tests for all Phase 3 paths - FrontController: registers Phase 2 missing controllers + all Phase 3 - SCOPE.md + docs/phase3-summary.md updated Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
25
Web/Controller/Requirements.hs
Normal file
25
Web/Controller/Requirements.hs
Normal file
@@ -0,0 +1,25 @@
|
||||
module Web.Controller.Requirements where
|
||||
|
||||
import Web.Types
|
||||
import Web.View.Requirements.Index
|
||||
import Web.View.Requirements.Show
|
||||
import Generated.Types
|
||||
import IHP.Prelude
|
||||
import IHP.ControllerPrelude
|
||||
|
||||
instance Controller RequirementsController where
|
||||
beforeAction = ensureIsUser
|
||||
|
||||
action RequirementsAction = do
|
||||
requirements <- query @Requirement |> orderByDesc #createdAt |> fetch
|
||||
candidates <- query @RequirementCandidate |> fetch
|
||||
render IndexView { requirements, candidates }
|
||||
|
||||
action ShowRequirementAction { requirementId } = do
|
||||
requirement <- fetch requirementId
|
||||
candidate <- fetch requirement.sourceCandidateId
|
||||
widget <- fetch candidate.sourceWidgetId
|
||||
mDecision <- query @DecisionRecord
|
||||
|> filterWhere (#requirementId, Just requirementId)
|
||||
|> fetchOneOrNothing
|
||||
render ShowView { requirement, candidate, widget, mDecision }
|
||||
Reference in New Issue
Block a user