# Runnable Check

Run this from the installed skill directory:

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

Default behavior:

- uses `PEOPLE_AND_ORGS_BASE_URL` if set, otherwise the canonical implementation URL;
- mints a demo token from `POST /dev/mint?tenantId=demo` unless `PEOPLE_AND_ORGS_TOKEN` is already set;
- fetches the platform-owned convergence answers from `https://platform3-andymontgomery-9773s-projects.vercel.app/people_and_orgs/alpha/integration/convergence.json`;
- calls the live People & Orgs Alpha API to reproduce those answers;
- requires every platform-pinned North Valley roster, class, guide, membership, NWEA-boundary, and credential-redaction fact to be present in the live response;
- checks the first-class guide inverse route for Katherine Johnson -> Ada Lovelace;
- checks school calendar day, range, count, remaining-days, and reason-value reads for North Valley;
- tolerates unrelated extra rows on period-wide endpoints because the demo tenant is shared and mutable;
- checks that `secret_ref` is not returned;
- performs static pack-shape checks so the pack has no data tables, schema files, raw DB helpers, package dependencies, or domain logic scripts besides the verifier.

To write evidence after a pass:

```bash
node checks/verify-skill-pack.mjs --write-evidence
```

Expected high-level result:

```json
{
  "result": "pass",
  "check": "timeback-people-and-orgs-alpha-skill-pack",
  "platform_answers": {
    "pinned_set": "people-and-orgs-alpha-launch-gate-v1",
    "question_count": 4,
    "converged": true
  }
}
```

If the check fails because the surface lacks a required roster primitive, report a surface gap. Do not add dedupe, parsing, secret handling, or raw SQL to the skill pack.
