#region DashboardScenarioModel.Traceability [C:3] [TYPE ADR] [SEMANTICS traceability,rtm,scenario] @defgroup Trace Matrix Requirements → Screen+State → Model → API → Contract → Task → Test for feature 038. ## Applicability - **Feature type**: Fullstack (backend compiler/validator/resolver core + thin UI preview consumed by 039 + agent tools) - **UI surface**: Yes — scenario graph preview, coverage, resolution, pack states (DTOs supplied to 039) - **API surface**: Yes — 7 operations in `contracts/openapi.yaml` ## Traceability Matrix | Story / Req | UX Screen + State | Screen Model | API operationId | Contract | Backend Task | Frontend Task | Test | |------------|-------------------|-------------|-----------------|----------|-------------|--------------|------| | US1: Build Scenario Graph | preview (loading → loaded) | N/A — DTO only | compileDashboardScenario | ScenarioGraph.Compiler.Compile | T009–T012 | N/A — UI in 039 | Test.Scenario.Compiler | | AGSCN-FR-001/002/009 | preview (loaded) | N/A — DTO only | compileDashboardScenario | ScenarioGraph.Compiler.Compile | T005–T012 | N/A — UI in 039 | Test.Scenario.Schema | | US2: Validate Safety | preview (blocked) | N/A — DTO only | validateDashboardScenario | ScenarioGraph.Validator.Validate | T013–T017 | N/A — UI in 039 | Test.Scenario.Validator | | AGSCN-FR-004/005 | preview (blocked) | N/A — DTO only | validateDashboardScenario | ScenarioGraph.Validator.Validate | T014–T016 | N/A — UI in 039 | Test.Scenario.Validator.Edge | | US3: Checklist Coverage | preview (coverage panel) | N/A — DTO only | compileDashboardScenario | ScenarioGraph.CapabilityMapper.Map | T006–T008 | N/A — UI in 039 | Test.Scenario.Capability | | AGSCN-FR-006 | preview (coverage panel) | N/A — DTO only | compileDashboardScenario | ScenarioGraph.Catalog.Load | T001–T004 | N/A — UI in 039 | Test.Scenario.Catalog | | US4: Parameters/Checkpoints | preview (resolution) | N/A — DTO only | resolveDashboardScenario | ScenarioGraph.Resolver.Resolve | T022–T025 | N/A — UI in 039 | Test.Scenario.Resolver | | AGSCN-FR-007/008 | preview (resolution) | N/A — DTO only | resolveDashboardScenario + compile | ScenarioGraph.Serializer.Canonical | T018–T021 | N/A — UI in 039 | Test.Scenario.Serializer | | US5: Capture/VLM/Disposition | preview (vlm findings) | N/A — DTO only | captureScenarioScreenshot, analyzeScenarioScreenshot, disposeVlmFindings | ScenarioGraph.Capture.Dispatch, ScenarioGraph.Vlm.Analyze, ScenarioGraph.Human.Disposition | T037–T047 | N/A — UI in 039 | Test.Scenario.Capture, Test.Scenario.Vlm, Test.Scenario.Disposition | | AGSCN-FR-010 | preview (capture) | N/A — DTO only | captureScenarioScreenshot | ScenarioGraph.Capture.Dispatch | T037–T039 | N/A — UI in 039 | Test.Scenario.Capture | | AGSCN-FR-011 | preview (vlm) | N/A — DTO only | analyzeScenarioScreenshot | ScenarioGraph.Vlm.Analyze | T040–T042 | N/A — UI in 039 | Test.Scenario.Vlm | | AGSCN-FR-012 | preview (disposition) | N/A — DTO only | disposeVlmFindings | ScenarioGraph.Human.Disposition | T043–T044 | N/A — UI in 039 | Test.Scenario.Disposition | | Draft pack (pack compiler) | preview (preview_only / save_eligible) | N/A — DTO only | compileScenarioDraftPack | ScenarioGraph.PackCompiler.Generate | T026–T030 | N/A — UI in 039 | Test.Scenario.Pack | | Edge E6 (409 stale) | preview (stale409 modal) | N/A — DTO only | resolveDashboardScenario | ScenarioGraph.Resolver.Resolve | T023 | N/A — UI in 039 | Test.Scenario.Resolver.Edge | | Edge E9 (429) | preview (rate limited) | N/A — DTO only | any scenario op | ScenarioGraph.Api | T031–T032 | N/A — UI in 039 | Test.Api.Scenarios.Edge | | Edge E11 (malformed VLM) | preview (vlm inconclusive) | N/A — DTO only | analyzeScenarioScreenshot | ScenarioGraph.Vlm.Analyze | T040 | N/A — UI in 039 | Test.Scenario.Vlm.Edge | | Edge E13 (injection) | preview (pack blocked) | N/A — DTO only | compileScenarioDraftPack | ScenarioGraph.PackCompiler.Generate | T026, T034 | N/A — UI in 039 | Test.Scenario.Pack.Security | | NFR: determinism | N/A — infra | N/A — infra | N/A — no API | ScenarioGraph.Compiler.Compile | T012, T021 | N/A — backend-only | Test.Scenario.Serializer | | NFR: RBAC | N/A — infra | N/A — infra | N/A — security | ScenarioGraph.Api | T032 | N/A — backend-only | Test.Api.Scenarios.Rbac | ### N/A Rationale Key - **N/A — UI in 039**: 038 renders no UI; it supplies DTOs consumed by feature 039 preview - **N/A — DTO only**: Screen Model pattern not needed; state lives in 039 components bound to 038 DTOs - **N/A — infra**: Shared infrastructure, not user-facing - **N/A — no API**: Determinism/RBAC are cross-cutting invariants, not endpoints - **N/A — backend-only**: No frontend task for backend-only work ## Impact Analysis Quick Reference | If you change... | These fixtures verify it | These tests verify it | These screens depend | |-----------------|------------------------|----------------------|---------------------| | `ScenarioGraph.Compiler.Compile` | FX_Scenario.Valid, FX_Scenario.Shuffled | Test.Scenario.Compiler, Test.Scenario.Serializer | preview (039) | | `ScenarioGraph.Validator.Validate` | FX_Scenario.Cycle, FX_Scenario.MissingRef, FX_Scenario.RawBaseline | Test.Scenario.Validator | preview (039) | | `ScenarioGraph.PackCompiler.Generate` | FX_Scenario.PreviewOnly, FX_Scenario.InjectedCode | Test.Scenario.Pack | preview (039) | | `ScenarioGraph.Vlm.Analyze` | FX_Scenario.VlmTyped, FX_Scenario.VlmStalePrompt | Test.Scenario.Vlm | preview (039) | | `contracts/openapi.yaml` | FX_Api.Compile.* | Test.Api.Scenarios | preview (039) | | `ScenarioGraph.Catalog.Load` | FX_Scenario.Catalog19 | Test.Scenario.Catalog | preview coverage (039) | ## Coverage Gate - [x] Every user story (US1–US5) has at least one row - [x] Every functional requirement (AGSCN-FR-001..012) has at least one row - [x] Every API endpoint has at least one row for success AND at least one row for an error state (E6 409, E9 429, E11, E13) - [x] Every Screen Model column is N/A with rationale (038 is DTO-only; 039 owns rendering) - [x] Every N/A cell carries a rationale from the key above - [x] Every contract referenced appears in `contracts/modules.md` - [x] Every task ID (Txxx) appears in `tasks.md` - [x] Impact table covers every contract with downstream dependents #endregion DashboardScenarioModel.Traceability