module Web.View.StaticPages.Tutorial where import Web.View.Prelude data TutorialView = TutorialView instance View TutorialView where html TutorialView = [hsx|
How IHF works from a developer perspective — widget lifecycle, governance flow, outcome loop.
A Hub is a bounded domain of responsibility (e.g. Dev Hub, Ops Hub, Fin Hub).
Hubs own Widgets — the smallest semantically governable interaction unit.
Each widget has a widget_id (stable UUID),
a widget_type (from the registry),
and a version history.
The envelope injects data-widget-id and data-view-context attributes,
enabling client-side event capture without coupling to implementation.
When a user or agent interacts with a widget, an InteractionEvent is recorded —
clicked, viewed, submitted, dismissed, etc. Events are append-only:
a PostgreSQL trigger prevents UPDATE and DELETE on the interaction_events table.
Events flow into Annotations (human/agent commentary with category) and eventually surface as RequirementCandidates.
RequirementCandidates go through a triage lifecycle: open → triaged → reviewed → promoted or dismissed. Phase 5 agents can draft Requirements from widget clusters using the Anthropic API. Promoted candidates become Requirements, which are linked to DecisionRecords.
A DecisionRecord links to a DeploymentRecord. After deployment, OutcomeSignals are recorded (also append-only) and evaluated via ChangeEvaluations. Outcome feedback flows back to the DecisionRecord, closing the governance loop.
Phase 12 layers a learning engine on top of the governance loop:
Multiple hubs interact via routing rules, stewardship roles, and federated policy overlays. Cross-hub propagation patterns are detected automatically. The GAAF compliance layer enforces type registry discipline and contract stability across hub boundaries.