Files
govoplan-portal/docs/INTERFACE_PATTERN_MIGRATION.md
T

28 lines
1.8 KiB
Markdown

# Portal Interface Pattern Migration
Portal is a public-service-style directory for authenticated institutional
users. Services owns definitions, Policy/provider capabilities own availability,
and Cases, Forms Runtime, or Workflow Engine owns the launch effect. Portal
does not import those modules or infer their state.
| Surface | Task and archetype | Consequence and state contract |
| --- | --- | --- |
| `/portal` toolbar | Find and filter services | Search and the unavailable-service toggle affect only the directory result. Counts are announced as the result changes. |
| Service directory | Public service/entry catalogue | Loading, empty, failed, available, unavailable, and capability-unknown states remain distinct. Only discoverable service metadata is rendered. |
| Availability blocker | Explained disabled action | Open remains in its stable action position. The blocker states why launch is unavailable, what must happen, the responsible actor, and the destination. |
| Open service | Consequential handoff | Portal re-evaluates the exact service revision with a replay-safe request, then hands off to the provider-owned route. It never reports success without a destination. |
The directory uses Core buttons, toggle, status, loading, alerts, scrolling,
blocker explanation, guarded navigation, and documentation help. Availability
is expressed in text as well as color. The responsive toolbar stacks before the
service list and every action remains keyboard-operable. Optional owner modules
remain capability-based and an unavailable provider does not become a broken
link.
Verification:
- `npm run test:interface-pattern`
- Portal service-directory and manifest tests
- the Core TypeScript graph, structural localization audit, theme check, module
permutations, and full-product bundle budget