4+1 Scenarios View¶
The Scenarios View is Kruchten's +1. Its job is to validate the other four views against concrete workflows: a scenario that cannot be told through the logical, process, development, and physical views together is a signal that one of those views is missing something. This page walks four representative scenarios — author a persona, run a compliance audit, add a vocabulary plugin, and federate a query — and at the end maps each scenario back to the views it exercises.
Scenario 1: author a new persona¶
A new persona author runs fcc add-persona from the CLI, fills in the
R.I.S.C.E.A.R. prompts, and expects the resulting YAML to pass
validation and show up in dashboards, docs, and model cards without
further action.
Figure 1 shows the actors and subsystems involved.
@startuml
left to right direction
actor "Persona Author" as PA
actor "CI validator" as CI
rectangle "FCC framework" {
usecase "fcc add-persona (CLI)" as UC1
usecase "Fill RISCEAR prompts" as UC2
usecase "Write YAML under\nsrc/fcc/data/personas/" as UC3
usecase "FCCValidator.from_registry\nagainst JSON schema" as UC4
usecase "PersonaRegistry.merge" as UC5
usecase "Regenerate docs-as-code" as UC6
usecase "Regenerate model card" as UC7
}
PA --> UC1
UC1 ..> UC2 : includes
UC2 ..> UC3 : includes
UC3 ..> UC4 : triggers
UC4 ..> UC5 : if valid
UC5 ..> UC6 : cascade
UC5 ..> UC7 : cascade
CI --> UC4 : on PR
@enduml
This scenario exercises the Logical View (PersonaSpec + RISCEARSpec shape), the Development View (CLI to registry to doc generator), and the Process View (validation events on the bus).
Scenario 2: run a compliance audit¶
An operator runs fcc compliance-audit to check the current persona
catalog against the EU AI Act (256+ requirements) and NIST AI RMF (29
subcategories). The command emits a ComplianceReport JSON plus a
dashboard-ready summary.
Figure 2 is the sequence of the audit run.
sequenceDiagram
participant Op as Operator
participant CLI as fcc compliance-audit
participant Auditor as ComplianceAuditor
participant PR as PersonaRegistry
participant RR as RequirementRegistry
participant Dash as Compliance Dashboard
Op->>CLI: fcc compliance-audit --regulation eu_ai_act
CLI->>Auditor: audit(persona_registry)
Auditor->>PR: iter_personas()
PR-->>Auditor: 147 personas
Auditor->>RR: load(eu_ai_act)
RR-->>Auditor: 256+ requirements
loop per persona
Auditor->>Auditor: classify(persona) → risk
Auditor->>Auditor: evaluate applicable gates
Auditor-->>CLI: emit compliance.persona_audited
end
Auditor-->>CLI: ComplianceReport
CLI->>Dash: render_dashboard(report)
CLI-->>Op: compliance_report.json + summary
This scenario exercises the Logical View (compliance classes), the Process View (the audit activity), and the Physical View (the dashboard running in the Streamlit container).
Scenario 3: add a vocabulary plugin¶
A sibling project like Athenium or Mnemosyne publishes a PyPI package
declaring an fcc.vocabulary_providers entry point. The FCC user
adds the package to their environment and expects their next
fcc federate resolve call to pick up the new mappings.
Figure 3 shows the actors and the plugin discovery path.
@startuml
left to right direction
actor "Plugin author\n(Athenium, Mnemosyne, …)" as PA
actor "FCC user" as FU
rectangle "Plugin package" {
usecase "Implement VocabularyProviderPlugin" as UC1
usecase "Declare fcc.vocabulary_providers\nentry point" as UC2
usecase "pip publish" as UC3
}
rectangle "FCC framework" {
usecase "pip install plugin-pkg" as UC4
usecase "PluginRegistry.load_all" as UC5
usecase "VocabularyMappingLoader.verify\nagainst packaged schema" as UC6
usecase "Mappings available to\nEntityResolver, RAG, KG" as UC7
}
PA --> UC1
UC1 --> UC2
UC2 --> UC3
FU --> UC4
UC4 --> UC5
UC5 --> UC6
UC6 --> UC7
@enduml
This scenario exercises the Logical View (VocabularyProviderPlugin
ABC), the Development View (entry-point wiring), and the Physical
View (the plugin lives in a separate wheel).
Scenario 4: federate a query across projects¶
A consumer (typically another persona running over MCP or A2A) asks
the EntityResolver for the canonical form of a vocabulary term. The
resolver walks 19 registered namespaces, collects candidates, and
returns the highest-confidence match along with provenance.
Figure 4 traces the federated query end-to-end.
sequenceDiagram
participant Consumer
participant ER as EntityResolver
participant NS as NamespaceRegistry
participant VM as VocabularyMappingStore
participant CT as ChangeTracker
participant Bus as EventBus
Consumer->>ER: resolve(term, hint=nil)
ER->>NS: list_namespaces()
NS-->>ER: 19 namespaces
loop per namespace
ER->>VM: lookup(namespace, term)
VM-->>ER: 0..n candidates
end
ER->>ER: rank candidates by confidence
ER->>CT: record_resolution_event
ER->>Bus: publish(federation.query_resolved)
ER-->>Consumer: CanonicalEntity(+provenance)
This scenario exercises the Logical View (EntityResolver,
NamespaceRegistry), the Process View (the event emission), the
Development View (the federation/ subpackage boundary), and the
Physical View (candidates may live in sibling project endpoints from
the ecosystem port map).
Mapping back to the other four views¶
| Scenario | Logical | Process | Development | Physical |
|---|---|---|---|---|
| Author a new persona | PersonaSpec, RISCEARSpec |
CLI to loader to events | CLI under scaffold/, YAML under data/personas/ |
Local dev (no containers) |
| Run a compliance audit | ComplianceAuditor, RequirementRegistry |
Activity diagram | compliance/ + dashboard/ |
Streamlit container |
| Add a vocabulary plugin | VocabularyProviderPlugin ABC |
Entry-point load at import | Plugin wheel, entry points | External PyPI package |
| Federate a query | EntityResolver, NamespaceRegistry |
Sequence diagram | federation/ subpackage |
19-project port map |
Every row validates at least three views; every view is exercised by at least two scenarios. That is the Scenarios-View job: proving the other four views cover the workflows that matter.
How to use this page¶
When adding a new capability, add a scenario here first. If writing the scenario exposes a gap in one of the other views, fix that view before you ship the capability — the Scenarios View is the integration test of the architecture docs themselves.
When deprecating a capability, remove its scenario and confirm that no other scenario relied on it transitively. A scenario with no matching capability in one of the other four views is a documentation drift signal.
See also¶
src/fcc/scaffold/cli.py— CLI entry pointssrc/fcc/compliance/auditor.py:28—ComplianceAuditor.auditsrc/fcc/plugins/base.py—VocabularyProviderPluginABCsrc/fcc/federation/resolver.py—EntityResolver- Logical View
- Process View
- Development View
- Physical View
- Context Diagram