TenantAtlas/specs/042-inventory-dependencies-graph/checklists/requirements.md
2026-01-10 00:17:15 +01:00

2.1 KiB

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