# Runnable Check

Run this before shipping a Curriculum app, report, migration check, or deliverable built with the skill pack:

```sh
node checks/verify-skill-pack.mjs
```

Optional environment:

```sh
export CURRICULUM_BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/curriculum/alpha/implementation/api"
export CURRICULUM_TENANT=demo
export CURRICULUM_TOKEN=<operator-supplied-token>
export CURRICULUM_VERIFY_WRITES=0
```

The default check is read-only. Set `CURRICULUM_VERIFY_WRITES=1` only in a write-approved tenant to create an idempotent review component as one CASE CFItem.

The check proves the pack is asking the platform for platform-owned answers:

- Fetches the convergence answer key `curriculum-alpha-registry-kc-launch-gate-v2`.
- Reads descriptor model gate and confirms authoritative storage is case.cf_document, case.cf_item, case.cf_association, alpha.standards_source_release, alpha.standards_source_row_binding, alpha.knowledge_component, alpha.knowledge_component_version, alpha.kc_prerequisite, alpha.kc_relation, alpha.standard_kc_map.
- Reads standards framework `11111111-1111-4111-8111-111111111110` and confirms the live cumulative collection still contains at least the convergence-pinned count.
- Reads course tree `66666666-6666-4666-8666-666666666660` and confirms component rows are CASE CFItems.
- Reads registry KC `eeeeeeee-eeee-4eee-8eee-eeeeeeeeeee0` and its exact `alpha.kc_prerequisite` rows; confirms no source-id lookup or KC subtree endpoint is advertised.
- Reads placement candidates for track `44444444-4444-4444-8444-444444444440`.
- Reads gate `bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbb0`, next-form, status, and universal remediation.
- Confirms unsupported filters and old `/alpha/curriculum/maps` routes return typed Problems.
- Confirms responses do not contain Content bodies, answer keys, scores, thresholds, rewards, credentials, secrets, or student mastery state.

Drift rule: the shared demo tenant is cumulative. Standards-framework and standard totals may exceed the convergence answer; the verifier fails only if the live count drops below the convergence floor and records positive drift as live_cumulative_above_convergence.

Redeploy-window rule: the verifier retries transient network errors, retryable non-200 status mismatches, and invalid JSON responses with short backoff before failing. Stable platform assertions remain exact after a response is accepted.

The verifier performs HTTP calls and response assertions only. Stable pinned routes are exact. It does not parse CASE, traverse raw SQL, compute mastery, copy enum tables, or persist Curriculum rows unless the optional write flag is explicitly set.
