Coverage Matrix
On this page
Risk-coverage matrix (method, path) × (happy/sad/evil/concurrency/replay/fault) across all 8 CRAIG services.
Generated by cargo xtask coverage-matrix against the live devstack.
Report-only — no enforcement gate, no CI hook.
Tagging convention
Tests opt into the matrix in two ways:
-
Name suffix on the test fn:
_happy/_sad/_evil(per Testing Reference (CRAIG)). -
Directory prefix under
tests/:concurrency/,recovery/,fault/,security/.
Tests under tests/api/ whose fn name does not end in one of the three suffixes are listed under "Untagged tests" at the bottom of this report — a soft lint that prompts contributors to add a suffix and promote the test into the matrix.
Route matching
For each tagged test, the matrix credits routes via two parallel signals:
-
Literal URL strings in the test body — every
"/v1/…"literal that path-matches an OpenAPI route. Originated with the matrix in plantest-framework-hardening.adoc§D13. -
Typed-client method calls (#310) — every
client.<method>(…)invocation whose method name matches an entry inxtask/route-to-client-method.toml. The mapping is auto-generated bycargo xtask coverage-matrix-mapping, which parsescrates/craig-test-lib/src/clients/*/.rsand resolves each typed method to its(service, method, path)viaself.inner.<verb>("/path", …)body matching +TypedClient::base_urlservice pinning inharness.rs. Re-run the mapping generator after typed-client churn so the matrix stays in sync.
The typed-call signal is what surfaces the test surface that CRAIG actually uses — most tests hold no literal URL string and call typed clients only. Test pinning by file path (services/<svc>/tests/…) disambiguates same-named methods across clients.
Regenerating
On a healthy devstack:
cargo xtask dev start
cargo xtask coverage-matrix-mapping # refresh typed-call mapping (#310)
cargo xtask coverage-matrix
# Output: target/coverage-matrix.md
On a clean tree without devstack, replay a cached spec at target/openapi-cache.json:
cargo xtask coverage-matrix --use-cache
Baseline (committed)
The baseline below is the current snapshot — refreshed when the typed-call signal lands or the route surface shifts materially. Originally a one-shot snapshot per test-framework-hardening.adoc §D13.6; #310 widened the signal so the baseline now reflects both literal-URL and typed-call coverage. A future plan revisits "live coverage matrix in CI" once the foundation has bedded in.
# CRAIG Coverage Matrix
Generated: 2026-06-04T15:14:02Z
Routes: 219 endpoints across 8 services
Risk axes: happy / sad / evil / concurrency / replay / fault
**Risk-coverage score: 11 / 1314 cells (0.8%)**
| Service | Method | Path | happy | sad | evil | conc | replay | fault |
|---|---|---|---|---|---|---|---|---|
| craig-cases | DELETE | /v1/cases/cases/{case_id}/contacts/{contact_id}/attachments/{att_id} | | | | | | |
| craig-cases | DELETE | /v1/cases/contacts/{id} | | | | | | |
| craig-cases | DELETE | /v1/cases/court-orders/{id} | | | | | | |
| craig-cases | DELETE | /v1/cases/reports/{id}/attachments/{att_id} | | | | | | |
| craig-cases | DELETE | /v1/cases/reports/{id}/person-links/{link_id} | | | | | | |
| craig-cases | DELETE | /v1/cases/tasks/{id} | | | | | | |
| craig-cases | GET | /v1/cases/cases | | | | | | |
| craig-cases | GET | /v1/cases/cases/{case_id}/contacts/{contact_id}/attachments | | | | | | |
| craig-cases | GET | /v1/cases/cases/{case_id}/contacts/{contact_id}/attachments/{att_id} | | | | | | |
| craig-cases | GET | /v1/cases/cases/{case_id}/court-orders/{order_id}/document | | | | | | |
| craig-cases | GET | /v1/cases/cases/{id} | | | | | | |
| craig-cases | GET | /v1/cases/cases/{id}/contacts | | | | | | |
| craig-cases | GET | /v1/cases/cases/{id}/court-orders | | | | | | |
| craig-cases | GET | /v1/cases/cases/{id}/household | | | | | | |
| craig-cases | GET | /v1/cases/cases/{id}/plans | | | | | | |
| craig-cases | GET | /v1/cases/contacts/{id} | | | | | | |
| craig-cases | GET | /v1/cases/court-orders/{id} | | | | | | |
| craig-cases | GET | /v1/cases/investigations | | | | | | |
| craig-cases | GET | /v1/cases/investigations/{id} | | | | | | |
| craig-cases | GET | /v1/cases/persons | | | | | | |
| craig-cases | GET | /v1/cases/persons/{id} | | | | | | |
| craig-cases | GET | /v1/cases/plans/{id}/tasks | | | | | | |
| craig-cases | GET | /v1/cases/referrals | | | | | | |
| craig-cases | GET | /v1/cases/referrals/{id} | | | | | | |
| craig-cases | GET | /v1/cases/reports | | | | | | |
| craig-cases | GET | /v1/cases/reports/{id} | | | | | | |
| craig-cases | GET | /v1/cases/reports/{id}/attachments | | | | | | |
| craig-cases | GET | /v1/cases/reports/{id}/attachments/{att_id}/download | | | | | | |
| craig-cases | GET | /v1/cases/reports/{id}/decisions | | | | | | |
| craig-cases | GET | /v1/cases/reports/{id}/person-suggestions | | | | | | |
| craig-cases | GET | /v1/cases/reports/{id}/screening-decisions/{decision_id}/follow-ups | | | | | | |
| craig-cases | GET | /v1/cases/tasks/{id} | | | | | | |
| craig-cases | POST | /v1/cases/batch-lookup | | | | | | |
| craig-cases | POST | /v1/cases/cases | | | ✓ | | | |
| craig-cases | POST | /v1/cases/cases/{case_id}/contacts/{contact_id}/attachments | | | | | | |
| craig-cases | POST | /v1/cases/cases/{case_id}/court-orders/{order_id}/document | | | | | | |
| craig-cases | POST | /v1/cases/cases/{id}/contacts | | | | | | |
| craig-cases | POST | /v1/cases/cases/{id}/court-orders | | | | | | |
| craig-cases | POST | /v1/cases/cases/{id}/household | | | | | | |
| craig-cases | POST | /v1/cases/cases/{id}/plans | | | | | | |
| craig-cases | POST | /v1/cases/investigations | | | | | | |
| craig-cases | POST | /v1/cases/investigations/{id}/safety-assessment | | | | | | |
| craig-cases | POST | /v1/cases/persons | | | | | | |
| craig-cases | POST | /v1/cases/plans/{id}/tasks | | | | | | |
| craig-cases | POST | /v1/cases/referrals | | | | | | |
| craig-cases | POST | /v1/cases/referrals/{id}/allegations | | | | | | |
| craig-cases | POST | /v1/cases/reports | | | | | | |
| craig-cases | POST | /v1/cases/reports/{id}/attachments | | | | | | |
| craig-cases | POST | /v1/cases/reports/{id}/convert | | | | | | |
| craig-cases | POST | /v1/cases/reports/{id}/person-links | | | | | | |
| craig-cases | POST | /v1/cases/reports/{id}/screening-decisions | | | | | | |
| craig-cases | POST | /v1/cases/reports/{id}/screening-decisions/{decision_id}/follow-ups | | | | | | |
| craig-cases | PUT | /v1/cases/cases/{id} | | | | | | |
| craig-cases | PUT | /v1/cases/contacts/{id} | | | | | | |
| craig-cases | PUT | /v1/cases/court-orders/{id} | | | | | | |
| craig-cases | PUT | /v1/cases/investigations/{id} | | | | | | |
| craig-cases | PUT | /v1/cases/persons/{id} | | | | | | |
| craig-cases | PUT | /v1/cases/plans/{id} | | | | | | |
| craig-cases | PUT | /v1/cases/plans/{id}/approve | | | | | | |
| craig-cases | PUT | /v1/cases/tasks/{id} | | | | | | |
| craig-exchange | DELETE | /v1/exchange/agreements/{id} | | | | | | |
| craig-exchange | DELETE | /v1/exchange/partners/{id} | | | | | | |
| craig-exchange | GET | /v1/exchange/agreements | | | | | | |
| craig-exchange | GET | /v1/exchange/agreements/{id} | | | | | | |
| craig-exchange | GET | /v1/exchange/icpc | | | | | | |
| craig-exchange | GET | /v1/exchange/icpc/{id} | | | | | | |
| craig-exchange | GET | /v1/exchange/icpc/{id}/attachments | | | | | | |
| craig-exchange | GET | /v1/exchange/icpc/{id}/attachments/{attachment_id} | | | | | | |
| craig-exchange | GET | /v1/exchange/icpc/{id}/home-study | | | | | | |
| craig-exchange | GET | /v1/exchange/partners | | | | | | |
| craig-exchange | GET | /v1/exchange/partners/{id} | | | | | | |
| craig-exchange | GET | /v1/exchange/transactions | | | | | | |
| craig-exchange | GET | /v1/exchange/transactions/{id} | | | | | | |
| craig-exchange | POST | /v1/exchange/agreements | | | | | | |
| craig-exchange | POST | /v1/exchange/icpc | | | | | | |
| craig-exchange | POST | /v1/exchange/icpc/{id}/attachments | | | | | | |
| craig-exchange | POST | /v1/exchange/icpc/{id}/home-study | | | | | | |
| craig-exchange | POST | /v1/exchange/partners | | | ✓ | | | |
| craig-exchange | POST | /v1/exchange/partners/{id}/test | | | | | | |
| craig-exchange | POST | /v1/exchange/send | | | | | | |
| craig-exchange | POST | /v1/exchange/transactions/{id}/retry | | | | | | |
| craig-exchange | PUT | /v1/exchange/agreements/{id} | | | | | | |
| craig-exchange | PUT | /v1/exchange/icpc/{id} | | | | | | |
| craig-exchange | PUT | /v1/exchange/partners/{id} | | | | | | |
| craig-financial | DELETE | /v1/financial/adjustments/{id} | | | | | | |
| craig-financial | DELETE | /v1/financial/rates/{id} | | | | | | |
| craig-financial | GET | /v1/financial/adjustments | | | | | | |
| craig-financial | GET | /v1/financial/adjustments/{id} | | | | | | |
| craig-financial | GET | /v1/financial/claims | | | | | | |
| craig-financial | GET | /v1/financial/claims/{id} | | | | | | |
| craig-financial | GET | /v1/financial/payments | | | | | | |
| craig-financial | GET | /v1/financial/payments/{id} | | | ✓ | | | |
| craig-financial | GET | /v1/financial/rates | | | | | | |
| craig-financial | GET | /v1/financial/rates/{id} | | | ✓ | | | |
| craig-financial | POST | /v1/financial/claims/generate | | | | | | |
| craig-financial | POST | /v1/financial/payments/calculate | | | | | | |
| craig-financial | POST | /v1/financial/payments/{id}/adjustments | | | | | | |
| craig-financial | POST | /v1/financial/rates | | | | | | |
| craig-financial | PUT | /v1/financial/adjustments/{id}/approve | | | | | | |
| craig-financial | PUT | /v1/financial/claims/{id}/submit | | | | | | |
| craig-financial | PUT | /v1/financial/payments/{id}/approve | | | | | | |
| craig-financial | PUT | /v1/financial/rates/{id} | | | | | | |
| craig-intake | GET | /partner/v1/reports/{id}/attachments | | | | | | |
| craig-intake | GET | /partner/v1/reports/{id}/status | | | | | | |
| craig-intake | GET | /public/v1/reports/{id}/status | | | | | | |
| craig-intake | POST | /partner/v1/reports | | | | | | |
| craig-intake | POST | /partner/v1/reports/{id}/attachments | | | | | | |
| craig-intake | POST | /public/v1/reports | | | | | | |
| craig-placement | DELETE | /v1/placement/education/{id} | | | | | | |
| craig-placement | DELETE | /v1/placement/health/{id} | | | | | | |
| craig-placement | DELETE | /v1/placement/homes/{home_id}/documents/{doc_id} | | | | | | |
| craig-placement | DELETE | /v1/placement/kinship/{id} | | | | | | |
| craig-placement | DELETE | /v1/placement/training/{id} | | | | | | |
| craig-placement | GET | /v1/placement/education | | | | | | |
| craig-placement | GET | /v1/placement/education/{id} | | | | | | |
| craig-placement | GET | /v1/placement/health | | | | | | |
| craig-placement | GET | /v1/placement/health/overdue | | | | | | |
| craig-placement | GET | /v1/placement/health/{id} | | | | | | |
| craig-placement | GET | /v1/placement/homes | | | | | | |
| craig-placement | GET | /v1/placement/homes/{home_id}/documents | | | | | | |
| craig-placement | GET | /v1/placement/homes/{home_id}/documents/{doc_id}/download | | | | | | |
| craig-placement | GET | /v1/placement/homes/{id} | | | ✓ | | | |
| craig-placement | GET | /v1/placement/homes/{id}/training | | | | | | |
| craig-placement | GET | /v1/placement/kinship | | | | | | |
| craig-placement | GET | /v1/placement/kinship/{id} | | | | | | |
| craig-placement | GET | /v1/placement/matching | | | | | | |
| craig-placement | GET | /v1/placement/placements | | | | | | |
| craig-placement | GET | /v1/placement/placements/{id} | | | | | | |
| craig-placement | GET | /v1/placement/placements/{id}/history | | | | | | |
| craig-placement | GET | /v1/placement/training/{id} | | | | | | |
| craig-placement | POST | /v1/placement/education | | | | | | |
| craig-placement | POST | /v1/placement/health | | | | | | |
| craig-placement | POST | /v1/placement/homes | | | ✓ | | | |
| craig-placement | POST | /v1/placement/homes/{home_id}/documents | | | | | | |
| craig-placement | POST | /v1/placement/homes/{id}/training | | | | | | |
| craig-placement | POST | /v1/placement/kinship | | | | | | |
| craig-placement | POST | /v1/placement/placements | | | | | | |
| craig-placement | PUT | /v1/placement/education/{id} | | | | | | |
| craig-placement | PUT | /v1/placement/health/{id} | | | | | | |
| craig-placement | PUT | /v1/placement/homes/{id} | | | | | | |
| craig-placement | PUT | /v1/placement/kinship/{id} | | | | | | |
| craig-placement | PUT | /v1/placement/placements/{id} | | | | | | |
| craig-placement | PUT | /v1/placement/training/{id} | | | | | | |
| craig-reporting | GET | /v1/reporting/afcars | | | | | | |
| craig-reporting | GET | /v1/reporting/afcars/{id} | | | ✓ | | | |
| craig-reporting | GET | /v1/reporting/afcars/{id}/export/download | | | | | | |
| craig-reporting | GET | /v1/reporting/ncands | | | | | | |
| craig-reporting | GET | /v1/reporting/quality/dashboard | | | | | | |
| craig-reporting | GET | /v1/reporting/quality/issues | | | | | | |
| craig-reporting | POST | /v1/reporting/afcars/generate | | | | | | |
| craig-reporting | POST | /v1/reporting/afcars/{id}/export | | | | | | |
| craig-reporting | POST | /v1/reporting/afcars/{id}/transmit | | | | | | |
| craig-reporting | POST | /v1/reporting/ncands/generate | | | | | | |
| craig-reporting | POST | /v1/reporting/ncands/{id}/transmit | | | | | | |
| craig-reporting | PUT | /v1/reporting/afcars/{id}/approve | | | | | | |
| craig-reporting | PUT | /v1/reporting/afcars/{id}/review | | | | | | |
| craig-reporting | PUT | /v1/reporting/ncands/{id}/approve | | | | | | |
| craig-reporting | PUT | /v1/reporting/ncands/{id}/review | | | | | | |
| craig-reporting | PUT | /v1/reporting/quality/issues/{id}/resolve | | | ✓ | | | |
| craig-rules | DELETE | /v1/rules/sets/{id} | | | | | | |
| craig-rules | GET | /v1/rules/evaluations | | | | | | |
| craig-rules | GET | /v1/rules/sets | | | | | | |
| craig-rules | GET | /v1/rules/sets/by-name/{name} | | | | | | |
| craig-rules | GET | /v1/rules/sets/{id} | | | | | | |
| craig-rules | GET | /v1/rules/sets/{id}/export | | | | | | |
| craig-rules | POST | /v1/rules/evaluate | | | | | | |
| craig-rules | POST | /v1/rules/sets | | | ✓ | | | |
| craig-rules | POST | /v1/rules/sets/{id}/import | | | | | | |
| craig-rules | PUT | /v1/rules/sets/{id} | | | | | | |
| craig-security | DELETE | /v1/security/admin/units/{id} | | | | | | |
| craig-security | DELETE | /v1/security/changes/{id} | | | | | | |
| craig-security | DELETE | /v1/security/detection-rules/{id} | | | | | | |
| craig-security | DELETE | /v1/security/nist/{control_id} | | | | | | |
| craig-security | DELETE | /v1/security/partners/{id} | | | | | | |
| craig-security | DELETE | /v1/security/partners/{id}/keys/{key_id} | | | | | | |
| craig-security | DELETE | /v1/security/reviews/{id} | | | | | | |
| craig-security | GET | /v1/security/admin/config | | | | | | |
| craig-security | GET | /v1/security/admin/units | | | | | | |
| craig-security | GET | /v1/security/alerts | | | | | | |
| craig-security | GET | /v1/security/alerts/{id} | | | | | | |
| craig-security | GET | /v1/security/archive | | | | | | |
| craig-security | GET | /v1/security/audit | | | | | | |
| craig-security | GET | /v1/security/audit/resource/{resource_type}/{resource_id} | | | | | | |
| craig-security | GET | /v1/security/audit/user/{user_id} | | | | | | |
| craig-security | GET | /v1/security/changes | | | | | | |
| craig-security | GET | /v1/security/changes/{id} | | | | | | |
| craig-security | GET | /v1/security/detection-rules | | | | | | |
| craig-security | GET | /v1/security/nist | | | | | | |
| craig-security | GET | /v1/security/nist/{control_id} | | | | | | |
| craig-security | GET | /v1/security/partners | | | | | | |
| craig-security | GET | /v1/security/partners/{id} | | | | | | |
| craig-security | GET | /v1/security/partners/{id}/keys | | | | | | |
| craig-security | GET | /v1/security/partners/{id}/signer-keys | | | | | | |
| craig-security | GET | /v1/security/reviews | | | | | | |
| craig-security | GET | /v1/security/reviews/{id} | | | ✓ | | | |
| craig-security | GET | /v1/security/signer-keys/by-kid/{kid} | | | | | | |
| craig-security | POST | /v1/security/admin/units | | | | | | |
| craig-security | POST | /v1/security/archive/purge | | | | | | |
| craig-security | POST | /v1/security/archive/run | | | | | | |
| craig-security | POST | /v1/security/changes | | | | | | |
| craig-security | POST | /v1/security/detection-rules | | | | | | |
| craig-security | POST | /v1/security/detection/run | | | | | | |
| craig-security | POST | /v1/security/nist | | | ✓ | | | |
| craig-security | POST | /v1/security/partners | | | | | | |
| craig-security | POST | /v1/security/partners/verify | | | | | | |
| craig-security | POST | /v1/security/partners/{id}/keys | | | | | | |
| craig-security | POST | /v1/security/partners/{id}/keys/{key_id}/rotate | | | | | | |
| craig-security | POST | /v1/security/partners/{id}/signer-keys | | | | | | |
| craig-security | POST | /v1/security/reviews | | | | | | |
| craig-security | PUT | /v1/security/admin/units/{id} | | | | | | |
| craig-security | PUT | /v1/security/alerts/{id}/acknowledge | | | | | | |
| craig-security | PUT | /v1/security/changes/{id} | | | | | | |
| craig-security | PUT | /v1/security/detection-rules/{id} | | | | | | |
| craig-security | PUT | /v1/security/nist/{control_id} | | | | | | |
| craig-security | PUT | /v1/security/partners/{id} | | | | | | |
| craig-security | PUT | /v1/security/partners/{id}/signer-keys/{signer_key_id}/approve | | | | | | |
| craig-security | PUT | /v1/security/partners/{id}/signer-keys/{signer_key_id}/revoke | | | | | | |
| craig-security | PUT | /v1/security/reviews/{id} | | | | | | |
## Untagged tests
Tests under `tests/api/` whose name does not end in `_happy` / `_sad` / `_evil`. Soft lint — adding a suffix promotes them into the matrix.
* `services/craig-cases/tests/api/admin_replay.rs::replay_dry_run_returns_count_without_modifying`
* `services/craig-cases/tests/api/admin_replay.rs::replay_requires_admin_scope`
* `services/craig-cases/tests/api/admin_replay.rs::replay_rejects_inverted_window`
* `services/craig-cases/tests/api/auth.rs::no_token_returns_401`
* `services/craig-cases/tests/api/auth.rs::invalid_token_returns_401`
* `services/craig-cases/tests/api/auth.rs::caseworker_can_create_referral`
* `services/craig-cases/tests/api/auth.rs::unauthenticated_post_returns_401`
* `services/craig-cases/tests/api/authz_smoke.rs::admin_lists_all_cases`
* `services/craig-cases/tests/api/authz_smoke.rs::caseworker_lists_only_own_cases`
* `services/craig-cases/tests/api/authz_smoke.rs::supervisor_lists_all_cases_realm_flat`
* `services/craig-cases/tests/api/authz_smoke_step8b.rs::admin_lists_investigations_across_all`
* `services/craig-cases/tests/api/authz_smoke_step8b.rs::caseworker_lists_investigations_scoped`
* `services/craig-cases/tests/api/authz_smoke_step8b.rs::caseworker_reads_contacts_on_assigned_case`
* `services/craig-cases/tests/api/authz_smoke_step8b.rs::caseworker_forbidden_listing_court_orders_on_unassigned_case`
* `services/craig-cases/tests/api/authz_smoke_step8b.rs::caseworker_forbidden_listing_case_plans_on_unassigned_case`
* `services/craig-cases/tests/api/batch_lookup.rs::batch_lookup_multiple_case_ids`
* `services/craig-cases/tests/api/batch_lookup.rs::batch_lookup_empty_arrays`
* `services/craig-cases/tests/api/batch_lookup.rs::batch_lookup_nonexistent_ids_return_empty`
* `services/craig-cases/tests/api/batch_lookup.rs::batch_lookup_with_person_ids`
* `services/craig-cases/tests/api/batch_lookup.rs::batch_lookup_requires_auth`
* `services/craig-cases/tests/api/convert_report_autolink.rs::convert_with_no_match_creates_referral_with_zero_autolinks`
* `services/craig-cases/tests/api/convert_report_autolink.rs::convert_with_exact_match_auto_links_child`
* `services/craig-cases/tests/api/convert_report_autolink.rs::auto_linked_row_carries_null_linked_by`
* `services/craig-cases/tests/api/convert_report_autolink.rs::convert_is_idempotent_under_replay_no_duplicate_rows`
* `services/craig-cases/tests/api/convert_report_autolink.rs::seed_case_id_is_optional_and_no_seed_completes_in_degraded_mode`
* `services/craig-cases/tests/api/convert_report_autolink.rs::seed_case_id_pointing_to_nonexistent_case_is_degraded_mode_not_404`
* `services/craig-cases/tests/api/convert_report_autolink.rs::convert_with_dob_mismatch_does_not_auto_link`
* `services/craig-cases/tests/api/convert_report_autolink.rs::convert_with_name_mismatch_does_not_auto_link`
* `services/craig-cases/tests/api/convert_report_autolink.rs::auto_link_skips_entries_with_multiple_auto_candidates`
* `services/craig-cases/tests/api/convert_report_autolink.rs::convert_before_decision_still_rejects`
* `services/craig-cases/tests/api/convert_report_autolink.rs::convert_with_invalid_seed_case_id_uuid_returns_400`
* `services/craig-cases/tests/api/convert_report_autolink.rs::convert_with_screened_out_disposition_still_rejects`
* `services/craig-cases/tests/api/convert_report_autolink.rs::convert_with_invalid_priority_still_rejects`
* `services/craig-cases/tests/api/health.rs::healthz_returns_200`
* `services/craig-cases/tests/api/health.rs::healthz_carries_documented_csp`
* `services/craig-cases/tests/api/idempotency_atomic_claim.rs::winner_runs_handler_exactly_once`
* `services/craig-cases/tests/api/idempotency_atomic_claim.rs::same_key_different_body_returns_422`
* `services/craig-cases/tests/api/persons.rs::create_person`
* `services/craig-cases/tests/api/persons.rs::get_person_by_id`
* `services/craig-cases/tests/api/persons.rs::update_person`
* `services/craig-cases/tests/api/persons.rs::search_persons_by_name`
* `services/craig-cases/tests/api/persons.rs::search_persons_by_dob`
* `services/craig-cases/tests/api/persons.rs::search_persons_by_ssn`
* `services/craig-cases/tests/api/persons.rs::search_persons_pagination`
* `services/craig-cases/tests/api/persons.rs::get_nonexistent_person_returns_404`
* `services/craig-cases/tests/api/referrals_encryption.rs::convert_report_then_get_referral_returns_plaintext_reporter_pii`
* `services/craig-cases/tests/api/report_attachments.rs::upload_attachment_returns_metadata`
* `services/craig-cases/tests/api/report_attachments.rs::upload_to_unknown_report_returns_404`
* `services/craig-cases/tests/api/report_attachments.rs::upload_rejects_disallowed_content_type`
* `services/craig-cases/tests/api/report_attachments.rs::list_attachments_returns_uploaded_items_only`
* `services/craig-cases/tests/api/report_attachments.rs::list_attachments_empty_for_fresh_report`
* `services/craig-cases/tests/api/report_attachments.rs::download_roundtrips_bytes`
* `services/craig-cases/tests/api/report_attachments.rs::download_cross_report_mismatch_returns_404`
* `services/craig-cases/tests/api/report_attachments.rs::delete_soft_deletes_and_hides_from_list`
* `services/craig-cases/tests/api/report_attachments.rs::delete_cross_report_mismatch_returns_404`
* `services/craig-cases/tests/api/report_persons.rs::create_link_persists_provenance_and_returns_row`
* `services/craig-cases/tests/api/report_persons.rs::duplicate_link_returns_409`
* `services/craig-cases/tests/api/report_persons.rs::link_with_invalid_role_rejected`
* `services/craig-cases/tests/api/report_persons.rs::link_with_out_of_bounds_index_rejected`
* `services/craig-cases/tests/api/report_persons.rs::link_with_unknown_person_returns_404`
* `services/craig-cases/tests/api/report_persons.rs::link_against_unknown_report_returns_404`
* `services/craig-cases/tests/api/report_persons.rs::delete_link_returns_row_and_then_404`
* `services/craig-cases/tests/api/report_persons.rs::delete_link_on_wrong_report_returns_404`
* `services/craig-cases/tests/api/report_persons.rs::suggestions_return_one_entry_per_jsonb_index`
* `services/craig-cases/tests/api/report_persons.rs::suggestions_mark_already_linked_entries`
* `services/craig-cases/tests/api/report_persons.rs::suggestions_unknown_report_returns_404`
* `services/craig-cases/tests/api/report_persons.rs::unauthenticated_link_rejected`
* `services/craig-cases/tests/api/report_persons.rs::unauthenticated_suggestions_rejected`
* `services/craig-cases/tests/api/reports.rs::caseworker_can_submit_report`
* `services/craig-cases/tests/api/reports.rs::duplicate_request_id_returns_same_row`
* `services/craig-cases/tests/api/reports.rs::list_reports_filters_by_admin_unit`
* `services/craig-cases/tests/api/reports.rs::get_report_returns_detail_with_no_decisions_initially`
* `services/craig-cases/tests/api/reports.rs::get_report_404_for_unknown_id`
* `services/craig-cases/tests/api/reports.rs::record_initial_decision_becomes_effective`
* `services/craig-cases/tests/api/reports.rs::county_supervisor_can_override_cicc`
* `services/craig-cases/tests/api/reports.rs::caseworker_cannot_override_cicc`
* `services/craig-cases/tests/api/reports.rs::invalid_disposition_kind_rejected`
* `services/craig-cases/tests/api/reports.rs::invalid_actor_role_rejected`
* `services/craig-cases/tests/api/reports.rs::decision_chain_lists_newest_first`
* `services/craig-cases/tests/api/reports.rs::supersedes_across_reports_rejected`
* `services/craig-cases/tests/api/reports.rs::follow_up_attached_to_screened_out_and_referred`
* `services/craig-cases/tests/api/reports.rs::invalid_follow_up_kind_rejected`
* `services/craig-cases/tests/api/reports.rs::follow_up_cross_report_mismatch_returns_404`
* `services/craig-cases/tests/api/reports.rs::convert_from_screened_in_creates_referral`
* `services/craig-cases/tests/api/reports.rs::convert_is_idempotent`
* `services/craig-cases/tests/api/reports.rs::convert_rejects_screened_out`
* `services/craig-cases/tests/api/reports.rs::convert_rejects_before_any_decision`
* `services/craig-cases/tests/api/reports.rs::convert_rejects_invalid_priority`
* `services/craig-cases/tests/api/reports.rs::list_reports_filtered_by_person_id_returns_only_matching`
* `services/craig-cases/tests/api/reports.rs::list_reports_filtered_by_person_with_no_links_returns_empty`
* `services/craig-cases/tests/api/reports.rs::list_reports_filter_composes_with_pagination`
* `services/craig-cases/tests/api/reports.rs::list_reports_filter_composes_with_admin_unit`
* `services/craig-cases/tests/api/reports.rs::list_reports_filter_respects_cascade_delete`
* `services/craig-cases/tests/api/reports.rs::list_reports_with_malformed_person_id_uuid_returns_400`
* `services/craig-cases/tests/api/reports.rs::unauthenticated_submit_rejected`
* `services/craig-cases/tests/api/approve_case_plan_concurrent.rs::approve_case_plan_concurrent_yields_exactly_one_active`
* `services/craig-cases/tests/api/case_plans.rs::create_case_plan`
* `services/craig-cases/tests/api/case_plans.rs::list_case_plans`
* `services/craig-cases/tests/api/case_plans.rs::update_case_plan`
* `services/craig-cases/tests/api/case_plans.rs::approve_case_plan_as_supervisor`
* `services/craig-cases/tests/api/case_plans.rs::approve_case_plan_as_caseworker_returns_403`
* `services/craig-cases/tests/api/case_plans.rs::create_task`
* `services/craig-cases/tests/api/case_plans.rs::update_task_status`
* `services/craig-cases/tests/api/case_plans.rs::invalid_task_transition_returns_400`
* `services/craig-cases/tests/api/case_plans.rs::list_tasks_for_plan`
* `services/craig-cases/tests/api/case_plans.rs::get_task_by_id`
* `services/craig-cases/tests/api/case_plans.rs::get_missing_task_returns_404`
* `services/craig-cases/tests/api/case_plans.rs::delete_task_record`
* `services/craig-cases/tests/api/case_plans.rs::delete_missing_task_returns_404`
* `services/craig-cases/tests/api/cases.rs::create_case`
* `services/craig-cases/tests/api/cases.rs::list_cases`
* `services/craig-cases/tests/api/cases.rs::get_case`
* `services/craig-cases/tests/api/cases.rs::update_case_valid_transition`
* `services/craig-cases/tests/api/cases.rs::update_case_invalid_transition_returns_400`
* `services/craig-cases/tests/api/cases.rs::list_household`
* `services/craig-cases/tests/api/cases.rs::add_household_member`
* `services/craig-cases/tests/api/cases.rs::list_cases_filtered_by_person_id_returns_only_matching`
* `services/craig-cases/tests/api/cases.rs::filter_cases_by_worker`
* `services/craig-cases/tests/api/cases.rs::filter_cases_by_admin_unit`
* `services/craig-cases/tests/api/contacts.rs::create_contact`
* `services/craig-cases/tests/api/contacts.rs::list_contacts_for_case`
* `services/craig-cases/tests/api/contacts.rs::contacts_pagination`
* `services/craig-cases/tests/api/contacts.rs::get_contact`
* `services/craig-cases/tests/api/contacts.rs::get_missing_contact_returns_404`
* `services/craig-cases/tests/api/contacts.rs::update_contact_narrative`
* `services/craig-cases/tests/api/contacts.rs::delete_contact_record`
* `services/craig-cases/tests/api/contacts.rs::delete_missing_contact_returns_404`
* `services/craig-cases/tests/api/court_orders.rs::create_court_order`
* `services/craig-cases/tests/api/court_orders.rs::list_court_orders`
* `services/craig-cases/tests/api/court_orders.rs::upload_and_download_court_order_document`
* `services/craig-cases/tests/api/court_orders.rs::court_orders_pagination`
* `services/craig-cases/tests/api/court_orders.rs::get_court_order_by_id`
* `services/craig-cases/tests/api/court_orders.rs::get_missing_court_order_returns_404`
* `services/craig-cases/tests/api/court_orders.rs::update_court_order_judge`
* `services/craig-cases/tests/api/court_orders.rs::delete_court_order_record`
* `services/craig-cases/tests/api/court_orders.rs::delete_missing_court_order_returns_404`
* `services/craig-cases/tests/api/investigations.rs::create_investigation`
* `services/craig-cases/tests/api/investigations.rs::list_investigations`
* `services/craig-cases/tests/api/investigations.rs::get_investigation`
* `services/craig-cases/tests/api/investigations.rs::update_investigation_valid_transition`
* `services/craig-cases/tests/api/investigations.rs::update_investigation_invalid_transition_returns_400`
* `services/craig-cases/tests/api/investigations.rs::filter_investigations_by_worker`
* `services/craig-cases/tests/api/investigations.rs::filter_investigations_by_status`
* `services/craig-cases/tests/api/investigations.rs::get_nonexistent_investigation_returns_404`
* `services/craig-cases/tests/api/investigations.rs::list_investigations_filtered_by_person_id_returns_only_matching`
* `services/craig-cases/tests/api/referrals.rs::create_referral`
* `services/craig-cases/tests/api/referrals.rs::list_referrals`
* `services/craig-cases/tests/api/referrals.rs::get_referral_with_allegations`
* `services/craig-cases/tests/api/referrals.rs::add_allegation_to_referral`
* `services/craig-cases/tests/api/referrals.rs::filter_referrals_by_admin_unit`
* `services/craig-cases/tests/api/referrals.rs::referrals_pagination`
* `services/craig-cases/tests/api/referrals.rs::missing_required_field_returns_400`
* `services/craig-cases/tests/api/referrals.rs::filter_referrals_by_worker`
* `services/craig-cases/tests/api/referrals.rs::get_nonexistent_referral_returns_404`
* `services/craig-cases/tests/api/referrals.rs::list_referrals_filtered_by_person_id_returns_only_matching`
* `services/craig-cases/tests/api/referrals.rs::list_referrals_filtered_by_perpetrator_person_id_also_matches`
* `services/craig-cases/tests/api/workflow.rs::full_lifecycle`
* `services/craig-cases/tests/api/workflow.rs::close_case_with_reason`
* `services/craig-cases/tests/api/workflow.rs::transfer_case`
* `services/craig-cases/tests/api/contact_attachments.rs::upload_contact_attachment`
* `services/craig-cases/tests/api/contact_attachments.rs::list_contact_attachments`
* `services/craig-cases/tests/api/contact_attachments.rs::download_contact_attachment`
* `services/craig-cases/tests/api/contact_attachments.rs::delete_contact_attachment`
* `services/craig-cases/tests/api/contact_attachments.rs::upload_to_nonexistent_contact_returns_404`
* `services/craig-cases/tests/api/contact_attachments.rs::non_owner_caseworker_blocked_across_all_endpoints`
* `services/craig-cases/tests/api/contact_attachments.rs::upload_disallowed_mime_type_returns_400`
* `services/craig-cases/tests/api/jws_replay_cleanup.rs::cleanup_deletes_rows_older_than_ttl_keeps_fresh`
* `services/craig-cases/tests/api/partial_index_explain.rs::idx_contacts_active_by_case_used_by_list_query`
* `services/craig-cases/tests/api/partial_index_explain.rs::idx_case_plan_tasks_active_by_plan_used_by_list_query`
* `services/craig-cases/tests/api/jws_replay_scope_gate.rs::require_scope_rejects_worker_token_with_403`
* `services/craig-cases/tests/api/jws_replay_scope_gate.rs::require_scope_rejects_wrong_service_account_with_403`
* `services/craig-cases/tests/api/jws_replay_scope_gate.rs::require_scope_accepts_craig_intake_token_with_200`
* `services/craig-exchange/tests/api/agreements.rs::create_agreement`
* `services/craig-exchange/tests/api/agreements.rs::list_agreements`
* `services/craig-exchange/tests/api/agreements.rs::update_agreement_status`
* `services/craig-exchange/tests/api/agreements.rs::invalid_agreement_transition_returns_400`
* `services/craig-exchange/tests/api/agreements.rs::get_agreement`
* `services/craig-exchange/tests/api/agreements.rs::get_missing_agreement_returns_404`
* `services/craig-exchange/tests/api/agreements.rs::delete_draft_agreement`
* `services/craig-exchange/tests/api/agreements.rs::delete_non_draft_agreement_returns_409`
* `services/craig-exchange/tests/api/agreements.rs::delete_missing_agreement_returns_404`
* `services/craig-exchange/tests/api/auth.rs::no_token_returns_401`
* `services/craig-exchange/tests/api/auth.rs::invalid_token_returns_401`
* `services/craig-exchange/tests/api/auth.rs::caseworker_cannot_create_partner`
* `services/craig-exchange/tests/api/authz_smoke_step9.rs::admin_lists_partners`
* `services/craig-exchange/tests/api/authz_smoke_step9.rs::admin_lists_agreements`
* `services/craig-exchange/tests/api/authz_smoke_step9.rs::admin_lists_transactions`
* `services/craig-exchange/tests/api/authz_smoke_step9.rs::admin_lists_icpc_requests`
* `services/craig-exchange/tests/api/authz_smoke_step9.rs::caseworker_denied_listing_partners`
* `services/craig-exchange/tests/api/health.rs::healthz_returns_200`
* `services/craig-exchange/tests/api/health.rs::healthz_carries_documented_csp`
* `services/craig-exchange/tests/api/icpc.rs::create_icpc_request`
* `services/craig-exchange/tests/api/icpc.rs::list_icpc_requests`
* `services/craig-exchange/tests/api/icpc.rs::get_icpc_request`
* `services/craig-exchange/tests/api/icpc.rs::update_icpc_status`
* `services/craig-exchange/tests/api/icpc.rs::invalid_icpc_transition_returns_400`
* `services/craig-exchange/tests/api/icpc.rs::submit_home_study`
* `services/craig-exchange/tests/api/icpc.rs::duplicate_home_study_returns_409`
* `services/craig-exchange/tests/api/icpc.rs::get_home_study`
* `services/craig-exchange/tests/api/icpc.rs::upload_and_download_attachment`
* `services/craig-exchange/tests/api/retry.rs::retry_successful_transaction_returns_400`
* `services/craig-exchange/tests/api/retry.rs::retry_nonexistent_transaction_returns_400`
* `services/craig-exchange/tests/api/retry.rs::retry_denied_for_caseworker`
* `services/craig-exchange/tests/api/retry.rs::retry_unauthenticated_returns_401`
* `services/craig-exchange/tests/api/send_worker.rs::stage_then_async_finalize`
* `services/craig-exchange/tests/api/send_worker.rs::recovery_sweep_reclaims_in_flight`
* `services/craig-exchange/tests/api/transactions.rs::send_exchange`
* `services/craig-exchange/tests/api/transactions.rs::list_transactions`
* `services/craig-exchange/tests/api/transactions.rs::get_transaction`
* `services/craig-exchange/tests/api/transactions.rs::supervisor_can_send_exchange`
* `services/craig-exchange/tests/api/partners.rs::create_partner`
* `services/craig-exchange/tests/api/partners.rs::list_partners`
* `services/craig-exchange/tests/api/partners.rs::update_partner`
* `services/craig-exchange/tests/api/partners.rs::test_connectivity`
* `services/craig-exchange/tests/api/partners.rs::unique_constraint_on_partner_name`
* `services/craig-exchange/tests/api/partners.rs::get_partner`
* `services/craig-exchange/tests/api/partners.rs::get_missing_partner_returns_404`
* `services/craig-exchange/tests/api/partners.rs::delete_partner_soft_deletes`
* `services/craig-exchange/tests/api/partners.rs::delete_missing_partner_returns_404`
* `services/craig-financial/tests/api/adjustments.rs::create_adjustment_payment_not_found`
* `services/craig-financial/tests/api/adjustments.rs::approve_adjustment_not_found`
* `services/craig-financial/tests/api/adjustments.rs::list_adjustments`
* `services/craig-financial/tests/api/adjustments.rs::get_adjustment`
* `services/craig-financial/tests/api/adjustments.rs::get_missing_adjustment_returns_404`
* `services/craig-financial/tests/api/adjustments.rs::delete_pending_adjustment`
* `services/craig-financial/tests/api/adjustments.rs::delete_approved_adjustment_returns_409`
* `services/craig-financial/tests/api/adjustments.rs::delete_missing_adjustment_returns_404`
* `services/craig-financial/tests/api/adjustments.rs::approve_already_approved_adjustment_returns_400`
* `services/craig-financial/tests/api/approve_adjustment_concurrent.rs::approve_adjustment_concurrent_preserves_net_amount`
* `services/craig-financial/tests/api/auth.rs::no_token_returns_401`
* `services/craig-financial/tests/api/auth.rs::invalid_token_returns_401`
* `services/craig-financial/tests/api/auth.rs::caseworker_cannot_create_rate`
* `services/craig-financial/tests/api/auth.rs::caseworker_cannot_approve_payment`
* `services/craig-financial/tests/api/authz_smoke_step10.rs::admin_lists_payments`
* `services/craig-financial/tests/api/authz_smoke_step10.rs::admin_lists_claims`
* `services/craig-financial/tests/api/authz_smoke_step10.rs::caseworker_denied_listing_claims`
* `services/craig-financial/tests/api/claims.rs::list_claims_empty`
* `services/craig-financial/tests/api/claims.rs::get_claim_not_found`
* `services/craig-financial/tests/api/claims.rs::generate_claim`
* `services/craig-financial/tests/api/claims.rs::submit_claim`
* `services/craig-financial/tests/api/claims.rs::submit_claim_not_found`
* `services/craig-financial/tests/api/claims.rs::caseworker_denied_submit_claim`
* `services/craig-financial/tests/api/health.rs::healthz_returns_200`
* `services/craig-financial/tests/api/health.rs::healthz_carries_documented_csp`
* `services/craig-financial/tests/api/payments.rs::list_payments_empty`
* `services/craig-financial/tests/api/payments.rs::get_payment_not_found`
* `services/craig-financial/tests/api/payments.rs::calculate_payment_no_rate`
* `services/craig-financial/tests/api/payments.rs::calculate_payment_with_rate`
* `services/craig-financial/tests/api/payments.rs::approve_payment_not_found`
* `services/craig-financial/tests/api/payments.rs::approve_already_approved_payment_returns_400`
* `services/craig-financial/tests/api/rates.rs::create_rate`
* `services/craig-financial/tests/api/rates.rs::list_rates`
* `services/craig-financial/tests/api/rates.rs::list_rates_filter_by_jurisdiction`
* `services/craig-financial/tests/api/rates.rs::eligibility_worker_can_list_rates`
* `services/craig-financial/tests/api/rates.rs::get_rate`
* `services/craig-financial/tests/api/rates.rs::get_missing_rate_returns_404`
* `services/craig-financial/tests/api/rates.rs::update_rate`
* `services/craig-financial/tests/api/rates.rs::delete_rate`
* `services/craig-financial/tests/api/rates.rs::delete_missing_rate_returns_404`
* `services/craig-financial/tests/api/partial_index_explain.rs::idx_rate_tables_active_used_by_list_query`
* `services/craig-financial/tests/api/partial_index_explain.rs::idx_rate_tables_active_used_by_find_applicable_query`
* `services/craig-intake/tests/api/attachments.rs::upload_pdf_attachment_proxies_to_cases`
* `services/craig-intake/tests/api/attachments.rs::list_attachments_after_proxy_upload`
* `services/craig-intake/tests/api/attachments.rs::upload_to_nonexistent_report_returns_404`
* `services/craig-intake/tests/api/attachments.rs::list_attachments_for_nonexistent_report_returns_404`
* `services/craig-intake/tests/api/attachments.rs::upload_without_api_key_returns_401`
* `services/craig-intake/tests/api/attachments.rs::missing_file_field_returns_400`
* `services/craig-intake/tests/api/auth.rs::partner_submit_without_api_key_returns_401`
* `services/craig-intake/tests/api/auth.rs::partner_submit_with_invalid_api_key_returns_401`
* `services/craig-intake/tests/api/auth.rs::partner_status_without_api_key_returns_401`
* `services/craig-intake/tests/api/captcha.rs::turnstile_always_pass_key_returns_success`
* `services/craig-intake/tests/api/captcha.rs::turnstile_always_fail_key_returns_failure`
* `services/craig-intake/tests/api/captcha.rs::captcha_disabled_accepts_report_without_token`
* `services/craig-intake/tests/api/captcha.rs::captcha_disabled_accepts_report_with_arbitrary_token`
* `services/craig-intake/tests/api/captcha.rs::captcha_disabled_accepts_report_with_empty_token`
* `services/craig-intake/tests/api/health.rs::healthz_returns_200`
* `services/craig-intake/tests/api/health.rs::healthz_carries_documented_csp_api_mode`
* `services/craig-intake/tests/api/health.rs::healthz_carries_documented_csp_standalone_mode`
* `services/craig-intake/tests/api/jws.rs::jws_with_valid_signature_succeeds`
* `services/craig-intake/tests/api/jws.rs::jws_missing_returns_400`
* `services/craig-intake/tests/api/jws.rs::jws_with_malformed_compact_serialization_returns_401`
* `services/craig-intake/tests/api/jws.rs::jws_with_unknown_kid_returns_401`
* `services/craig-intake/tests/api/jws.rs::jws_with_revoked_key_returns_401`
* `services/craig-intake/tests/api/jws.rs::jws_signature_caches_for_repeat_submissions`
* `services/craig-intake/tests/api/jws.rs::jws_verifies_payload_canonicalization`
* `services/craig-intake/tests/api/jws.rs::jws_with_wrong_keypair_signature_returns_401`
* `services/craig-intake/tests/api/jws.rs::jws_unsupported_algorithm_returns_401`
* `services/craig-intake/tests/api/jws.rs::jws_three_part_format_validation`
* `services/craig-intake/tests/api/jws_error_uniformity.rs::all_jws_verify_failures_produce_identical_401_bodies`
* `services/craig-intake/tests/api/jws_partner_binding.rs::same_partner_jws_succeeds`
* `services/craig-intake/tests/api/jws_partner_binding.rs::cross_partner_jws_rejected_with_401`
* `services/craig-intake/tests/api/jws_partner_binding.rs::cross_partner_attempt_two_partners_two_kids_three_combinations`
* `services/craig-intake/tests/api/jws_replay.rs::replay_with_same_jti_rejected_with_401`
* `services/craig-intake/tests/api/jws_replay.rs::iat_too_old_rejected_with_401`
* `services/craig-intake/tests/api/jws_replay.rs::iat_too_far_in_future_rejected_with_401`
* `services/craig-intake/tests/api/jws_replay.rs::cross_partner_same_jti_is_not_a_replay`
* `services/craig-intake/tests/api/jws_replay.rs::concurrent_same_jti_yields_exactly_one_accept`
* `services/craig-intake/tests/api/partner.rs::submit_via_valid_api_key_with_jws`
* `services/craig-intake/tests/api/partner.rs::submit_without_jws_returns_400`
* `services/craig-intake/tests/api/partner.rs::submit_with_unknown_signer_kid_returns_401`
* `services/craig-intake/tests/api/partner.rs::submit_with_tampered_payload_fails_jws`
* `services/craig-intake/tests/api/partner.rs::submit_validates_reporter_type`
* `services/craig-intake/tests/api/partner.rs::submit_validates_concern_description_length`
* `services/craig-intake/tests/api/partner.rs::status_returns_404_for_unknown_id`
* `services/craig-intake/tests/api/partner.rs::submit_then_status_returns_pending`
* `services/craig-intake/tests/api/partner_context.rs::anonymous_public_submission_stores_null_partner_id`
* `services/craig-intake/tests/api/partner_context.rs::authenticated_partner_submission_stores_partner_id`
* `services/craig-intake/tests/api/per_partner_rate_limit.rs::partner_a_exhausts_quota_partner_b_unaffected`
* `services/craig-intake/tests/api/public.rs::submit_anonymous_report_succeeds`
* `services/craig-intake/tests/api/public.rs::submit_with_full_phase2_fields_succeeds`
* `services/craig-intake/tests/api/public.rs::submit_validates_required_fields`
* `services/craig-intake/tests/api/public.rs::submit_rejects_invalid_reporter_type`
* `services/craig-intake/tests/api/public.rs::submit_rejects_invalid_concern_type`
* `services/craig-intake/tests/api/public.rs::submit_rejects_short_concern_description`
* `services/craig-intake/tests/api/public.rs::submit_rejects_oversized_children_array`
* `services/craig-intake/tests/api/public.rs::honeypot_silent_accept_returns_synthetic_confirmation`
* `services/craig-intake/tests/api/public.rs::status_returns_404_for_unknown_id`
* `services/craig-intake/tests/api/public.rs::submit_then_status_returns_pending`
* `services/craig-intake/tests/api/regression_no_v1_routes.rs::craig_intake_has_no_v1_routes`
* `services/craig-intake/tests/api/security_headers.rs::intake_csp_drops_unsafe_inline_and_unsafe_eval`
* `services/craig-intake/tests/api/security_headers.rs::intake_healthz_emits_hsts_header`
* `services/craig-intake/tests/api/signer_key_expiry.rs::expired_signer_key_rejected_with_uniform_401`
* `services/craig-intake/tests/api/signer_key_expiry.rs::null_expires_at_signer_key_continues_to_verify`
* `services/craig-intake/tests/api/signer_key_expiry.rs::future_expires_at_signer_key_verifies`
* `services/craig-intake/tests/api/sanitization.rs::control_chars_are_stripped_from_reporter_phone`
* `services/craig-intake/tests/api/sanitization.rs::unicode_normalizes_to_nfc`
* `services/craig-intake/tests/api/sanitization.rs::over_length_input_rejected_with_422`
* `services/craig-intake/tests/api/sanitization.rs::html_tags_stripped_from_reporter_first_name`
* `services/craig-intake/tests/api/cross_partner_bola.rs::same_partner_status_check_succeeds`
* `services/craig-intake/tests/api/cross_partner_bola.rs::cross_partner_status_check_returns_404`
* `services/craig-intake/tests/api/cross_partner_bola.rs::same_partner_list_attachments_succeeds`
* `services/craig-intake/tests/api/cross_partner_bola.rs::cross_partner_list_attachments_returns_404`
* `services/craig-intake/tests/api/cross_partner_bola.rs::same_partner_upload_attachment_succeeds`
* `services/craig-intake/tests/api/cross_partner_bola.rs::cross_partner_upload_attachment_returns_404`
* `services/craig-placement/tests/api/auth.rs::no_token_returns_401`
* `services/craig-placement/tests/api/auth.rs::invalid_token_returns_401`
* `services/craig-placement/tests/api/auth.rs::caseworker_cannot_create_foster_home`
* `services/craig-placement/tests/api/auth.rs::supervisor_can_create_foster_home`
* `services/craig-placement/tests/api/authz_smoke_step9.rs::admin_lists_placements_across_all`
* `services/craig-placement/tests/api/authz_smoke_step9.rs::caseworker_lists_placements_scoped`
* `services/craig-placement/tests/api/authz_smoke_step9.rs::admin_lists_kinship_options_for_case`
* `services/craig-placement/tests/api/concurrent_transitions.rs::concurrent_end_same_placement_only_one_wins`
* `services/craig-placement/tests/api/concurrent_transitions.rs::concurrent_end_different_placements_same_home_no_lost_update`
* `services/craig-placement/tests/api/cross_service_assignment.rs::placements_assigned_worker_sub_update_works_and_is_idempotent`
* `services/craig-placement/tests/api/cross_service_assignment.rs::kinship_options_assigned_worker_sub_update_works`
* `services/craig-placement/tests/api/education.rs::create_education_record`
* `services/craig-placement/tests/api/education.rs::get_education_record`
* `services/craig-placement/tests/api/education.rs::list_education_by_child`
* `services/craig-placement/tests/api/education.rs::update_education_record`
* `services/craig-placement/tests/api/education.rs::delete_education_record`
* `services/craig-placement/tests/api/education.rs::create_education_invalid_school_type`
* `services/craig-placement/tests/api/education.rs::delete_requires_supervisor`
* `services/craig-placement/tests/api/foster_homes.rs::create_foster_home`
* `services/craig-placement/tests/api/foster_homes.rs::list_foster_homes`
* `services/craig-placement/tests/api/foster_homes.rs::get_foster_home_with_training`
* `services/craig-placement/tests/api/foster_homes.rs::update_foster_home`
* `services/craig-placement/tests/api/foster_homes.rs::valid_license_transition`
* `services/craig-placement/tests/api/foster_homes.rs::invalid_license_transition_returns_400`
* `services/craig-placement/tests/api/foster_homes.rs::record_training`
* `services/craig-placement/tests/api/foster_homes.rs::filter_by_admin_unit`
* `services/craig-placement/tests/api/foster_homes.rs::filter_by_license_status`
* `services/craig-placement/tests/api/foster_homes.rs::filter_by_has_capacity`
* `services/craig-placement/tests/api/foster_homes.rs::list_training_for_home`
* `services/craig-placement/tests/api/foster_homes.rs::get_training_by_id`
* `services/craig-placement/tests/api/foster_homes.rs::get_missing_training_returns_404`
* `services/craig-placement/tests/api/foster_homes.rs::update_training_hours`
* `services/craig-placement/tests/api/foster_homes.rs::delete_training_record`
* `services/craig-placement/tests/api/foster_homes.rs::delete_missing_training_returns_404`
* `services/craig-placement/tests/api/health.rs::healthz_returns_200`
* `services/craig-placement/tests/api/health.rs::healthz_carries_documented_csp`
* `services/craig-placement/tests/api/health_records.rs::create_health_record`
* `services/craig-placement/tests/api/health_records.rs::get_health_record`
* `services/craig-placement/tests/api/health_records.rs::list_health_by_child`
* `services/craig-placement/tests/api/health_records.rs::update_health_record`
* `services/craig-placement/tests/api/health_records.rs::delete_health_record`
* `services/craig-placement/tests/api/health_records.rs::create_immunization_requires_name`
* `services/craig-placement/tests/api/health_records.rs::create_immunization_with_name`
* `services/craig-placement/tests/api/health_records.rs::list_overdue`
* `services/craig-placement/tests/api/home_documents.rs::upload_home_document`
* `services/craig-placement/tests/api/home_documents.rs::list_home_documents`
* `services/craig-placement/tests/api/home_documents.rs::download_home_document`
* `services/craig-placement/tests/api/home_documents.rs::delete_home_document`
* `services/craig-placement/tests/api/home_documents.rs::upload_to_nonexistent_home_returns_404`
* `services/craig-placement/tests/api/home_documents.rs::upload_disallowed_mime_type_returns_400`
* `services/craig-placement/tests/api/kinship.rs::create_kinship_option`
* `services/craig-placement/tests/api/kinship.rs::list_kinship_options_for_case`
* `services/craig-placement/tests/api/kinship.rs::create_kinship_option_with_evaluation`
* `services/craig-placement/tests/api/kinship.rs::filter_kinship_by_case_id`
* `services/craig-placement/tests/api/kinship.rs::get_kinship_option`
* `services/craig-placement/tests/api/kinship.rs::get_missing_kinship_returns_404`
* `services/craig-placement/tests/api/kinship.rs::update_kinship_option_evaluation`
* `services/craig-placement/tests/api/kinship.rs::delete_kinship_option_test`
* `services/craig-placement/tests/api/kinship.rs::delete_missing_kinship_returns_404`
* `services/craig-placement/tests/api/matching.rs::search_matching_by_child_id`
* `services/craig-placement/tests/api/matching.rs::search_matching_returns_homes_with_capacity`
* `services/craig-placement/tests/api/matching.rs::search_matching_filters_by_icwa`
* `services/craig-placement/tests/api/placements.rs::create_placement`
* `services/craig-placement/tests/api/placements.rs::list_placements`
* `services/craig-placement/tests/api/placements.rs::get_placement`
* `services/craig-placement/tests/api/placements.rs::update_placement`
* `services/craig-placement/tests/api/placements.rs::end_placement_valid_transition`
* `services/craig-placement/tests/api/placements.rs::invalid_placement_transition_returns_400`
* `services/craig-placement/tests/api/placements.rs::placement_history`
* `services/craig-placement/tests/api/placements.rs::filter_placements_by_case_id`
* `services/craig-reporting/tests/api/afcars.rs::generate_afcars_creates_submission`
* `services/craig-reporting/tests/api/afcars.rs::list_afcars_submissions`
* `services/craig-reporting/tests/api/afcars.rs::get_afcars_by_id`
* `services/craig-reporting/tests/api/afcars.rs::get_afcars_not_found`
* `services/craig-reporting/tests/api/afcars.rs::approve_afcars_workflow`
* `services/craig-reporting/tests/api/afcars.rs::afcars_invalid_transition_returns_400`
* `services/craig-reporting/tests/api/afcars.rs::afcars_full_lifecycle`
* `services/craig-reporting/tests/api/afcars.rs::caseworker_denied_transmit_afcars`
* `services/craig-reporting/tests/api/afcars.rs::supervisor_can_list_afcars`
* `services/craig-reporting/tests/api/afcars_export.rs::generate_and_download_afcars_export`
* `services/craig-reporting/tests/api/afcars_export.rs::download_export_before_generation_returns_404`
* `services/craig-reporting/tests/api/afcars_export.rs::supervisor_can_download_export`
* `services/craig-reporting/tests/api/auth.rs::no_token_returns_401`
* `services/craig-reporting/tests/api/auth.rs::invalid_token_returns_401`
* `services/craig-reporting/tests/api/auth.rs::caseworker_cannot_generate_afcars`
* `services/craig-reporting/tests/api/auth.rs::caseworker_cannot_approve_afcars`
* `services/craig-reporting/tests/api/authz_smoke_step10.rs::admin_lists_afcars`
* `services/craig-reporting/tests/api/authz_smoke_step10.rs::admin_lists_ncands`
* `services/craig-reporting/tests/api/authz_smoke_step10.rs::caseworker_denied_listing_afcars`
* `services/craig-reporting/tests/api/health.rs::healthz_returns_200`
* `services/craig-reporting/tests/api/health.rs::healthz_carries_documented_csp`
* `services/craig-reporting/tests/api/ncands.rs::generate_ncands_creates_submission`
* `services/craig-reporting/tests/api/ncands.rs::list_ncands_submissions`
* `services/craig-reporting/tests/api/ncands.rs::approve_ncands_workflow`
* `services/craig-reporting/tests/api/ncands.rs::ncands_invalid_transition_returns_400`
* `services/craig-reporting/tests/api/ncands.rs::ncands_full_lifecycle`
* `services/craig-reporting/tests/api/ncands.rs::caseworker_denied_transmit_ncands`
* `services/craig-reporting/tests/api/ncands.rs::ncands_not_found`
* `services/craig-reporting/tests/api/ncands.rs::supervisor_can_list_ncands`
* `services/craig-reporting/tests/api/quality.rs::quality_dashboard_returns_200`
* `services/craig-reporting/tests/api/quality.rs::list_issues_empty`
* `services/craig-reporting/tests/api/quality.rs::list_issues_with_filters`
* `services/craig-reporting/tests/api/quality.rs::resolve_issue_not_found`
* `services/craig-reporting/tests/api/quality.rs::caseworker_can_list_issues`
* `services/craig-rules/tests/api/auth.rs::no_token_returns_401`
* `services/craig-rules/tests/api/auth.rs::invalid_token_returns_401`
* `services/craig-rules/tests/api/auth.rs::caseworker_can_list_rule_sets`
* `services/craig-rules/tests/api/auth.rs::caseworker_cannot_create_rule_set`
* `services/craig-rules/tests/api/auth.rs::caseworker_cannot_delete_rule_set`
* `services/craig-rules/tests/api/auth.rs::supervisor_can_list_evaluations`
* `services/craig-rules/tests/api/auth.rs::caseworker_cannot_list_evaluations`
* `services/craig-rules/tests/api/auth.rs::admin_can_do_everything`
* `services/craig-rules/tests/api/auth.rs::unauthenticated_post_returns_401`
* `services/craig-rules/tests/api/evaluate.rs::evaluate_valid_input`
* `services/craig-rules/tests/api/evaluate.rs::evaluate_nonexistent_rule_set_returns_404`
* `services/craig-rules/tests/api/evaluate.rs::evaluate_creates_audit_trail`
* `services/craig-rules/tests/api/evaluate.rs::evaluate_with_context`
* `services/craig-rules/tests/api/evaluate.rs::evaluate_multiple_times_same_set`
* `services/craig-rules/tests/api/evaluate.rs::evaluate_after_update_uses_new_content`
* `services/craig-rules/tests/api/evaluate.rs::evaluate_empty_input`
* `services/craig-rules/tests/api/evaluate.rs::evaluate_large_input`
* `services/craig-rules/tests/api/evaluations.rs::list_evaluations_as_admin`
* `services/craig-rules/tests/api/evaluations.rs::filter_evaluations_by_context_type`
* `services/craig-rules/tests/api/evaluations.rs::filter_evaluations_by_rule_set_name`
* `services/craig-rules/tests/api/evaluations.rs::filter_evaluations_by_context_id`
* `services/craig-rules/tests/api/evaluations.rs::evaluations_pagination`
* `services/craig-rules/tests/api/evaluations.rs::evaluations_as_supervisor`
* `services/craig-rules/tests/api/health.rs::healthz_returns_200`
* `services/craig-rules/tests/api/health.rs::healthz_response_shape`
* `services/craig-rules/tests/api/health.rs::healthz_carries_documented_csp`
* `services/craig-rules/tests/api/import_export.rs::import_valid_jdm`
* `services/craig-rules/tests/api/import_export.rs::import_invalid_jdm_returns_400`
* `services/craig-rules/tests/api/import_export.rs::export_returns_json`
* `services/craig-rules/tests/api/import_export.rs::roundtrip_preserves_content`
* `services/craig-rules/tests/api/rule_sets.rs::create_rule_set`
* `services/craig-rules/tests/api/rule_sets.rs::list_rule_sets_with_pagination`
* `services/craig-rules/tests/api/rule_sets.rs::get_rule_set_by_id`
* `services/craig-rules/tests/api/rule_sets.rs::update_rule_set_partial`
* `services/craig-rules/tests/api/rule_sets.rs::delete_rule_set_soft`
* `services/craig-rules/tests/api/rule_sets.rs::deleted_not_in_list`
* `services/craig-rules/tests/api/rule_sets.rs::duplicate_name_returns_409`
* `services/craig-rules/tests/api/rule_sets.rs::invalid_jdm_returns_400`
* `services/craig-rules/tests/api/rule_sets.rs::update_invalid_jdm_returns_400`
* `services/craig-rules/tests/api/rule_sets.rs::list_empty_returns_empty_data`
* `services/craig-rules/tests/api/rule_sets.rs::create_and_list_verify_appears`
* `services/craig-rules/tests/api/rule_sets.rs::get_nonexistent_returns_404`
* `services/craig-rules/tests/api/rule_sets.rs::large_per_page_returns_ok`
* `services/craig-rules/tests/api/rule_sets.rs::page_zero_boundary`
* `services/craig-security/tests/api/admin_units.rs::admin_can_create_and_list_admin_units`
* `services/craig-security/tests/api/admin_units.rs::admin_can_update_admin_unit`
* `services/craig-security/tests/api/admin_units.rs::duplicate_admin_unit_returns_conflict`
* `services/craig-security/tests/api/admin_units.rs::delete_nonexistent_admin_unit_returns_404`
* `services/craig-security/tests/api/admin_units.rs::caseworker_cannot_create_admin_unit`
* `services/craig-security/tests/api/admin_units.rs::get_deployment_config`
* `services/craig-security/tests/api/alerts.rs::list_alerts_returns_paginated_response`
* `services/craig-security/tests/api/alerts.rs::list_alerts_pagination`
* `services/craig-security/tests/api/alerts.rs::list_alerts_verify_alert_shape`
* `services/craig-security/tests/api/alerts.rs::list_alerts_filter_by_severity`
* `services/craig-security/tests/api/alerts.rs::list_alerts_requires_admin`
* `services/craig-security/tests/api/alerts.rs::list_alerts_unauthenticated_returns_401`
* `services/craig-security/tests/api/archive.rs::list_archives`
* `services/craig-security/tests/api/archive.rs::run_archive_marks_eligible`
* `services/craig-security/tests/api/archive.rs::run_purge`
* `services/craig-security/tests/api/archive.rs::caseworker_cannot_list_archives`
* `services/craig-security/tests/api/audit.rs::admin_can_query_audit_log`
* `services/craig-security/tests/api/audit.rs::admin_can_query_audit_by_user`
* `services/craig-security/tests/api/audit.rs::audit_query_with_filters`
* `services/craig-security/tests/api/audit.rs::audit_by_resource_returns_entries`
* `services/craig-security/tests/api/audit.rs::audit_rows_carry_actor_service_attribution`
* `services/craig-security/tests/api/audit.rs::audit_filter_by_actor_service`
* `services/craig-security/tests/api/auth.rs::no_token_returns_401`
* `services/craig-security/tests/api/auth.rs::invalid_token_returns_401`
* `services/craig-security/tests/api/auth.rs::caseworker_cannot_query_audit_log`
* `services/craig-security/tests/api/auth.rs::caseworker_cannot_create_review`
* `services/craig-security/tests/api/auth.rs::supervisor_can_query_audit_by_resource`
* `services/craig-security/tests/api/changes.rs::create_major_change`
* `services/craig-security/tests/api/changes.rs::get_major_change`
* `services/craig-security/tests/api/changes.rs::list_major_changes`
* `services/craig-security/tests/api/changes.rs::update_mark_reported`
* `services/craig-security/tests/api/changes.rs::delete_major_change`
* `services/craig-security/tests/api/changes.rs::create_requires_admin`
* `services/craig-security/tests/api/dead_letter.rs::dlq_threshold_exceeded_alert_fires`
* `services/craig-security/tests/api/detection.rs::create_detection_rule`
* `services/craig-security/tests/api/detection.rs::list_detection_rules`
* `services/craig-security/tests/api/detection.rs::update_detection_rule`
* `services/craig-security/tests/api/detection.rs::delete_detection_rule`
* `services/craig-security/tests/api/detection.rs::create_rule_invalid_type`
* `services/craig-security/tests/api/detection.rs::create_rule_requires_admin`
* `services/craig-security/tests/api/detection.rs::run_detection_scan`
* `services/craig-security/tests/api/detection.rs::acknowledge_alert`
* `services/craig-security/tests/api/health.rs::healthz_returns_200`
* `services/craig-security/tests/api/health.rs::healthz_carries_documented_csp`
* `services/craig-security/tests/api/nist.rs::create_nist_control`
* `services/craig-security/tests/api/nist.rs::create_duplicate_nist_control_returns_409`
* `services/craig-security/tests/api/nist.rs::get_nist_control`
* `services/craig-security/tests/api/nist.rs::get_missing_nist_control_returns_404`
* `services/craig-security/tests/api/nist.rs::delete_nist_control`
* `services/craig-security/tests/api/nist.rs::delete_missing_nist_control_returns_404`
* `services/craig-security/tests/api/nist.rs::list_nist_controls`
* `services/craig-security/tests/api/nist.rs::list_nist_with_family_filter`
* `services/craig-security/tests/api/nist.rs::update_nist_control_to_not_applicable`
* `services/craig-security/tests/api/nist.rs::update_nist_control_not_found`
* `services/craig-security/tests/api/nist.rs::caseworker_cannot_update_nist_control`
* `services/craig-security/tests/api/nist.rs::caseworker_cannot_list_nist_controls`
* `services/craig-security/tests/api/partner_api_key_rotation.rs::expired_api_key_fails_verify`
* `services/craig-security/tests/api/partner_api_key_rotation.rs::future_expiry_api_key_succeeds_verify`
* `services/craig-security/tests/api/partner_api_key_rotation.rs::rotate_returns_new_key_and_invalidates_old`
* `services/craig-security/tests/api/partner_api_key_rotation.rs::rotate_unknown_key_returns_404`
* `services/craig-security/tests/api/partner_api_key_rotation.rs::rotate_cross_partner_ownership_mismatch_returns_400`
* `services/craig-security/tests/api/partners.rs::admin_can_create_and_list_partners`
* `services/craig-security/tests/api/partners.rs::create_partner_rejects_invalid_kind`
* `services/craig-security/tests/api/partners.rs::admin_can_update_and_suspend_partner`
* `services/craig-security/tests/api/partners.rs::admin_can_soft_delete_partner`
* `services/craig-security/tests/api/partners.rs::issue_key_returns_plaintext_once`
* `services/craig-security/tests/api/partners.rs::verify_returns_partner_metadata_for_active_key`
* `services/craig-security/tests/api/partners.rs::verify_rejects_unknown_key`
* `services/craig-security/tests/api/partners.rs::revoked_key_fails_verify`
* `services/craig-security/tests/api/partners.rs::suspended_partner_blocks_verify`
* `services/craig-security/tests/api/partners.rs::non_admin_cannot_manage_partners`
* `services/craig-security/tests/api/partners.rs::get_partner_returns_404_for_unknown_id`
* `services/craig-security/tests/api/partners.rs::issue_key_after_delete_returns_404`
* `services/craig-security/tests/api/partners.rs::revoke_key_cross_partner_mismatch_returns_404`
* `services/craig-security/tests/api/reviews.rs::create_and_list_reviews`
* `services/craig-security/tests/api/reviews.rs::invalid_review_transition_returns_400`
* `services/craig-security/tests/api/reviews.rs::list_reviews_with_filters`
* `services/craig-security/tests/api/reviews.rs::get_review`
* `services/craig-security/tests/api/reviews.rs::get_review_missing_returns_404`
* `services/craig-security/tests/api/reviews.rs::delete_review`
* `services/craig-security/tests/api/reviews.rs::delete_review_missing_returns_404`
* `services/craig-security/tests/api/signer_keys.rs::admin_can_register_and_list_signer_keys`
* `services/craig-security/tests/api/signer_keys.rs::register_rejects_invalid_algorithm`
* `services/craig-security/tests/api/signer_keys.rs::register_rejects_duplicate_kid`
* `services/craig-security/tests/api/signer_keys.rs::register_for_unknown_partner_returns_404`
* `services/craig-security/tests/api/signer_keys.rs::approve_moves_pending_to_approved`
* `services/craig-security/tests/api/signer_keys.rs::approve_second_time_returns_404`
* `services/craig-security/tests/api/signer_keys.rs::revoke_terminates_an_approved_key`
* `services/craig-security/tests/api/signer_keys.rs::approve_cross_partner_mismatch_returns_404`
* `services/craig-security/tests/api/signer_keys.rs::lookup_by_kid_returns_approved_key`
* `services/craig-security/tests/api/signer_keys.rs::lookup_by_kid_rejects_pending_key`
* `services/craig-security/tests/api/signer_keys.rs::lookup_by_kid_rejects_revoked_key`
* `services/craig-security/tests/api/signer_keys.rs::lookup_by_kid_rejects_suspended_partner`
* `services/craig-security/tests/api/signer_keys.rs::lookup_by_kid_unknown_returns_404`
* `services/craig-security/tests/api/signer_keys.rs::non_admin_cannot_manage_signer_keys`
* `services/craig-security/tests/api/workers.rs::search_by_preferred_username_returns_seeded_user`
* `services/craig-security/tests/api/workers.rs::search_too_short_returns_400`
* `services/craig-security/tests/api/workers.rs::search_blank_returns_400`
* `services/craig-security/tests/api/workers.rs::search_no_match_returns_empty`
* `services/craig-security/tests/api/workers.rs::search_caseworker_role_allowed`
* `services/craig-security/tests/api/workers.rs::search_admin_role_allowed`
* `services/craig-security/tests/api/workers.rs::middleware_upserts_on_any_security_endpoint`
* `services/craig-security/tests/api/partial_index_explain.rs::idx_security_reviews_active_used_by_list_query`
* `services/craig-security/tests/api/partial_index_explain.rs::idx_nist_controls_active_used_by_list_query`