Add prototype/openapi/validate/resume commands, wire edge-failure matrix into UX, enforce traceability + validation gates, mandate C4/C5 belief-runtime verification. Rework 038-dashboard-scenario-model artifacts: applicability, structured edge cases, 24-class UX state matrix, interactive HTML prototype, standardized OpenAPI 3.1 (7 ops), full RTM with coverage gate, 56-task backlog, and PASS validation report.
6.3 KiB
6.3 KiB
#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
- Every user story (US1–US5) has at least one row
- Every functional requirement (AGSCN-FR-001..012) has at least one row
- 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)
- Every Screen Model column is N/A with rationale (038 is DTO-only; 039 owns rendering)
- Every N/A cell carries a rationale from the key above
- Every contract referenced appears in
contracts/modules.md - Every task ID (Txxx) appears in
tasks.md - Impact table covers every contract with downstream dependents
#endregion DashboardScenarioModel.Traceability