# Tasks: Graph Contracts Registry Completeness

**Input**: Design documents from `/specs/095-graph-contracts-registry-completeness/`
**Prerequisites**: plan.md, spec.md, research.md, data-model.md, contracts/

**Tests**: Required (Pest). Acceptance evidence is automated tests only.

---

## Phase 1: Setup (Shared Infrastructure)

**Purpose**: Ensure the feature workspace and reference docs are in place.

- [X] T001 Confirm spec artifacts are present and up to date in specs/095-graph-contracts-registry-completeness/spec.md and specs/095-graph-contracts-registry-completeness/plan.md
- [X] T002 [P] Review current contract registry structure in config/graph_contracts.php
- [X] T003 [P] Review current contract helper patterns in app/Services/Graph/GraphContractRegistry.php
- [X] T021 If any additional unregistered Graph resources are discovered during review/implementation, record them in specs/095-graph-contracts-registry-completeness/research.md under a “Follow-ups (out of scope)” section and do not expand this spec’s implementation scope

---

## Phase 2: Foundational (Blocking Prerequisites)

**Purpose**: Establish baseline patterns used by subsequent story work.

- [X] T004 Review existing contract coverage test patterns in tests/Feature/Graph/GraphContractRegistryCoverageSpec081Test.php

**Checkpoint**: Foundation ready — user story work can begin.

---

## Phase 3: User Story 1 — Drift coverage is complete (Priority: P1) 🎯 MVP

**Goal**: The contract registry explicitly models the four required resources and the template subresource.

**Independent Test**: A single Pest test file can assert the registry contains the required resources and subresource template.

- [X] T005 [P] [US1] Create a new coverage test file in tests/Feature/Graph/GraphContractRegistryCoverageSpec095Test.php
- [X] T006 [US1] Add contract type entries for the four required resources in config/graph_contracts.php
- [X] T007 [US1] Add a subresource template for “Configuration Policy Template → setting templates” in config/graph_contracts.php
- [X] T008 [US1] Implement registry assertions for the four resources + subresource template in tests/Feature/Graph/GraphContractRegistryCoverageSpec095Test.php
- [X] T009 [US1] Verify the MVP by running the focused test command documented in specs/095-graph-contracts-registry-completeness/quickstart.md

**Checkpoint**: US1 complete when the new coverage test passes and the registry contains the four resources + template subresource.

---

## Phase 4: User Story 2 — Graph calls are registry-backed (Priority: P2)

**Goal**: The five in-scope call sites resolve paths via the contract registry (no hardcoded endpoint substrings for these resources).

**Independent Test**: A regression guard can fail if hardcoded endpoint substrings are reintroduced in the five in-scope files.

- [X] T010 [US2] Add/adjust registry path helpers needed by call sites in app/Services/Graph/GraphContractRegistry.php
- [X] T011 [P] [US2] Refactor Graph template calls to use registry-backed paths in app/Services/Intune/ConfigurationPolicyTemplateResolver.php
- [X] T012 [P] [US2] Refactor settings catalog definition calls to use registry-backed paths in app/Services/Intune/SettingsCatalogDefinitionResolver.php
- [X] T013 [P] [US2] Refactor settings catalog category calls to use registry-backed paths in app/Services/Intune/SettingsCatalogCategoryResolver.php
- [X] T014 [P] [US2] Refactor role assignment create/update/list calls to use registry-backed paths in app/Services/Intune/RbacOnboardingService.php
- [X] T015 [P] [US2] Refactor role assignment health/read calls to use registry-backed paths in app/Services/Intune/RbacHealthService.php

**Checkpoint**: US2 complete when all five call sites use registry-backed paths for the four governed resources.

---

## Phase 5: User Story 3 — Regressions are prevented (Priority: P3)

**Goal**: Automated tests fail if registry entries are removed or if call sites revert to ad-hoc endpoint strings.

**Independent Test**: Pest tests fail within a single run for either (a) missing registry entries or (b) hardcoded endpoints in in-scope files.

- [X] T016 [P] [US3] Add string-regression guard assertions for the five in-scope files in tests/Feature/Graph/GraphContractRegistryCoverageSpec095Test.php
- [X] T017 [US3] Ensure regression guard failure messages identify the missing resource or offending file in tests/Feature/Graph/GraphContractRegistryCoverageSpec095Test.php
- [X] T018 [US3] Run the acceptance tests (focused) documented in specs/095-graph-contracts-registry-completeness/quickstart.md

**Checkpoint**: US3 complete when tests fail on simulated regressions and pass on the final implementation.

---

## Phase 6: Polish & Cross-Cutting Concerns

- [X] T019 [P] Apply formatting to changed files using `vendor/bin/sail bin pint --dirty` (config/graph_contracts.php and app/Services/Graph/GraphContractRegistry.php)
- [X] T020 Run a targeted regression suite that includes the new coverage test and any directly impacted existing tests (tests/Feature/Graph/GraphContractRegistryCoverageSpec095Test.php and tests/Feature/SettingsCatalogDefinitionResolverTest.php)

---

## Dependencies & Execution Order

### Dependency Graph (User Story Order)

```mermaid
graph LR
  Setup[Phase 1: Setup] --> Foundational[Phase 2: Foundational]
  Foundational --> US1[US1: Registry coverage]
  US1 --> US2[US2: Call sites registry-backed]
  US2 --> US3[US3: Regression guards]
  US3 --> Polish[Phase 6: Polish]
```

### User Story Dependencies

- US1 has no dependencies beyond Foundational.
- US2 depends on US1 (registry entries must exist before call sites can reference them).
- US3 depends on US1 and US2 (guards validate the final state).

---

## Parallel Execution Examples

### User Story 1

- Can be split as:
  - T005 (create test skeleton) can proceed in parallel with T006/T007 planning, but assertions should be written before implementation.

### User Story 2

- After T010 is complete, these can run in parallel (different files):
  - T011, T012, T013, T014, T015

### User Story 3

- After US2 is complete, T016 can be implemented independently and validated via T018.

---

## Implementation Strategy

### MVP First (US1 only)

1. Complete Phase 1–2
2. Complete US1 (T005–T009)
3. Stop and validate via the focused test

### Incremental Delivery

- US1 → US2 → US3, running acceptance tests after each checkpoint.
