# Requirements Checklist — Inventory Dependencies Graph (042) ## Scope - [ ] This checklist applies only to Spec 042 (Inventory Dependencies Graph). - [ ] MVP scope: show **direct** inbound/outbound edges only (no depth>1 traversal / transitive blast radius). ## Constitution Gates - [ ] Inventory-first: edges derived from last-observed inventory data (no snapshot/backup side effects) - [ ] Read/write separation: no Intune write paths introduced - [ ] Single contract path to Graph: Graph access only via GraphClientInterface + contracts (if used) - [ ] Tenant isolation: all reads/writes tenant-scoped - [ ] Automation is idempotent & observable: unique key + upsert + run records + stable error codes - [ ] Data minimization & safe logging: no secrets/tokens; avoid storing raw payloads outside allowed fields - [ ] No new tables for warnings; warnings persist on InventorySyncRun.error_context.warnings[] ## Functional Requirements Coverage - [ ] FR-001 Relationship taxonomy exists and is testable (labels, directionality, descriptions) - [ ] FR-002 Dependency edges stored in `inventory_links` with unique key (idempotent upsert) - [ ] FR-003 Inbound/outbound query services tenant-scoped, limited (MVP: limit-only unless pagination is explicitly implemented) - [ ] FR-004 Missing prerequisites represented as `target_type='missing'` with safe metadata + UI badge/tooltip - [ ] FR-005 Relationship-type filtering available in UI (single-select, default “All”) ## Non-Functional Requirements Coverage - [ ] NFR-001 Idempotency: re-running extraction does not create duplicates; updates metadata deterministically - [ ] NFR-002 Unknown reference shapes handled gracefully: warning recorded in run metadata; does not fail sync; no edge created for unsupported types ## Tests (Pest) - [ ] Extraction determinism + unique key (re-run equality) - [ ] Missing edges show “Missing” badge and safe tooltip - [ ] 50-edge limit enforced and truncation behavior is observable (if specified) - [ ] Tenant isolation for queries and UI - [ ] UI smoke: relationship-type filter limits visible edges