TimeBack Platform | Curriculum Alpha | Skill Pack

Build Curriculum apps by asking the stock CASE surface.

An installable instructions-only pack for Claude, Codex, Perplexity, and other AI agents. It teaches agents to call Curriculum Alpha for standards frameworks, CASE-backed components, registry-native Knowledge Components and graphs, placement candidates, gate contracts, universal remediation, and source-shaped ingest without moving platform-owned logic into client code.

Installable Pack

Install the entire pack/ directory as one skill. Every site link below is root-absolute so the no-trailing-slash canonical page resolves links correctly.

Hosted install path: https://platform3-andymontgomery-9773s-projects.vercel.app/curriculum/alpha/skill_pack/pack/
SKILL_DIR="$HOME/.codex/skills/timeback-curriculum-alpha"
BASE="https://platform3-andymontgomery-9773s-projects.vercel.app/curriculum/alpha/skill_pack/pack"
mkdir -p "$SKILL_DIR/references" "$SKILL_DIR/checks" "$SKILL_DIR/agents"
curl -fsSL "$BASE/SKILL.md" -o "$SKILL_DIR/SKILL.md"
curl -fsSL "$BASE/agents/openai.yaml" -o "$SKILL_DIR/agents/openai.yaml"
for f in canonical-surface worked-example source-shaped-ingest runnable-check response-samples leak-check; do
  curl -fsSL "$BASE/references/$f.md" -o "$SKILL_DIR/references/$f.md"
done
curl -fsSL "$BASE/references/authoring-subject-registry.json" -o "$SKILL_DIR/references/authoring-subject-registry.json"
curl -fsSL "$BASE/checks/verify-skill-pack.mjs" -o "$SKILL_DIR/checks/verify-skill-pack.mjs"
curl -fsSL "$BASE/checks/import-standards-framework-dir.mjs" -o "$SKILL_DIR/checks/import-standards-framework-dir.mjs"

Instructions Only

No CASE parser, raw database connector, local enum table, local graph store, mastery math, next-task selector, or Content/Results/Event/Roster logic. The only executables are the verifier and the standards-framework import helper, both thin HTTP surface clients.

CASE Standards + Governed KCs

Standards and reusable course structure stay in stock CASE. Typed Alpha relations preserve source-release lineage and governed KC identity/version links without reviving the retired alpha.curriculum_* copy model.

Runnable Check

Calls the live surface and compares answers to the approved convergence proof: curriculum-alpha-registry-kc-launch-gate-v2, 12 questions, 13/13 domain coverage.

Model Gate

The four-store model in this dictionary is the accepted authority after verified cutover..

