Plan: Per-Program Determine-Input Requirements Coverage (epic &63)
On this page
Implements ADR-034 Decision 6, the enforcement spine of the per-program determination context-mapping contract (epic &63, #859). A fourth machine-checkable axis in the ADR-031 policy-coverage family, alongside action-coverage and scenario-coverage.
Status
| MR | Description | Status |
|---|---|---|
MR1 (manifest + gate, advisory) |
Per-program input-requirements manifests at |
Done (2026-06-15) — |
MR2+ (burndown via the mapper slices) |
Each later ADR-034 mapper slice flips fields from a tracked gap to satisfied: #856 (Medicaid resources/medical), #857 (CAPS mapper), #769 (WIC mapper), #858 (untracked worker-facts via the ADR-027 corpus), #860 (per-member subject), #861 (frequency normalization), #862 (export CAPS/WIC schemas → uniform drift-check). When the ADR-027 corpus lands (epic &56) the gate flips to blocking per ADR-034 Decision 2. |
Not started |
Design — decisions
-
Manifest is data, schema is code. Schema lives in
canopy-policy(xtask-only crate, zero runtime dependents — same placement as the citation + action schemas); data lives undercompliance/input-requirements/per program, sibling to the other ADR-031 compliance TOMLs. Mirrorsaction-coverageexactly. -
source_classis the satisfiability taxonomy.request/persons/policy/inference/derivedare satisfiable today (the data source exists; only the per-program mapper is unbuilt — that is the epic).worker-fact(needs the ADR-027 corpus, epic &56) andrestricted(ADR-004 SSA/Medicare, out of mapper scope per Decision 10) are gaps — each policy-material gap field must carry a tracking issue. The gap count is the burndown each mapper slice shrinks. -
Drift cross-check where the contract is exported. snap/tanf/medicaid export
ApplicationContextto their snapshots, so the gate enforces that the manifest field-set and required-ness match the real contract — a new required determine-input that the orchestrator cannot supply is caught here, not as an opaque dispatch 422. CAPS/WIC determine schemas are internal (not exported); their drift-check is skipped and tracked by #862, with manifest completeness hand-authored from the contract struct. -
Advisory first, blocking post-corpus. Per ADR-034 Decision 2 the satisfiability invariant is only fully enforceable against the worker-authored fact corpus (post-UAT, epic &56); pre-corpus the gate checks against today’s persons reads + named inference shims and runs advisory, mirroring how
policy driftstays advisory.
Verification
-
Unit tests for the gate (clean manifest → satisfied; ungapped material gap → finding; drift missing/stale/requirement-mismatch → findings; non-exported requires export_issue) following the action-coverage fixture pattern.
-
Live:
cargo xtask policy input-coverageagainst the real committed snapshots — clean; mutate a manifest (drop a field / a gap_issue) → finding, exit 1; restore → clean.