Government vertical — professional tutorial¶
Released in FCC v1.2.0. You are integrating FCC into a production Government workflow with real compliance obligations. This tutorial covers the EU AI Act risk classification path, the vertical_risk_profiles override layer, and how to wire a persona into an existing event-bus + observability stack.
The Government pack in one paragraph¶
The government vertical pack (at src/fcc/data/verticals/government.yaml) contains 6 personas for open data stewardship (DCAT-US 3.0), NIEM information exchange, FedRAMP compliance, privacy impact assessment, civic service research, and zero-trust identity architecture. Headline compliance frameworks: DCAT-US 3.0, NIEM 6.0, FedRAMP Rev 5, NIST SP 800-53 Rev 5, OMB M-22-09.
Focus persona: FRP — FedRAMP Compliance Lead¶
We'll anchor this tutorial on FRP, because it's the one most relevant to the professional audience in the Government domain.
from fcc.verticals.registry import VerticalRegistry
reg = VerticalRegistry.from_builtin()
pack = reg.get("government")
persona = next(p for p in pack.personas if p.id == "FRP")
print(persona.name)
print(persona.risk_category or "minimal")
riscear = persona.riscear or {}
print("Archetype:", riscear.get("archetype"))
print("Role:", riscear.get("role"))
Wiring FRP into a production pipeline¶
Production FCC deployments typically have three concerns when adopting a vertical persona: (1) risk classification, (2) event-bus integration, (3) observability.
1. Risk classification¶
Use the vertical_risk_profiles.yaml override path so risk categories are data-driven rather than inferred from role descriptions:
from fcc.compliance.classifier import AIActClassifier
classifier = AIActClassifier()
persona = pack.get_persona("FRP") if hasattr(pack, "get_persona") else next(p for p in pack.personas if p.id == "FRP")
# Must supply the vertical_domain so the override activates:
risk = classifier.classify_persona(persona, vertical_domain="government")
If you disagree with the shipped classification, override it in your own
vertical_risk_profiles.yaml placed earlier on the import path — the file
is a plain YAML dict, trivial to fork.
2. Event-bus integration¶
Subscribe to persona.action.completed events filtered by the FRP ID:
from fcc.messaging.bus import EventBus
from fcc.messaging.events import EventType
bus = EventBus()
bus.subscribe_filter(
event_types={EventType.ACTION_COMPLETED},
filter_fn=lambda e: e.payload.get("persona_id") == "FRP",
handler=lambda e: audit_log.append(e),
)
3. Observability¶
Add a traced span around every FRP action so you can trace latency through OpenTelemetry:
from fcc.observability.tracing import get_tracer
tracer = get_tracer("fcc.government")
with tracer.span(f"FRP.run", attributes={"domain": "government"}):
result = action_engine.run(persona_id="FRP", ...)
Production checklist¶
- Risk category override present in
vertical_risk_profiles.yaml. - Event-bus subscribers for audit trail.
- Observability spans + metrics exporters configured.
- CI runs
pytest tests/test_verticals.py tests/test_compliance_classifier.py. - Model cards regenerated and committed (
fcc model-card generate --all).
Verify what you did¶
Run the vertical test suite to make sure your changes didn't break anything:
All professional-path steps in this tutorial leave your working tree unchanged — the pack YAML is read-only from your perspective. The only state that accumulates is in _output/ (scenario run traces) and docs/model-cards/ (if you regenerated cards).
Next steps¶
- Notebook 26 — Vertical packs tour — same flow in an executable notebook.
- Notebook 27 — Vertical packs deep dive — longer walkthrough of healthcare as an exemplar.
- Guidebook ch25 — Industry verticals — full authoring guide for your own pack.
- Book 3 ch11 — Vertical packs at enterprise scale — architectural view.
- Streamlit vertical_explorer — interactive browser for all 6 packs.
- Research note for government — cited standards sources behind the persona selection.