Authoritative tables: 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. Derived alpha.curriculum_* views are never authoritative storage.
Alpha nameKindSurface sourceRule
standards_frameworkviewcase.cf_document, exposed through the standards-frameworks endpointFrozen imported standards framework. Alpha names the document plainly but does not move or copy it.
standardviewcase.cf_item standard rows, exposed as standards by the surfacePublisher standards are read as standards. They link to KCs only through alpha.standard_kc_map.
knowledge_componentgoverned registryalpha.knowledge_component + alpha.knowledge_component_versionCreate with stored_as=alpha.knowledge_component and definition, then use only the returned canonical kc_id UUID for create replay, read, version, retire, graph, scope, remediation, standards-map, and Content-attribution operations. Optional source_kc_id is creation provenance only and never resolves an identity; HTTP retries reuse the original Idempotency-Key. Semantic edits append through /versions; identity publication is If-Match protected and never firms.
curriculum_componentviewcase.cf_item component rows with a storage-validated Alpha kind propertyThe single component table is CASE CFItem; apps read the returned kind, publication_status, and retired_at fields and never inspect CASE payload internals. DELETE retires incident CASE associations before the component tombstone and never cascade-retires neighboring components.
trackderived viewcase.cf_item component row returned with kind=trackFlat track view is derived. The authoritative row is still CFItem.
coursederived viewcase.cf_item component row returned with kind=courseFlat course view is derived. Aggregate scope_kcs and expected_xp are derived from expected-XP-bearing leaves/fallbacks and never double-count a container with descendants.
lessonderived viewcase.cf_item component row returned with kind=lessonLesson view selects acquisition components. Ordinary scoped lessons preserve the full non-empty producer-authored KC cluster; an exact content-bearing lesson may instead preserve scope_kc_refs=[] plus kc_scope_decision=authoritative_no_kc and contributes no KC/mastery evidence. Platform3 does not impose one-KC-per-lesson grain or synthesize a KC for explicit absence.
component_containmentviewcase.cf_association isChildOf relationshipisChildOf is component containment only; sequenceNumber orders siblings. KCs have no containment tree.
kc_prerequisitegoverned registry relationalpha.kc_prerequisite, exposed through GET/POST /alpha/curriculum/v1/kc-prerequisitesExact active tenant-owned registry UUID endpoints enter the sole forward prerequisite DAG; cycles are rejected at write time.
kc_relationgoverned registry relationalpha.kc_relationTyped non-prerequisite KC graph semantics live here. It is not a containment tree and never substitutes for alpha.kc_prerequisite.
kc_standard_mapgoverned registry relationalpha.standard_kc_mapExact registry KCs map to frozen release-and-row-pinned CASE standards here, never through CASE isPartOf.
framework_alignmentviewstock CASE alignment associationsCross-framework alignment remains a stock CASE association. No Alpha alias table exists.
content_referencevalidated component propertytarget_ref plus renderer_ref on a CASE-backed component/memberCurriculum references one immutable Content version by target_ref {content_id, content_version_id, content_kind}. Content-owned release eligibility is checked at authoring and again at launch; Curriculum never substitutes latest, caches a verdict, or copies producer evidence. renderer_kind is a compatibility alias only, and registration proves routing validity rather than rendering support.
gate_contractvalidated component propertypassing_criteria_ref plus on_fail on a gated CASE-backed componentpassing_criteria_ref and on_fail live on the gated component and point to Policy/remediation behavior.
standards_framework_importsurface commandPOST /alpha/curriculum/v1/standards-frameworks/importAccepts source-shaped standards framework and standard rows and normalizes server-side into stock CASE rows.
timeback_source_ingestsurface commandPOST /alpha/curriculum/v1/ingest/timeback-course-refsAccepts source-shaped TimeBack course references plus ordered unit/lesson component rows, stages deterministic CASE identities as drafts, verifies the complete intended tree, and publishes bottom-up with the course root last. Content remains flat and does not imply lesson order.

Endpoint Catalog

Agents should start with the smallest endpoint that returns the requested fact. This catalog is generated from the live implementation descriptor; matching customer-contract purpose text is used when available. Writes and ingest require idempotency.

