{
 "name": "academic-support",
 "what": "Campus-DRI work and the students the system is not working for: which students carry any of nine learning-risk categories in any subject (defined here — the readers, the rules and the row shape — and computed in production by a scheduled serverless job from raw TimeBack under the TimeBack skill's standard, with the stated refinements; this skill's own nightly run tests the definitions), who owns each fix (system · investigate · guide), whether anyone acted on the student (the DRI intervention log, the academics Slack channels), what DRIs are asked and how fast they answer, what it costs in hours, and what hand-built campus reports can and cannot see.",
 "when": "Reach for this source for questions about DRI work, service coverage and learning risk at campus level. Before any query read DICTIONARY.md (the one dictionary; §§1–8 the product spine, §9 the pointer to the TimeBack skill's dictionary, §§10+ the stores); the brainlift (BRAINLIFT.md, a verbatim mirror of the Workflowy canonical) is the opinion layer: what we believe about the data and why, read it before disagreeing with a definition. Route away: ticket latency and escalations → edu-support skill; manual support effort and agent-hours → ticket_support_effort (ticket-support-effort.vercel.app/skill); the DRI work log's own meaning (touches vs failures, request types, entry_kind) → alpha_dri_interventions (4mxev38j.function2.insforge.app/skill); guide observations, shadow decisions, surveys → stef_guide_platform (data-source-skills.vercel.app/stef_guide_platform/skill); platform telemetry → edu-support platform health; enrollment census and roster of record → SIS skill (api.new.aihorizons.school/skill); per-standard analytics and MAP growth → TimeBack skill (timeback-loops-k8.vercel.app/dss/timeback_production). Registry of all skills: data-source-skills.vercel.app.",
 "why": {
  "relevance": "The only place the student's state and the record of service are joined; every other dashboard shows work done and cannot see the students nobody worked on.",
  "contract": "https://data-source-skills.vercel.app/contract",
  "metric": "students the system is not working perfectly for today — share with any of nine categories, over the students on the page (the ledger day's seated students at campuses the taxonomy tags with a brand and a modality; the untagged few are counted beside it); the subset no one is working; what DRIs do instead — window: school year 2026-27 to date; advancement toward two grades a year sits beside it as context",
  "registry": "https://data-source-skills.vercel.app/",
  "sha256": "a3c77832675f31f92bed0c3b728e76ac276deb716c86f1ca70c9e054fb21c76d",
  "sha256_of": "the data-source-skills contract text at why.contract, as read on pinnedAt",
  "pinnedAt": "2026-09-17"
 },
 "how": {
  "native": {
   "stores": {
    "state": "PRODUCTION: the Academic Support read API — base https://4cnfu40x26.execute-api.us-east-1.amazonaws.com/prod (AWS API Gateway, stage prod), header x-api-key (issued per person, kept in ~/.claude/academic-support-api.env, never in the pack). GET /runs (every loaded ledger day with its rules_version, code commit and source clocks) · /scopes?as_of · /summary?as_of&scope (the page's ledger figures, aggregated in SQL with the collector's rules) · /health-series?scope (days under the latest rules version) · /students?as_of&scope&at_risk&limit&cursor (every ledger column per subject row, with help records; paginated) · /details?as_of (the collector figures the ledger cannot give: served_basis, served_by_source, two_doors, reports_sheets, roster_census, fresh, health_excluded/stale, unmatchable_names, asks_trace, rules) · /tree?as_of and /tree/students?as_of&metro&campus&level&guide (the drill-down: leaves with n · risk · unserved, and each at-risk student as the collector builds them, flags with the ten-day series) · /asks and /asks/summary?from&to (Layer 3). Worked calls: ENABLEMENT.md, 'Reach the source'. The real-time dashboard reads the same API. Conformance against the reference implementation: datasource/conformance.py. TEST (reference repo): datasources/student_state/reconstructed.sqlite, the reference implementation's nightly rebuild, used to check the definitions — never the served ledger",
    "slack": "PRODUCTION: the Slack store behind the same API, two layers pushed daily by a local pipeline (POST /slack/{table}, Bearer push token — the pipeline's credential, not a reader's) — raw (channels · users · messages as Slack returned them, for reconstruction) and processed (verdicts_v2 · broadcasts · slack_mentions, the categorized reading); read back with the API key: GET /slack/{table}?limit&cursor (rows as pushed; messages also by channel_id, slack_mentions by as_of); DICTIONARY.md §11 and §13. TEST (reference repo): datasources/slack/data/slack.sqlite",
    "verdicts": "truthfinder/data/verdicts.sqlite (derived; model readings)",
    "timeback": "Aurora replica via the TimeBack skill's MCP (https://timeback.danny-mota.workers.dev/mcp; the skill itself is published at https://timeback-loops-k8.vercel.app/skills/timeback/latest.json — our inherited definitions are pinned to release 2026.09.20.3, DICTIONARY.md §9), raw SQL — python3 datasource/timeback.py sql \"…\" [--database timeback|caliper]; OAuth via Claude Code /mcp (token in keychain, never in the repo)",
    "dri_log": "read LIVE through the alpha_dri_interventions skill's wire (https://4mxev38j.function2.insforge.app/read-api); no store — see DICTIONARY.md §12"
   },
   "entry": "the read API above (curl or any HTTP client with x-api-key; every list route is keyset-paginated: follow next_cursor until null). Reference implementation (not in this pack): python3 truthfinder/categories.py {build|summary} --as-of <day>, truthfinder/reconstruct.py, datasource/cdri.py and the DRI-log reader live in beyondai-projects/academic-support-data-source-skill. In this pack: python3 datasource/probe.py (offline consistency), datasource/claims.py --db <ledger> (dated measurements), datasource/conformance.py (the API against a reference ledger)",
   "auth": "API: x-api-key header (request one from the API owner; kept in ~/.claude/*.env, never in the pack). Reference pipeline: read-only credentials in ~/.claude/*.env; TimeBack via OAuth (Claude Code /mcp → keychain)",
   "pii": "student names and e-mails exist in the stores; never leave the machine; never shown below the queue level"
  },
  "brainlift": "BRAINLIFT.md — the pack's brainlift (Workflowy fork 9ba1288e, mirrored; the working brainlift stays in Workflowy)",
  "dictionary": "DICTIONARY.md",
  "enablement": "ENABLEMENT.md",
  "dashboard": "Academic Support Check — served by the dashboard origin that serves this skill (GET / behind TimeBack SSO; staff and administrator roles in OneRoster), rendered from the read API with the same predicates and wording as the reference rendering dashboard/build.py"
 },
 "feedback": {
  "report": "append a row to data_requests in the slack or worklog store (asked_by, priority, request) — shape: From: / Problem (dated evidence, counts or structure, never a person): / Ask: / Acceptance (a falsifiable test): — or file upstream in edu-support/the production build's question log (internal)",
  "open": "python3 datasource/cdri.py query slack \"select * from data_requests where status='open'\"",
  "loop": "data_issues per store (kind, scope, count, runs_seen ≥3 → root cause); `cdri.py quality` runs the checks and the dictionary drift test; a report that recurs graduates into a quality check",
  "note": "file-based: the contract's feedback wire (POST) does not exist yet; file reports in the reference repo's data_requests or with the API owner"
 },
 "version": "2026-09-22",
 "source": "academic-support",
 "probe": "python3 datasource/probe.py — offline, no stores, no keys: exit 0 and the final line exactly 'All pack checks passed. (N PASS)' means the pack is consistent (front door, documents, column table = engine, categories defined, no outside pointers, no PII). Run it before trusting a download; the nightly and the publisher run it too.",
 "documents": {
  "dictionary": "DICTIONARY.md",
  "enablement": "ENABLEMENT.md",
  "brainlift": "BRAINLIFT.md",
  "claims": "datasource/claims.json (the latest dated measurements of the headline figures and every measurable trap, with the query beside each value; re-run: datasource/claims.py)",
  "production_manual": "docs/HANDOFF-ledger-spec-2026-09-21.md (how every field is obtained and computed — the hand-off to the production job)"
 },
 "links": {
  "skill": "/skill",
  "dictionary": "/skill/DICTIONARY.md",
  "enablement": "/skill/ENABLEMENT.md",
  "brainlift": "/skill/BRAINLIFT.md",
  "claims": "/skill/datasource/claims.json",
  "production_manual": "/skill/docs/HANDOFF-ledger-spec-2026-09-21.md",
  "native_api": "https://4cnfu40x26.execute-api.us-east-1.amazonaws.com/prod"
 },
 "residence": "definitions (this pack) served publicly at GET /skill on the dashboard origin (repo beyondai-projects/academic-support-data-source-skill-fe, skill/); the read API and the production store: trilogy-group/academic-support-data-source-skill-be; the reference implementation and the nightly that tests the definitions: beyondai-projects/academic-support-data-source-skill; not yet registered"
}