MethodRoutePurpose
POST/dev/mint?tenantId=demoMint a public demo JWT for the demo tenant only.
POST/alpha/curriculum/v1/componentsCreate a track, grade, course, lesson, practice, review, gate, or other component as a stock CASE CFItem. A caller-supplied component_id that matches a soft-retired component reactivates that same identity only as draft, preserving created_at, advancing its CASE version, clearing retired_at, and returning an immediately readable ETag. Every Content target supplies exact content_id, content_version_id, and content_kind values and must pass Content-owned same-tenant release eligibility before the write.
GET/alpha/curriculum/v1/components/{componentId}Read one CASE-backed Curriculum component by id for correction workflows.
PATCH/alpha/curriculum/v1/components/{componentId}Update mutable component fields such as name, position, target_ref, renderer_ref, and publication status with If-Match. A Content target is an exact version tuple and is independently revalidated through Content before the write; latest-version substitution is forbidden.
POST/alpha/curriculum/v1/components/{componentId}/repointProducer self-service repoint/attach of one component's exact Content pin: move an existing pin to its amended exact version (operation=repoint) or pin newly published content onto an unpinned component (operation=attach).
DELETE/alpha/curriculum/v1/components/{componentId}Soft-retire an authored component atomically: retire every incident CASE association first, then set retired_at and publication_status='retired'; ordinary component list/detail and tree reads exclude it.
POST/alpha/curriculum/v1/kcsCreate one governed registry Knowledge Component and immutable version. Retry with the original Idempotency-Key or exact canonical kc_id; source_kc_id is provenance only and never resolves an identity.
GET/alpha/curriculum/v1/kcsDiscover the active governed KC corpus: a stable updated_at/kc_id cursor list of registry Knowledge Components with their current immutable versions, filterable by subject_id, kc_kind, publication_status, and updated_since. Adaptive-diagnostics consumers read KCs here, never from CASE; retired rows are never listed and source_kc_id is not a filter.
GET/alpha/curriculum/v1/kcs/{kcId}Read one governed registry Knowledge Component and its current immutable version by exact canonical kc_id UUID.
POST/alpha/curriculum/v1/kcs/{kcId}/versionsAppend an immutable draft semantic version and advance only the KC identity current-version pointer.
GET/alpha/curriculum/v1/kcs/{kcId}/versionsList every immutable semantic version for a governed KC.
GET/alpha/curriculum/v1/kcs/{kcId}/versions/{versionId}Read one exact immutable KC semantic version.
PATCH/alpha/curriculum/v1/kcs/{kcId}Publish the mutable KC identity with ETag/If-Match without firming its current semantic version.
POST/alpha/curriculum/v1/kc-review-decisionsAppend an immutable governed review decision for an exact KC version.
GET/alpha/curriculum/v1/kc-review-decisionsList immutable KC review decisions, optionally for an exact version.
POST/alpha/curriculum/v1/kc-firming-eventsRecord validated first-genuine-response evidence and atomically firm that exact draft KC version.
GET/alpha/curriculum/v1/kc-firming-eventsList immutable KC firming evidence, optionally for an exact version.
POST/alpha/curriculum/v1/courses/{courseId}/approvalsAtomically approve the current course graph, snapshot every exact KC version, create firming evidence, and firm drafts.
GET/alpha/curriculum/v1/courses/{courseId}/approvalsList immutable course approvals with complete exact KC-version snapshots.
POST/alpha/curriculum/v1/kc-prerequisitesCreate one governed acyclic prerequisite edge using exact active tenant-owned registry UUID endpoints.
GET/alpha/curriculum/v1/kc-prerequisitesRead governed KC prerequisite edges by prerequisite, dependent, or either registry UUID endpoint.
DELETE/alpha/curriculum/v1/kcs/{kcId}Require the exact canonical kc_id UUID and current ETag, then soft-retire the governed registry identity only when no active prerequisite, relation, standards map, component scope, or remediation reference remains.
POST/alpha/curriculum/v1/associationsCreate a stock CASE association for component containment or framework/standard alignment. KC prerequisites use alpha.kc_prerequisite, other typed KC graph semantics use alpha.kc_relation, standards links use alpha.standard_kc_map, and KCs have no containment tree.
GET/alpha/curriculum/v1/associationsList stock CASE associations by type, endpoint, component, or updated_since for correction workflows.
GET/alpha/curriculum/v1/associations/{associationId}Read one stock CASE association by id, including its sequence_number.
PATCH/alpha/curriculum/v1/associations/{associationId}Update an association sequence_number with If-Match for sibling reordering.
GET/alpha/curriculum/v1/standards-frameworksList current frozen standards releases by default; a frameworkId reads one historical release without mutating it.
GET/alpha/curriculum/v1/standard-kc-mapsRead active tenant-owned release-pinned standard-to-KC crosswalks with typed release, standard, KC, relationship, updated_since, limit, and opaque cursor filters. Rows expose only the ten governed fields; legacy TEXT provenance is losslessly wrapped as a JSON object under legacy.
POST/alpha/curriculum/v1/standards-frameworks/importMint or reuse an immutable standards source release, write release-scoped CASE framework/standard rows with exact source-row bindings, and persist release-and-row-pinned KC crosswalks in alpha.standard_kc_map. CASE isPartOf remains standard-to-standard only.
GET/alpha/curriculum/v1/componentsList component-tree CFItems by typed filters. For tenant-wide personalized course discovery, send kind=course and one exact non-empty studentId; only course roots carrying that exact student_id are returned, while shared roots and other learners are excluded from that filtered result.
GET/alpha/curriculum/v1/renderer-registryList registered renderer capabilities that Curriculum members may reference by renderer_ref.
GET/alpha/curriculum/v1/components/{componentId}/treeWalk a component subtree using stock CASE isChildOf containment.
GET/alpha/curriculum/v1/courses/{courseId}/next-lessonResolve the first ordered shared or exact learner-owned personalized lesson/review/practice/gate only when it, every containment ancestor, and the course root are published; the exact current graph has an immutable approval with a complete firm, active KC-version snapshot; and its exact Content version still passes Content-owned release eligibility at launch. A personalized root requires its exact studentId before Content eligibility and rechecks that persisted owner after asynchronous Content work; missing and different ids return the same 404 curriculum:not_found as an unknown course. Shared-course routing is unchanged. Draft, retired, changed, unapproved, incomplete, unavailable, malformed, mismatched, or ineligible state fails closed without skipping forward. A known course with no structural frontier returns 409 curriculum:lesson_structure_missing and an unsafe current graph returns 409 curriculum:course_not_routable.
GET/alpha/curriculum/v1/tracks/{trackId}/placement-candidatesList grade-level mastery gates Policy/Results use to run bottom-up placement.
GET/alpha/curriculum/v1/gates/{componentId}Read the Curriculum-owned gate contract without scores, thresholds, or Content body.
GET/alpha/curriculum/v1/gates/{componentId}/statusRead the typed Results-backed gate status reference for a student.
GET/alpha/curriculum/v1/gates/{componentId}/next-formChoose the deterministic next unseen practice-eligible Content test form after independently revalidating the exact test_bank version and each exact candidate form version. Invalid gate, ineligible Content, and genuinely exhausted bank are distinct typed outcomes.
GET/alpha/curriculum/v1/gates/{componentId}/remediationResolve the universal gate-failure remediation map: never_learned to lesson, forgot to review, careless to practice.
POST/alpha/curriculum/v1/ingest/timeback-course-refsImport source-shaped TimeBack courses, course_components, and reconciled component_resources membership through deterministic draft identities, exact intended-tree readback, bottom-up descendant publication, and course-root-last publication. The structural producer is TimeBack courses -> course_components -> component_resources -> resources; resources first pass through Content's timeback-production adapter and each target carries exact content_id, content_version_id, and content_kind values that must pass Content-owned release eligibility. Each lesson membership supplies a non-empty authored array of active Knowledge Component UUIDs in scope_kc_refs; Platform3 preserves multi-KC clustering grain. Course refs, source-empty structure, KC-unscoped structure, partial publication, absent approval/firm snapshots, and Content versions that do not pass release eligibility remain non-routable and are not called Jump-In-ready.

Binary Leak Gate

The skill pack passes only if it never does the platform's work.

raw Postgres or Supabase reads
CASE package parsing
local enum or descriptor tables
standards-code parsing for subject, grade, type, or relationship
local graph persistence as a second Curriculum data layer
student mastery, decay, next-task, score, placement, or XP calculations
Content body, answer-key, event, roster, credential, Policy, reward, or secret storage
latest-Content-version lookup, target-version substitution, or cached producer eligibility verdicts
client-side TimeBack source to CASE normalization
local expected-XP zero defaults or per-student progress-derived expected effort
If one of these responsibilities is required for a user job, report a surface gap and route it upstream. Do not add workaround logic to the pack.

Verification Evidence

Run node checks/verify-skill-pack.mjs. The verifier writes pack/evidence/verification-latest.json and prints the same evidence.

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.
Placement drift rule: the shared demo tenant may accumulate extra QA mastery gates. The verifier requires the placement policy ref, the pinned gate, and at least the convergence-pinned candidate count; positive drift is recorded 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.

pending

Run node checks/verify-skill-pack.mjs after generating the pack.