- module
- results
- surface
- alpha
- deliverable
- data_dictionary
- generatedAt
- 2026-07-27T00:00:00Z
- title
- Results Alpha Data Dictionary
- architectureUrl
- https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture
- benchmarkUrl
- https://platform3-24kpiksyo-andymontgomery-9773s-projects.vercel.app/data_dictionary
Contract overview
Tables and fields
alpha.result_record · Result record
- kind
- Public UNION view
- moduleHome
- Results
- changeType
- RENAME + EXTEND
- upstream
- oneroster.results for section gradebook outcomes; Alpha extension for self-paced and external outcomes.
- purpose
- One durable, settled statement about how a specific student did on a work item, test, gate, or external assessment. Accepted public-native rows also expose whether Results awarded XP or the typed reason it did not. QTI-backed rows preserve a typed, tenant-unique attempt identity and its administration, QTI, Content test-spec, and test-kind references.
- lifecycle
- Created by a OneRoster import, platform scorer, QTI scorer, MAP adapter, or external producer adapter. Updated only through versioned writes; superseded or deleted rows remain audit evidence.
- primaryKey
- (tenant_id, result_record_id)
- storage
- Public UNION view; extension storage contains only new Alpha outcome fields plus FKs to base rows.
- writePath
- Read through the public Alpha view; source-backed writes route to OneRoster/NWEAMap and Alpha-only facts write extension storage.
- anchor
- table-alpha-result-record
- fieldCount
- 36
itds
[
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]relationships
[ "Belongs to one student.", "May belong to one gradebook item.", "May point to one Content item or test family.", "Has many KC evidence rows and source evidence rows.", "A QTI-backed row references exactly one QTI attempt and may reference its administration, delivery session, immutable artifact version, and Content test_spec." ]
constraints
[ "A scored result must resolve to exactly one effective score scale when score or text_score is populated.", "Non-section outcomes must write through a named source_adapter_id.", "Item-level evidence from QTI-backed adapters must include canonical_response and is_correct.", "Every accepted public POST row has xp_disposition awarded or not_awarded. Awarded rows reference exactly one alpha.xp_ledger row; non-awarded rows carry one typed xp_non_award_reason.", "Within a tenant, qti_attempt_id identifies at most one settled result_record; consumers use qtiAttemptId lookup and never scan or alias producer_result_id." ]
invalidExamples
[ "A row with score but no effective_score_scale_id.", "A MAP or AP score written without a source_adapter_id.", "A result whose student_id is an NWEA StudentID rather than TimeBack student_id." ]
example
{
"result_record_id": "res_018f4b4e9c7a",
"student_id": "stu_timeback_10017",
"result_kind": "self_paced",
"subject_id": "math",
"outcome_status": "fully_graded",
"score_percent": 93.2,
"is_correct": true,
"qti_attempt_id": "qti-attempt-alex-001",
"administration_id": "admin-results-demo-math-g7-001",
"content_test_spec_id": "018f4b4e-9c7a-7d3d-8b2f-2f673a000501",
"test_kind": "mastery_gate"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (36)
result_record_id
- anchor
- field-alpha-result-record-result-record-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable Results identifier for this settled outcome.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one result record row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000101
- invalidWhen
- Invalid when result_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Unique within tenant.", "Generated by the surface or deterministically mapped during migration." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}tenant_id
- anchor
- field-alpha-result-record-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-result-record-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}student_email
- anchor
- field-alpha-result-record-student-email
- type
- CITEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Student email shown for teacher/parent lookup convenience. It is not a stable key and cannot replace student_id.
- range
- Case-insensitive text within documented constraints.
- relationship
- Joined from People & Orgs for display and lookup; not a Results-owned foreign key.
- example
- alex.rivera@example.edu
- invalidWhen
- Invalid when student_email is used as the sole reconciliation key, returned without authorization, or stored where the row requires stable student_id.
- edgeCases
- Email can change and may be hidden by scope; join it for lookup/display, but never use it as the durable key.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Contact
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Nullable because not every authorized read returns email.", "Case-insensitive email format when present.", "Must never be used as the sole reconciliation key." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}source_sourced_id
- anchor
- field-alpha-result-record-source-sourced-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Original OneRoster results.sourcedId when this row aliases a section gradebook result.
- range
- Text within documented constraints.
- relationship
- References source sourced in the same tenant when present; many result record rows may point to one referenced source sourced.
- example
- result-alex-unit-1-quiz
- invalidWhen
- Invalid when source_sourced_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results.sourced_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "1 to 255 printable characters when present.", "Required only for OneRoster pass-through rows." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}result_kind
- anchor
- field-alpha-result-record-result-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- What kind of durable outcome this row represents.
- range
- One documented enum value.
- relationship
- Governed value on result record; no free-text relationship, and consumers must use the documented enum values.
- example
- self_paced
- invalidWhen
- Invalid when result_kind is not one of self_paced, external_assessment, learning_app_outcome, legacy_assessment, question_result, map, mastery_gate, mastery_visibility, gradebook, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before result record is written; adding a new result_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must be one documented value.", "Public POST /alpha/results/v1/result-records accepts only self_paced, external_assessment, learning_app_outcome, legacy_assessment, and question_result.", "Adapter-owned kinds map, mastery_gate, mastery_visibility, and gradebook are written only through POST /alpha/results/v1/imports.", "Determines which relationship fields are required." ]
allowedValues
[
{
"value": "self_paced",
"meaning": "Public via POST /alpha/results/v1/result-records: a platform-native or QTI-backed self-paced outcome outside a traditional section.",
"useWhen": "Public via POST /alpha/results/v1/result-records: a platform-native or QTI-backed self-paced outcome outside a traditional section.",
"invalidWhen": "Invalid when self_paced does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "external_assessment",
"meaning": "Public via POST /alpha/results/v1/result-records: a non-MAP external assessment outcome normalized by a trusted scorer.",
"useWhen": "Public via POST /alpha/results/v1/result-records: a non-MAP external assessment outcome normalized by a trusted scorer.",
"invalidWhen": "Invalid when external_assessment does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "learning_app_outcome",
"meaning": "Public via POST /alpha/results/v1/result-records: a durable scored outcome from a registered learning application.",
"useWhen": "Public via POST /alpha/results/v1/result-records: a durable scored outcome from a registered learning application.",
"invalidWhen": "Invalid when learning_app_outcome does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "legacy_assessment",
"meaning": "Public via POST /alpha/results/v1/result-records: a settled legacy assessment outcome that is not MAP and not a mastery gate.",
"useWhen": "Public via POST /alpha/results/v1/result-records: a settled legacy assessment outcome that is not MAP and not a mastery gate.",
"invalidWhen": "Invalid when legacy_assessment does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "question_result",
"meaning": "Public via POST /alpha/results/v1/result-records: an item-level result carrying question response/correctness evidence.",
"useWhen": "Public via POST /alpha/results/v1/result-records: an item-level result carrying question response/correctness evidence.",
"invalidWhen": "Invalid when question_result does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "map",
"meaning": "Adapter-owned via POST /alpha/results/v1/imports: a MAP score normalized from source-shaped NWEA rows.",
"useWhen": "Adapter-owned via POST /alpha/results/v1/imports: a MAP score normalized from source-shaped NWEA rows.",
"invalidWhen": "Invalid when map does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "mastery_gate",
"meaning": "Adapter-owned via POST /alpha/results/v1/imports: a mastery-gate test/check result that can feed gate pass, HMG, working grade, and track-state derivation.",
"useWhen": "Adapter-owned via POST /alpha/results/v1/imports: a mastery-gate test/check result that can feed gate pass, HMG, working grade, and track-state derivation.",
"invalidWhen": "Invalid when mastery_gate does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "mastery_visibility",
"meaning": "Adapter-owned via POST /alpha/results/v1/imports: a raw TimeBack mastery-visibility row used as fallback student-knowledge evidence, not HMG when actual gate tests exist.",
"useWhen": "Adapter-owned via POST /alpha/results/v1/imports: a raw TimeBack mastery-visibility row used as fallback student-knowledge evidence, not HMG when actual gate tests exist.",
"invalidWhen": "Invalid when mastery_visibility does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gradebook",
"meaning": "Adapter-owned via POST /alpha/results/v1/imports: a section gradebook result normalized from OneRoster/legacy source-shaped data.",
"useWhen": "Adapter-owned via POST /alpha/results/v1/imports: a section gradebook result normalized from OneRoster/legacy source-shaped data.",
"invalidWhen": "Invalid when gradebook does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}outcome_status
- anchor
- field-alpha-result-record-outcome-status
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Plain status for whether the outcome is submitted, graded, exempt, missing, or voided.
- range
- One documented enum value.
- relationship
- Governed value on result record; no free-text relationship, and consumers must use the documented enum values.
- example
- fully_graded
- invalidWhen
- Invalid when outcome_status is not one of not_submitted, submitted, partially_graded, fully_graded, exempt, missing, voided, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before result record is written; adding a new outcome_status value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- oneroster.results.score_status
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must be one documented value.", "OneRoster scoreStatus values are folded here for gradebook outcomes." ]
allowedValues
[
{
"value": "not_submitted",
"meaning": "Expected work has not been submitted.",
"useWhen": "Expected work has not been submitted.",
"invalidWhen": "Invalid when not_submitted does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "submitted",
"meaning": "Work was submitted but may not be fully graded.",
"useWhen": "Work was submitted but may not be fully graded.",
"invalidWhen": "Invalid when submitted does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "partially_graded",
"meaning": "Some scoring exists but the outcome is not final.",
"useWhen": "Some scoring exists but the outcome is not final.",
"invalidWhen": "Invalid when partially_graded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fully_graded",
"meaning": "The outcome is settled enough for reports and mastery evidence.",
"useWhen": "The outcome is settled enough for reports and mastery evidence.",
"invalidWhen": "Invalid when fully_graded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "exempt",
"meaning": "The student is exempt and the row should not count as missing or failed.",
"useWhen": "The student is exempt and the row should not count as missing or failed.",
"invalidWhen": "Invalid when exempt does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing",
"meaning": "The source has explicitly marked expected work missing.",
"useWhen": "The source has explicitly marked expected work missing.",
"invalidWhen": "Invalid when missing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "voided",
"meaning": "The row is retained for audit but excluded from normal reports.",
"useWhen": "The row is retained for audit but excluded from normal reports.",
"invalidWhen": "Invalid when voided does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}source_kind
- anchor
- field-alpha-result-record-source-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Source family that produced the outcome.
- range
- One documented enum value.
- relationship
- Governed value on result record; no free-text relationship, and consumers must use the documented enum values.
- example
- qti
- invalidWhen
- Invalid when source_kind is not one of oneroster, qti, nwea, college_board, barrons, princeton_review, platform_native, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before result record is written; adding a new source_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must be one documented source kind.", "External producers also require source_adapter_id." ]
allowedValues
[
{
"value": "oneroster",
"meaning": "OneRoster gradebook import or API write.",
"useWhen": "OneRoster gradebook import or API write.",
"invalidWhen": "Invalid when oneroster does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "qti",
"meaning": "QTI-backed platform scorer or self-paced assessment.",
"useWhen": "QTI-backed platform scorer or self-paced assessment.",
"invalidWhen": "Invalid when qti does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "nwea",
"meaning": "NWEA MAP ingest or real-time result observation.",
"useWhen": "NWEA MAP ingest or real-time result observation.",
"invalidWhen": "Invalid when nwea does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "college_board",
"meaning": "College Board or AP Classroom adapter.",
"useWhen": "College Board or AP Classroom adapter.",
"invalidWhen": "Invalid when college_board does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "barrons",
"meaning": "Barron's adapter.",
"useWhen": "Barron's adapter.",
"invalidWhen": "Invalid when barrons does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "princeton_review",
"meaning": "Princeton Review adapter.",
"useWhen": "Princeton Review adapter.",
"invalidWhen": "Invalid when princeton_review does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "platform_native",
"meaning": "A TimeBack-native scorer or migration repair adapter.",
"useWhen": "A TimeBack-native scorer or migration repair adapter.",
"invalidWhen": "Invalid when platform_native does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}gradebook_item_id
- anchor
- field-alpha-result-record-gradebook-item-id
- type
- TEXT
- nullability
- Nullable; required for gradebook results.
- key
- Not a key
- meaning
- Plain Alpha id for the gradebook item this outcome answers.
- range
- Text within documented constraints.
- relationship
- Many result records can belong to one gradebook item.
- example
- gb_unit_1_quiz
- invalidWhen
- Invalid when gradebook_item_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results.line_item_sourced_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "When result_kind is gradebook, must reference alpha.gradebook_item.", "May be null for MAP, self-paced, or external outcomes that do not belong to a section gradebook item." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}content_id
- anchor
- field-alpha-result-record-content-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Content item, test, question, or lesson the outcome came from when the result is content-backed.
- range
- Text within documented constraints.
- relationship
- Many result records may reference one Content item/version.
- example
- content_factoring_gate_v3
- invalidWhen
- Invalid when content_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must reference Content when present.", "Do not use this for report-card rows without content evidence." ]
allowedValues
[]
provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}test_family_id
- anchor
- field-alpha-result-record-test-family-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Stable family id for external or platform tests whose versions change over time.
- range
- Text within documented constraints.
- relationship
- References a Content test family when known.
- example
- ap_calc_ab_practice
- invalidWhen
- Invalid when test_family_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Required for external assessment adapters when a platform test family exists.", "Must not be parsed from a producer display name." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}subject_id
- anchor
- field-alpha-result-record-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical Results outcome-ingress subject preserved on settled result/component/grading facts. Public report filters and HMG use the separate exact-six dictionary boundary.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, social_studies, or when an unsupported source display string bypasses write-time alias folding.
- edgeCases
- Outcome writes preserve canonical social_studies, while public report filters and mastery/HMG stay exact-six; adding another outcome subject requires an owner-approved Results dictionary policy change.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results subject boundaries are generated from alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052; outcome facts accept seven while report/HMG semantics remain six.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Outcome-ingress closed enum: math, reading, language, science, vocabulary, writing, social_studies.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Canonical social_studies app outcomes are accepted and preserved; course-grain History/Civics labels and unrelated source junk remain excluded or quarantined." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "social_studies",
"meaning": "Canonical Social Studies subject accepted for owner-directed app outcome and XP ingress. It remains outside public report filters and mastery-gate/HMG derivation.",
"useWhen": "Canonical Social Studies subject accepted for owner-directed app outcome and XP ingress. It remains outside public report filters and mastery-gate/HMG derivation.",
"invalidWhen": "Invalid when social_studies does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-result-record-canonical-term-id
- type
- TEXT
- nullability
- Nullable; required when the outcome belongs to a term.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}occurred_on
- anchor
- field-alpha-result-record-occurred-on
- type
- DATE
- nullability
- Required.
- key
- Sort/filter key
- meaning
- Calendar date the outcome became true for the student.
- range
- ISO 8601 calendar date.
- relationship
- Time value on result record; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-21
- invalidWhen
- Invalid when occurred_on is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Use ISO 8601 date.", "Must not be derived from a display term when a typed timestamp exists." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}score
- anchor
- field-alpha-result-record-score
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Numeric score in the effective score scale, when the source has one.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on result record; it feeds documented calculations or reports but does not identify another object.
- example
- 47
- invalidWhen
- Invalid when score is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must fit the effective score scale.; When present for gradebook outcomes, effective_score_scale_id is required..
- upstreamSource
- oneroster.results.score
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must fit the effective score scale.", "When present for gradebook outcomes, effective_score_scale_id is required." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}score_percent
- anchor
- field-alpha-result-record-score-percent
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Normalized percent score used for mastery and report calculations.
- range
- 0.00 through 100.00
- relationship
- Numeric value on result record; it feeds documented calculations or reports but does not identify another object.
- example
- 93.20
- invalidWhen
- Invalid when score_percent is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 100 inclusive.; Policy converts to pass/mastery through alpha.policy.* values..
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "0 through 100 inclusive.", "Policy converts to pass/mastery through alpha.policy.* values." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}text_score
- anchor
- field-alpha-result-record-text-score
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Non-numeric score value, such as a rubric or letter value.
- range
- Text within documented constraints.
- relationship
- Attribute on result record; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for text_score.
- example
- A
- invalidWhen
- Invalid when text_score violates its documented constraints: 0 to 255 visible characters.; Must align to the effective score scale when one is present..
- edgeCases
- text_score follows the result record lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- oneroster.results.text_score
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "0 to 255 visible characters.", "Must align to the effective score scale when one is present." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}effective_score_scale_id
- anchor
- field-alpha-result-record-effective-score-scale-id
- type
- TEXT
- nullability
- Nullable; required when score/text_score needs a scale.
- key
- Not a key
- meaning
- The exact score scale chosen for this result before persistence.
- range
- Text within documented constraints.
- relationship
- References alpha.score_scale.
- example
- scale_percent_0_100
- invalidWhen
- Invalid when effective_score_scale_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.score_scales and score-scale join tables
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must resolve to exactly one same-tenant score scale.", "Ambiguous or missing scale resolution rejects the write." ]
allowedValues
[]
provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}mastery_cutoff_met
- anchor
- field-alpha-result-record-mastery-cutoff-met
- type
- BOOLEAN
- nullability
- Nullable.
- key
- Not a key
- meaning
- Whether this result met the active mastery cutoff policy when the row was settled.
- range
- true or false.
- relationship
- Boolean row state on result record; scoped to this row and not a join target.
- example
- true
- invalidWhen
- Invalid when mastery_cutoff_met is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- mastery_cutoff_met follows the result record lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Null when no mastery policy applies.", "Computed by the surface using alpha.policy.mastery_cutoff, not client math." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}canonical_response
- anchor
- field-alpha-result-record-canonical-response
- type
- JSONB
- nullability
- Nullable.
- key
- Not a key
- meaning
- QTI EAP5/EAP6 canonical response payload when item-level response evidence exists, plus adapter diagnostics when an accepted raw row is excluded from a derived measure.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on result record; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"RESPONSE":"B"}
- invalidWhen
- Invalid when canonical_response is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- QTI EAP5/EAP6 canonical response
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must be JSON object or array allowed by the QTI answer schema.", "Required for QTI-backed item evidence.", "For raw mastery-gate rows with no parseable grade token, import_diagnostics.mastery_skipped_reason explains that the row was accepted but excluded from mastery ledger, HMG, working grade, and track state." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}is_correct
- anchor
- field-alpha-result-record-is-correct
- type
- BOOLEAN
- nullability
- Nullable.
- key
- Not a key
- meaning
- Canonical correctness flag for item-level evidence.
- range
- true or false.
- relationship
- Boolean row state on result record; scoped to this row and not a join target.
- example
- true
- invalidWhen
- Invalid when is_correct is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- is_correct follows the result record lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Null when the result is not item-level or correctness is not applicable.", "Must be set when a QTI adapter emits canonical_response for a dichotomous item." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}source_adapter_id
- anchor
- field-alpha-result-record-source-adapter-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Named adapter or scorer that wrote this row.
- range
- Text within documented constraints.
- relationship
- Many result records are written by one source adapter.
- example
- adapter_qti_platform
- invalidWhen
- Invalid when source_adapter_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must reference alpha.source_adapter.", "Direct free-form external producer rows are invalid." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}producer_result_id
- anchor
- field-alpha-result-record-producer-result-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- External producer's durable id for the source outcome.
- range
- Text within documented constraints.
- relationship
- References producer result in the same tenant when present; many result record rows may point to one referenced producer result.
- example
- cb_2026_ap_calc_7712
- invalidWhen
- Invalid when producer_result_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Required for external producers that supply ids.", "Not globally unique without source_adapter_id and tenant_id." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}qti_attempt_id
- anchor
- field-alpha-result-record-qti-attempt-id
- type
- TEXT
- nullability
- Nullable; required for QTI-backed result records.
- key
- Tenant-unique query key
- meaning
- Stable QTI attempt identifier preserved by Results for exact settled-result lookup.
- range
- Text within documented constraints.
- relationship
- References one QTI attempt; unique with tenant_id among settled Results rows.
- example
- qti-attempt-alex-001
- invalidWhen
- Invalid when qti_attempt_id is missing on a QTI-backed result, belongs to another tenant, or is inferred by a consumer from producer_result_id.
- edgeCases
- Legacy non-QTI and source-backed union rows remain nullable. QTI adapters populate the typed reference at the Results write boundary.
- upstreamSource
- QTI attempt and administration producer envelope
- privacyTag
- PII: No
- indexPolicy
- Unique partial index with tenant_id; exact API query key.
- sourceBasis
- Typed producer identity is preserved at the Results adapter boundary; Results does not copy QTI or Content-owned semantics.
- storageBehavior
- Alpha extension field projected through the public result_record view.
constraints
[ "1 to 255 printable characters when present.", "Required when source_kind=qti." ]
allowedValues
[]
provenance
{
"label": "Canonical QTI result reference",
"changeType": "EXTEND",
"basis": "Results preserves typed QTI/administration/Content identities required to dereference one settled attempt without consumer correlation state.",
"upstream": "QTI attempt and administration producer envelope",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}administration_id
- anchor
- field-alpha-result-record-administration-id
- type
- TEXT
- nullability
- Nullable; required for QTI-backed result records.
- key
- Not a key
- meaning
- Administration that assigned or launched the QTI attempt.
- range
- Text within documented constraints.
- relationship
- Typed reference to the owning administration record; Results does not duplicate administration state.
- example
- admin-results-demo-math-g7-001
- invalidWhen
- Invalid when administration_id is missing on a QTI-backed result, belongs to another tenant, or is inferred by a consumer from producer_result_id.
- edgeCases
- Legacy non-QTI and source-backed union rows remain nullable. QTI adapters populate the typed reference at the Results write boundary.
- upstreamSource
- QTI attempt and administration producer envelope
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Typed producer identity is preserved at the Results adapter boundary; Results does not copy QTI or Content-owned semantics.
- storageBehavior
- Alpha extension field projected through the public result_record view.
constraints
[ "1 to 255 printable characters when present.", "Required when source_kind=qti." ]
allowedValues
[]
provenance
{
"label": "Canonical QTI result reference",
"changeType": "EXTEND",
"basis": "Results preserves typed QTI/administration/Content identities required to dereference one settled attempt without consumer correlation state.",
"upstream": "QTI attempt and administration producer envelope",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}qti_session_id
- anchor
- field-alpha-result-record-qti-session-id
- type
- TEXT
- nullability
- Nullable; required for QTI-backed result records.
- key
- Not a key
- meaning
- QTI delivery session that contains the attempt.
- range
- Text within documented constraints.
- relationship
- Typed reference to the QTI delivery session.
- example
- qti-session-alex-math-g7-001
- invalidWhen
- Invalid when qti_session_id is missing on a QTI-backed result, belongs to another tenant, or is inferred by a consumer from producer_result_id.
- edgeCases
- Legacy non-QTI and source-backed union rows remain nullable. QTI adapters populate the typed reference at the Results write boundary.
- upstreamSource
- QTI attempt and administration producer envelope
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Typed producer identity is preserved at the Results adapter boundary; Results does not copy QTI or Content-owned semantics.
- storageBehavior
- Alpha extension field projected through the public result_record view.
constraints
[ "1 to 255 printable characters when present.", "Required when source_kind=qti." ]
allowedValues
[]
provenance
{
"label": "Canonical QTI result reference",
"changeType": "EXTEND",
"basis": "Results preserves typed QTI/administration/Content identities required to dereference one settled attempt without consumer correlation state.",
"upstream": "QTI attempt and administration producer envelope",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}qti_test_id
- anchor
- field-alpha-result-record-qti-test-id
- type
- TEXT
- nullability
- Nullable; required for QTI-backed result records.
- key
- Not a key
- meaning
- Stable QTI test/artifact identifier used for the attempt.
- range
- Text within documented constraints.
- relationship
- Typed reference to the QTI test artifact.
- example
- qti-test-linear-equations-g7-form-a
- invalidWhen
- Invalid when qti_test_id is missing on a QTI-backed result, belongs to another tenant, or is inferred by a consumer from producer_result_id.
- edgeCases
- Legacy non-QTI and source-backed union rows remain nullable. QTI adapters populate the typed reference at the Results write boundary.
- upstreamSource
- QTI attempt and administration producer envelope
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Typed producer identity is preserved at the Results adapter boundary; Results does not copy QTI or Content-owned semantics.
- storageBehavior
- Alpha extension field projected through the public result_record view.
constraints
[ "1 to 255 printable characters when present.", "Required when source_kind=qti." ]
allowedValues
[]
provenance
{
"label": "Canonical QTI result reference",
"changeType": "EXTEND",
"basis": "Results preserves typed QTI/administration/Content identities required to dereference one settled attempt without consumer correlation state.",
"upstream": "QTI attempt and administration producer envelope",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}qti_artifact_version_id
- anchor
- field-alpha-result-record-qti-artifact-version-id
- type
- TEXT
- nullability
- Nullable; required for QTI-backed result records.
- key
- Not a key
- meaning
- Immutable QTI artifact version delivered for the attempt.
- range
- Text within documented constraints.
- relationship
- Typed reference to the exact QTI artifact version.
- example
- qti-version-linear-equations-g7-form-a-v1
- invalidWhen
- Invalid when qti_artifact_version_id is missing on a QTI-backed result, belongs to another tenant, or is inferred by a consumer from producer_result_id.
- edgeCases
- Legacy non-QTI and source-backed union rows remain nullable. QTI adapters populate the typed reference at the Results write boundary.
- upstreamSource
- QTI attempt and administration producer envelope
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Typed producer identity is preserved at the Results adapter boundary; Results does not copy QTI or Content-owned semantics.
- storageBehavior
- Alpha extension field projected through the public result_record view.
constraints
[ "1 to 255 printable characters when present.", "Required when source_kind=qti." ]
allowedValues
[]
provenance
{
"label": "Canonical QTI result reference",
"changeType": "EXTEND",
"basis": "Results preserves typed QTI/administration/Content identities required to dereference one settled attempt without consumer correlation state.",
"upstream": "QTI attempt and administration producer envelope",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}content_test_spec_id
- anchor
- field-alpha-result-record-content-test-spec-id
- type
- TEXT
- nullability
- Nullable; required for QTI-backed result records.
- key
- Not a key
- meaning
- Content-owned test specification that defines the assessment composition.
- range
- Text within documented constraints.
- relationship
- Typed reference to one Content test_spec; Results does not copy or reinterpret the specification.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000501
- invalidWhen
- Invalid when content_test_spec_id is missing on a QTI-backed result, belongs to another tenant, or is inferred by a consumer from producer_result_id.
- edgeCases
- Legacy non-QTI and source-backed union rows remain nullable. QTI adapters populate the typed reference at the Results write boundary.
- upstreamSource
- QTI attempt and administration producer envelope
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Typed producer identity is preserved at the Results adapter boundary; Results does not copy QTI or Content-owned semantics.
- storageBehavior
- Alpha extension field projected through the public result_record view.
constraints
[ "1 to 255 printable characters when present.", "Required when source_kind=qti." ]
allowedValues
[]
provenance
{
"label": "Canonical QTI result reference",
"changeType": "EXTEND",
"basis": "Results preserves typed QTI/administration/Content identities required to dereference one settled attempt without consumer correlation state.",
"upstream": "QTI attempt and administration producer envelope",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}test_kind
- anchor
- field-alpha-result-record-test-kind
- type
- TEXT enum
- nullability
- Nullable; required for QTI-backed result records.
- key
- Not a key
- meaning
- Consumer-facing assessment purpose for this QTI-backed settled result.
- range
- One documented enum value.
- relationship
- Governed classification supplied by the producing administration/test contract.
- example
- mastery_gate
- invalidWhen
- Invalid when test_kind is missing on a QTI-backed result, belongs to another tenant, or is inferred by a consumer from producer_result_id.
- edgeCases
- Legacy non-QTI and source-backed union rows remain nullable. QTI adapters populate the typed reference at the Results write boundary.
- upstreamSource
- QTI attempt and administration producer envelope
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Typed producer identity is preserved at the Results adapter boundary; Results does not copy QTI or Content-owned semantics.
- storageBehavior
- Alpha extension field projected through the public result_record view.
constraints
[ "1 to 255 printable characters when present.", "Required when source_kind=qti." ]
allowedValues
[
{
"value": "mastery_gate",
"meaning": "QTI-backed mastery gate result.",
"useWhen": "The owning administration identifies the test as mastery_gate.",
"invalidWhen": "Invalid when guessed from score or Content naming.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "adaptive_diagnostic",
"meaning": "QTI-backed adaptive diagnostic result.",
"useWhen": "The owning administration identifies the test as adaptive_diagnostic.",
"invalidWhen": "Invalid when guessed from score or Content naming.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "formative",
"meaning": "QTI-backed formative result.",
"useWhen": "The owning administration identifies the test as formative.",
"invalidWhen": "Invalid when guessed from score or Content naming.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Canonical QTI result reference",
"changeType": "EXTEND",
"basis": "Results preserves typed QTI/administration/Content identities required to dereference one settled attempt without consumer correlation state.",
"upstream": "QTI attempt and administration producer envelope",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}superseded_by_result_record_id
- anchor
- field-alpha-result-record-superseded-by-result-record-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Later result row that replaced this row.
- range
- PostgreSQL UUID.
- relationship
- Self-reference: one old result may be superseded by one later result.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000102
- invalidWhen
- Invalid when superseded_by_result_record_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must reference alpha.result_record in the same tenant when present.", "Used for corrections and migration reconciliation." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}xp_disposition
- anchor
- field-alpha-result-record-xp-disposition
- type
- TEXT enum
- nullability
- Nullable for legacy and source-backed rows; required for accepted public-native writes.
- key
- Not a key
- meaning
- Typed outcome of Results-owned XP evaluation for this accepted public result record.
- range
- One documented enum value.
- relationship
- Summarizes the one-to-zero-or-one relationship from this result record to alpha.xp_ledger.
- example
- awarded
- invalidWhen
- Invalid when the value is not awarded or not_awarded, or contradicts xp_award_id and xp_non_award_reason.
- edgeCases
- Legacy and source-backed rows may be null until an explicit governed reconciliation evaluates them; historical public-native rows since the AP One cutover are repaired with their original result timestamp.
- upstreamSource
- alpha.policy.xp_award_formula plus Content/Curriculum expected_xp
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results owns both the award decision and its typed non-award explanation.
- storageBehavior
- Alpha extension field projected through the public view.
constraints
[ "accepted public-native writes must be awarded or not_awarded", "awarded requires xp_award_id and no xp_non_award_reason", "not_awarded requires a typed xp_non_award_reason and no xp_award_id" ]
allowedValues
[
{
"value": "awarded",
"meaning": "Results atomically wrote the matching verified_attempt XP ledger row.",
"useWhen": "The public result satisfies the active alpha.policy.xp_award_formula trigger.",
"invalidWhen": "Invalid when xp_award_id is absent or the matching ledger row does not exist.",
"provenance": {
"label": "Results XP policy output",
"basis": "alpha.policy.xp_award_formula public result-record trigger.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
},
{
"value": "not_awarded",
"meaning": "Results accepted the result record but a typed trigger condition was not satisfied.",
"useWhen": "The accepted public result is not eligible for an XP ledger row.",
"invalidWhen": "Invalid when xp_non_award_reason is absent or an xp_award_id is present.",
"provenance": {
"label": "Results XP policy output",
"basis": "alpha.policy.xp_award_formula public result-record trigger.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
}
]provenance
{
"label": "Results XP policy output",
"changeType": "EXTEND + RESTRICT",
"basis": "Results owns both the award decision and its typed non-award explanation.",
"upstream": "alpha.policy.xp_award_formula plus Content/Curriculum expected_xp",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}xp_award_id
- anchor
- field-alpha-result-record-xp-award-id
- type
- TEXT
- nullability
- Nullable; required when xp_disposition is awarded.
- key
- Foreign key when present
- meaning
- Deterministic Results-owned identifier of the exactly-once XP award created for this result.
- range
- Text within documented constraints.
- relationship
- Many historical result versions may resolve to the same deduplicated producer fact, but exactly one current producer fact references one XP ledger award.
- example
- xp_award_9bc84f0bb6dd44ad8ee450fd52093b1a
- invalidWhen
- Invalid when it does not resolve to the same-tenant ledger row or the ledger evidence has a different source_adapter_id or producer_result_id.
- edgeCases
- An idempotent replay returns the original identifier and does not create a second ledger row.
- upstreamSource
- Alpha-only; derived from accepted result identity
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- The stable award identity enforces exactly-once XP per producer fact.
- storageBehavior
- Alpha extension field projected through the public view.
constraints
[ "References alpha.xp_ledger within the same tenant when present.", "Derived from tenant_id, source_adapter_id, producer_result_id, and the verified_attempt reason.", "Must be null when xp_disposition is not_awarded." ]
allowedValues
[]
provenance
{
"label": "Results XP ledger identity",
"changeType": "EXTEND",
"basis": "The stable award identity enforces exactly-once XP per producer fact.",
"upstream": "Alpha-only; derived from accepted result identity",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}xp_non_award_reason
- anchor
- field-alpha-result-record-xp-non-award-reason
- type
- TEXT enum
- nullability
- Nullable; required when xp_disposition is not_awarded.
- key
- Not a key
- meaning
- Typed reason an accepted public result did not materialize an XP award.
- range
- One documented enum value.
- relationship
- Policy diagnostic on result record; no free-text relationship.
- example
- expected_xp_missing
- invalidWhen
- Invalid when the value is outside the governed enum or contradicts the result evidence.
- edgeCases
- A zero score is numeric and can produce a zero-XP verified_attempt ledger row; it is not score_percent_missing.
- upstreamSource
- alpha.policy.xp_award_formula plus Content/Curriculum expected_xp
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Typed non-award explanations make accepted-but-ineligible outcomes observable.
- storageBehavior
- Alpha extension field projected through the public view.
constraints
[ "Must be one documented value when xp_disposition is not_awarded.", "Must be null when xp_disposition is awarded.", "Must describe the first unmet trigger condition in policy order." ]
allowedValues
[
{
"value": "outcome_not_fully_graded",
"meaning": "outcome_status is not fully_graded.",
"useWhen": "The outcome is accepted but not settled for award.",
"invalidWhen": "Invalid when outcome_status is fully_graded.",
"provenance": {
"label": "Results XP policy output",
"basis": "alpha.policy.xp_award_formula",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
},
{
"value": "score_percent_missing",
"meaning": "No numeric score_percent was supplied.",
"useWhen": "A public result lacks the score basis required by policy.",
"invalidWhen": "Invalid when score_percent is numeric.",
"provenance": {
"label": "Results XP policy output",
"basis": "alpha.policy.xp_award_formula",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
},
{
"value": "content_id_missing",
"meaning": "No Content identifier was supplied.",
"useWhen": "Expected XP cannot be resolved without content_id.",
"invalidWhen": "Invalid when content_id is present.",
"provenance": {
"label": "Results XP policy output",
"basis": "alpha.policy.xp_award_formula",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
},
{
"value": "expected_xp_missing",
"meaning": "Content/Curriculum has no resolvable expected_xp for content_id.",
"useWhen": "The result is otherwise awardable but the owning expected-XP basis is absent.",
"invalidWhen": "Invalid when a same-tenant Content/Curriculum expected_xp basis resolves.",
"provenance": {
"label": "Results XP policy output",
"basis": "alpha.policy.xp_award_formula",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
},
{
"value": "duplicate_producer_result",
"meaning": "A prior row already owns the producer fact and award decision.",
"useWhen": "Historical reconciliation finds duplicate rows for tenant, adapter, and producer result.",
"invalidWhen": "Invalid for the first-ranked producer fact.",
"provenance": {
"label": "Results XP policy output",
"basis": "alpha.policy.xp_award_formula",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
}
]provenance
{
"label": "Results XP policy output",
"changeType": "EXTEND + RESTRICT",
"basis": "Typed non-award explanations make accepted-but-ineligible outcomes observable.",
"upstream": "alpha.policy.xp_award_formula plus Content/Curriculum expected_xp",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}modified_at
- anchor
- field-alpha-result-record-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on result record; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}deleted_at
- anchor
- field-alpha-result-record-deleted-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Soft-delete timestamp. Null means active; non-null rows stay available for authorized audit reads and are excluded from ordinary current reports.
- range
- UTC timestamp.
- relationship
- Time value on result record; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when deleted_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results owns this lifecycle field; base soft-delete facts stay on their own surfaces or in source evidence.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Never hard-delete audit-significant Results rows.", "Non-null values must be UTC.", "Legal erasure flows are separate privacy workflows." ]
allowedValues
[]
provenance
{
"label": "Results lifecycle extension",
"changeType": "EXTEND",
"basis": "Results owns this lifecycle field; base soft-delete facts stay on their own surfaces or in source evidence.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}alpha.test_result_component · Test result component
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- QTI assessment results and source-shaped TimeBack assessment rows with item responses.
- purpose
- First-class rows for the hierarchy inside a stored test result: test, section, part, and question_response. This is the answer to 'store a test result' when a consumer needs item/section structure.
- lifecycle
- Created by QTI/platform scorers or Results raw-ingest adapters at the same time as alpha.result_record. Corrected or superseded with the owning result record; soft-deleted for audit rather than hard-deleted.
- primaryKey
- (tenant_id, test_result_component_id)
- storage
- Extension table/read model; stores hierarchy, response, score, correctness, feedback, and source evidence, not copied Content/QTI blank-instrument fields.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-test-result-component
- fieldCount
- 30
itds
[
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]relationships
[ "Belongs to one alpha.result_record.", "Belongs to one student.", "May point to the Content test/item identifiers that produced the result.", "parent_test_result_component_id links test -> section -> part -> question_response." ]
constraints
[ "component_role is closed to test, section, part, or question_response.", "question_response rows carry response_identifier and response_value as typed fields.", "question_response rows may carry DOK and KC refs; mastery-gate policy consumes these fields for conjunctive facet bars and KC graph consistency.", "Consumers must not parse alpha.result_record.canonical_response JSON to reconstruct this hierarchy.", "No class, course, organization, or event join is required to read the test result hierarchy." ]
invalidExamples
[ "A test result stored only as canonical_response JSON with no component rows.", "A question-response row that must be recovered by joining class/course/org/event tables.", "A free-form component_role such as item or subsection." ]
example
{
"test_result_component_id": "trc_alex_unit_1_q_response",
"result_record_id": "018f4b4e-9c7a-7d3d-8b2f-2f673a000101",
"component_role": "question_response",
"parent_test_result_component_id": "trc_alex_unit_1_part_1",
"question_id": "question_linear_equations_solve_x",
"response_identifier": "RESPONSE",
"response_value": "x=4",
"is_correct": true
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (30)
test_result_component_id
- anchor
- field-alpha-test-result-component-test-result-component-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this test-result hierarchy row.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one test result component row within a tenant; downstream Results rows reference this value by its named id field.
- example
- trc_alex_unit_1_q_response
- invalidWhen
- Invalid when test_result_component_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Unique within tenant.", "Deterministically mapped from source result id and component identity when imported." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}tenant_id
- anchor
- field-alpha-test-result-component-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}result_record_id
- anchor
- field-alpha-test-result-component-result-record-id
- type
- UUID
- nullability
- Required.
- key
- Join key
- meaning
- Owning settled result record.
- range
- PostgreSQL UUID.
- relationship
- Many component rows belong to one result record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000101
- invalidWhen
- Invalid when result_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference alpha.result_record.", "All component rows for a test result share this value." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}student_id
- anchor
- field-alpha-test-result-component-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-test-result-component-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical Results outcome-ingress subject preserved on settled result/component/grading facts. Public report filters and HMG use the separate exact-six dictionary boundary.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, social_studies, or when an unsupported source display string bypasses write-time alias folding.
- edgeCases
- Outcome writes preserve canonical social_studies, while public report filters and mastery/HMG stay exact-six; adding another outcome subject requires an owner-approved Results dictionary policy change.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results subject boundaries are generated from alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052; outcome facts accept seven while report/HMG semantics remain six.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Outcome-ingress closed enum: math, reading, language, science, vocabulary, writing, social_studies.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Canonical social_studies app outcomes are accepted and preserved; course-grain History/Civics labels and unrelated source junk remain excluded or quarantined." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "social_studies",
"meaning": "Canonical Social Studies subject accepted for owner-directed app outcome and XP ingress. It remains outside public report filters and mastery-gate/HMG derivation.",
"useWhen": "Canonical Social Studies subject accepted for owner-directed app outcome and XP ingress. It remains outside public report filters and mastery-gate/HMG derivation.",
"invalidWhen": "Invalid when social_studies does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}content_id
- anchor
- field-alpha-test-result-component-content-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Content test/item id that produced this row when known.
- range
- Text within documented constraints.
- relationship
- References Content when present.
- example
- content_linear_equations_quiz
- invalidWhen
- Invalid when content_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "References Content; not a course/class id.", "May be null for external rows until mapped." ]
allowedValues
[]
provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}test_family_id
- anchor
- field-alpha-test-result-component-test-family-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Stable family id for the assessment across versions.
- range
- Text within documented constraints.
- relationship
- References test family in the same tenant when present; many test result component rows may point to one referenced test family.
- example
- family_linear_equations
- invalidWhen
- Invalid when test_family_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Matches alpha.result_record.test_family_id.", "Used for external tests whose individual forms change." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}component_role
- anchor
- field-alpha-test-result-component-component-role
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Position of this row in the test-result hierarchy.
- range
- One documented enum value.
- relationship
- Governed value on test result component; no free-text relationship, and consumers must use the documented enum values.
- example
- question_response
- invalidWhen
- Invalid when component_role is not one of test, section, part, question_response, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before test result component is written; adding a new component_role value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha extension over settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Closed enum: test, section, part, question_response." ]
allowedValues
[
{
"value": "test",
"meaning": "Root row for one stored test result.",
"useWhen": "Root row for one stored test result.",
"invalidWhen": "Invalid when test does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "section",
"meaning": "Section-level result row under the test root.",
"useWhen": "Section-level result row under the test root.",
"invalidWhen": "Invalid when section does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "part",
"meaning": "Part-level result row under a section.",
"useWhen": "Part-level result row under a section.",
"invalidWhen": "Invalid when part does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "question_response",
"meaning": "Question-level response row with response/correctness fields.",
"useWhen": "Question-level response row with response/correctness fields.",
"invalidWhen": "Invalid when question_response does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}component_id
- anchor
- field-alpha-test-result-component-component-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- Source or Content component id for this test, section, part, or question.
- range
- Text within documented constraints.
- relationship
- References component in the same tenant when present; many test result component rows may point to one referenced component.
- example
- question_linear_equations_solve_x
- invalidWhen
- Invalid when component_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be stable inside the result record.", "For question_response rows this is usually the question id." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}parent_test_result_component_id
- anchor
- field-alpha-test-result-component-parent-test-result-component-id
- type
- TEXT
- nullability
- Nullable for test root; required for children.
- key
- Not a key
- meaning
- Parent row id in the test -> section -> part -> question_response hierarchy.
- range
- Text within documented constraints.
- relationship
- Self-reference within one result record.
- example
- trc_alex_unit_1_part_1
- invalidWhen
- Invalid when parent_test_result_component_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Null only for component_role=test.", "Child rows must point to a row from the same result_record_id." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}sequence_index
- anchor
- field-alpha-test-result-component-sequence-index
- type
- INTEGER
- nullability
- Required.
- key
- Sort key
- meaning
- Display/order position among siblings.
- range
- Integer within documented constraints.
- relationship
- Numeric value on test result component; it feeds documented calculations or reports but does not identify another object.
- example
- 1
- invalidWhen
- Invalid when sequence_index is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Starts at 0 for the test root and 1 for the first authored child in a level..
- upstreamSource
- Alpha extension over settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Starts at 0 for the test root and 1 for the first authored child in a level." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}section_id
- anchor
- field-alpha-test-result-component-section-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Section id for section, part, and question_response rows.
- range
- Text within documented constraints.
- relationship
- References People & Orgs section in the same tenant when present; many test result component rows may point to one referenced People & Orgs section.
- example
- section_linear_equations_a
- invalidWhen
- Invalid when section_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Present when the source test has sections.", "No class section meaning; this is assessment structure." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}part_id
- anchor
- field-alpha-test-result-component-part-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Part id for part and question_response rows.
- range
- Text within documented constraints.
- relationship
- References part in the same tenant when present; many test result component rows may point to one referenced part.
- example
- part_linear_equations_response
- invalidWhen
- Invalid when part_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Present when the source has assessment parts." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}question_id
- anchor
- field-alpha-test-result-component-question-id
- type
- TEXT
- nullability
- Nullable; required for question_response rows.
- key
- Not a key
- meaning
- Question/item id answered by the student.
- range
- Text within documented constraints.
- relationship
- References question in the same tenant when present; many test result component rows may point to one referenced question.
- example
- question_linear_equations_solve_x
- invalidWhen
- Invalid when question_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be first-class, not extracted by parsing response JSON." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}response_identifier
- anchor
- field-alpha-test-result-component-response-identifier
- type
- TEXT
- nullability
- Nullable; required for question_response rows.
- key
- Not a key
- meaning
- QTI/EAP response identifier or producer response slot.
- range
- Text within documented constraints.
- relationship
- Attribute on test result component; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for response_identifier.
- example
- RESPONSE
- invalidWhen
- Invalid when response_identifier is missing, violates its documented constraints: Example: RESPONSE.; First-class response slot; do not parse canonical_response for this..
- edgeCases
- response_identifier follows the test result component lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Example: RESPONSE.", "First-class response slot; do not parse canonical_response for this." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}response_value
- anchor
- field-alpha-test-result-component-response-value
- type
- TEXT
- nullability
- Nullable; required when the source captures an answer.
- key
- Not a key
- meaning
- Student's normalized answer value for the response slot.
- range
- Text within documented constraints.
- relationship
- Attribute on test result component; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for response_value.
- example
- x=4
- invalidWhen
- Invalid when response_value is missing, violates its documented constraints: Stringified scalar/list/object from the source response.; Use source_evidence only for audit payload details..
- edgeCases
- response_value follows the test result component lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Stringified scalar/list/object from the source response.", "For gated embedded textEntryInteraction questions, the submitted string is compared exactly against Content/QTI answer_key.correct_response.values for the matching response_identifier.", "Use source_evidence only for audit payload details." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}score
- anchor
- field-alpha-test-result-component-score
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Component-level numeric score when supplied.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on test result component; it feeds documented calculations or reports but does not identify another object.
- example
- 1
- invalidWhen
- Invalid when score is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: For question_response rows this is the item score; root rows may carry the test score..
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "For question_response rows this is the item score; root rows may carry the test score." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}score_percent
- anchor
- field-alpha-test-result-component-score-percent
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Component-level normalized percent.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on test result component; it feeds documented calculations or reports but does not identify another object.
- example
- 100
- invalidWhen
- Invalid when score_percent is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 100 inclusive when present..
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "0 through 100 inclusive when present." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}max_score
- anchor
- field-alpha-test-result-component-max-score
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Maximum possible component score when supplied.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on test result component; it feeds documented calculations or reports but does not identify another object.
- example
- 1
- invalidWhen
- Invalid when max_score is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Required only when component-level max score is known..
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required only when component-level max score is known." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}is_correct
- anchor
- field-alpha-test-result-component-is-correct
- type
- BOOLEAN
- nullability
- Nullable.
- key
- Not a key
- meaning
- Component-level correctness flag.
- range
- true or false.
- relationship
- Boolean row state on test result component; scoped to this row and not a join target.
- example
- true
- invalidWhen
- Invalid when is_correct is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- is_correct follows the test result component lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for dichotomous question_response rows when the scorer knows correctness.", "For gated embedded choice and textEntryInteraction question responses, Results derives this by exact matching response_value against Content/QTI answer_key.correct_response.values; the renderer does not set correctness." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}dok
- anchor
- field-alpha-test-result-component-dok
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Webb Depth of Knowledge level required by this question response.
- range
- 1 through 4.
- relationship
- Attribute on test result component; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for dok.
- example
- 3
- invalidWhen
- Invalid when dok is outside 1..4, is used as a difficulty proxy, or is ignored by mastery-gate facet evaluation when present.
- edgeCases
- Rows without item-level DOK remain valid; the mastery policy falls back to scalar cutoff only when no facet evidence exists.
- upstreamSource
- Content item DOK plus settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Question response rows expose the governed DOK tag so mastery gates can evaluate DOK-split bars without parsing canonical_response.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Valid DOK values are 1, 2, 3, or 4.", "DOK is the cognitive process the item requires, not item difficulty.", "For mastery_gate rows, alpha.policy.mastery_cutoff consumes question_response DOK to evaluate DOK1-2 core and DOK3 transfer facets separately." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "Question response rows expose the governed DOK tag so mastery gates can evaluate DOK-split bars without parsing canonical_response.",
"upstream": "Content item DOK plus settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}kc_refs
- anchor
- field-alpha-test-result-component-kc-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured list of Curriculum KC ids explicitly evidenced by this component row.
- range
- JSON value matching documented schema.
- relationship
- References zero or more Curriculum KC ids; typed references inside the JSON are evidence scope, not copied Curriculum objects.
- example
- ["kc_linear_equations"]
- invalidWhen
- Invalid when kc_refs is malformed JSON, contains copied KC objects, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- An empty array is valid for non-KC-scoped components. Mastery-gate shell-mastery checks apply only when explicit scope KC refs are present.
- upstreamSource
- Curriculum KC ids plus settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Question response rows expose scoped KC refs so mastery gates can validate claims against student_kc_state without a separate node-consistency object.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a JSON array of KC id strings.", "For mastery_gate rows, explicit KC refs define the scoped KC graph consistency check.", "Do not copy Curriculum node objects into this field; store references only." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "Question response rows expose scoped KC refs so mastery gates can validate claims against student_kc_state without a separate node-consistency object.",
"upstream": "Curriculum KC ids plus settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}feedback
- anchor
- field-alpha-test-result-component-feedback
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Pre-authored or scorer feedback attached to this component result.
- range
- Text within documented constraints.
- relationship
- Attribute on test result component; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for feedback.
- example
- Correct.
- invalidWhen
- Invalid when feedback violates its documented constraints: Short display-safe text; detailed audit remains source evidence..
- edgeCases
- feedback follows the test result component lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Short display-safe text; detailed audit remains source evidence." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}rubric_score
- anchor
- field-alpha-test-result-component-rubric-score
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Rubric outcome label or score band for rubric-scored components.
- range
- Text within documented constraints.
- relationship
- Attribute on test result component; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for rubric_score.
- example
- full_credit
- invalidWhen
- Invalid when rubric_score violates its documented constraints: Use plain rubric score labels, not an opaque rubric blob..
- edgeCases
- rubric_score follows the test result component lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Use plain rubric score labels, not an opaque rubric blob." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}source_adapter_id
- anchor
- field-alpha-test-result-component-source-adapter-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Named scorer or adapter that wrote the component row.
- range
- Text within documented constraints.
- relationship
- References alpha.source_adapter.
- example
- adapter_qti_platform
- invalidWhen
- Invalid when source_adapter_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must match the owning result_record source adapter." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}producer_result_id
- anchor
- field-alpha-test-result-component-producer-result-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Producer's durable id for the owning test result.
- range
- Text within documented constraints.
- relationship
- References producer result in the same tenant when present; many test result component rows may point to one referenced producer result.
- example
- qti-attempt-alex-001
- invalidWhen
- Invalid when producer_result_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Pairs with source_adapter_id for reconciliation." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}source_evidence
- anchor
- field-alpha-test-result-component-source-evidence
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Audit pointer to the producer row and response slot.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on test result component; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"response_identifier":"RESPONSE"}
- invalidWhen
- Invalid when source_evidence is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "May include upstream_table, producer_result_id, response_identifier, and raw_question_ref.", "Not the public hierarchy; public hierarchy fields above are authoritative." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}occurred_on
- anchor
- field-alpha-test-result-component-occurred-on
- type
- DATE
- nullability
- Required.
- key
- Not a key
- meaning
- Calendar date the component result became true.
- range
- ISO 8601 calendar date.
- relationship
- Time value on test result component; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-01
- invalidWhen
- Invalid when occurred_on is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Matches owning result_record.occurred_on." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}modified_at
- anchor
- field-alpha-test-result-component-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on test result component; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}deleted_at
- anchor
- field-alpha-test-result-component-deleted-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Soft-delete timestamp. Null means active; non-null rows stay available for authorized audit reads and are excluded from ordinary current reports.
- range
- UTC timestamp.
- relationship
- Time value on test result component; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when deleted_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results owns this lifecycle field; base soft-delete facts stay on their own surfaces or in source evidence.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Never hard-delete audit-significant Results rows.", "Non-null values must be UTC.", "Legal erasure flows are separate privacy workflows." ]
allowedValues
[]
provenance
{
"label": "Results lifecycle extension",
"changeType": "EXTEND",
"basis": "Results owns this lifecycle field; base soft-delete facts stay on their own surfaces or in source evidence.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}alpha.ai_grading_audit · AI grading audit
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Platform AI grader output over settled result records and test-result components.
- purpose
- First-class audit rows for AI-graded tests and free-response questions: which model graded it, which prompt was used, when it ran, what feedback it produced, what revision it is, and whether a human overrode it.
- lifecycle
- Created by the trusted AI grader or raw-ingest adapter when AI feedback is produced. Later AI revisions supersede earlier rows; human review can mark a row overridden without deleting the original.
- primaryKey
- (tenant_id, ai_grading_audit_id)
- storage
- Extension table/read model; stores AI model, prompt, feedback, revision, and override provenance, not copied Content/QTI blank-instrument fields or private grader logs.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-ai-grading-audit
- fieldCount
- 30
itds
[
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]relationships
[ "Belongs to one alpha.result_record.", "May link to one alpha.test_result_component for question or question_part feedback.", "Belongs to one student, subject, content item, and optional test family.", "supersedes_ai_grading_audit_id links revision history inside the same tenant." ]
constraints
[ "grading_stage is closed to overall, question, or question_part.", "grading_status is closed to proposed, accepted, superseded, or overridden.", "ai_model, prompt_ref, prompt_hash, output_feedback, and graded_at must be present for meaningful AI feedback rows.", "question/question_part rows should carry test_result_component_id so clients can display feedback next to the response.", "Consumers must not read private grader logs, parse canonical_response, or use Content/QTI objects as the AI feedback audit log." ]
invalidExamples
[ "A dashboard that finds the model name only in private logs.", "AI feedback hidden only inside alpha.result_record.canonical_response JSON.", "A question-level feedback row with no link to alpha.test_result_component.", "A free-form grading_status value such as reviewed." ]
example
{
"ai_grading_audit_id": "ai_grade_audit_alex_unit_1_q1_v1",
"result_record_id": "018f4b4e-9c7a-7d3d-8b2f-2f673a000101",
"test_result_component_id": "trc_alex_unit_1_q_response",
"grading_stage": "question",
"grading_status": "accepted",
"ai_provider": "openai",
"ai_model": "gpt-5.5",
"prompt_hash": "sha256:linear-equations-ai-grader-v1",
"output_feedback": "Correct. You isolated x and checked the solution.",
"revision_number": 1
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (30)
ai_grading_audit_id
- anchor
- field-alpha-ai-grading-audit-ai-grading-audit-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this AI grading audit row.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one ai grading audit row within a tenant; downstream Results rows reference this value by its named id field.
- example
- ai_grade_audit_alex_unit_1_q1_v1
- invalidWhen
- Invalid when ai_grading_audit_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Unique within tenant.", "Stable across reads for audit/revision references." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}tenant_id
- anchor
- field-alpha-ai-grading-audit-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}result_record_id
- anchor
- field-alpha-ai-grading-audit-result-record-id
- type
- UUID
- nullability
- Required.
- key
- Join key
- meaning
- Owning settled result record.
- range
- PostgreSQL UUID.
- relationship
- Many AI grading audit rows can belong to one result record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000101
- invalidWhen
- Invalid when result_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference alpha.result_record." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}test_result_component_id
- anchor
- field-alpha-ai-grading-audit-test-result-component-id
- type
- TEXT
- nullability
- Nullable for overall rows; required when feedback belongs to one question or question part.
- key
- Not a key
- meaning
- Test-result hierarchy row this AI feedback describes.
- range
- Text within documented constraints.
- relationship
- Links question-level feedback to a first-class test-result component.
- example
- trc_alex_unit_1_q_response
- invalidWhen
- Invalid when test_result_component_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled result evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.test_result_component when present.", "Use null only for grading_stage=overall." ]
allowedValues
[]
provenance
{
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}student_id
- anchor
- field-alpha-ai-grading-audit-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-ai-grading-audit-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical Results outcome-ingress subject preserved on settled result/component/grading facts. Public report filters and HMG use the separate exact-six dictionary boundary.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, social_studies, or when an unsupported source display string bypasses write-time alias folding.
- edgeCases
- Outcome writes preserve canonical social_studies, while public report filters and mastery/HMG stay exact-six; adding another outcome subject requires an owner-approved Results dictionary policy change.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results subject boundaries are generated from alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052; outcome facts accept seven while report/HMG semantics remain six.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Outcome-ingress closed enum: math, reading, language, science, vocabulary, writing, social_studies.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Canonical social_studies app outcomes are accepted and preserved; course-grain History/Civics labels and unrelated source junk remain excluded or quarantined." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "social_studies",
"meaning": "Canonical Social Studies subject accepted for owner-directed app outcome and XP ingress. It remains outside public report filters and mastery-gate/HMG derivation.",
"useWhen": "Canonical Social Studies subject accepted for owner-directed app outcome and XP ingress. It remains outside public report filters and mastery-gate/HMG derivation.",
"invalidWhen": "Invalid when social_studies does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary policy alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}content_id
- anchor
- field-alpha-ai-grading-audit-content-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Content test/item id that produced this graded result when known.
- range
- Text within documented constraints.
- relationship
- References Content when present.
- example
- content_linear_equations_quiz
- invalidWhen
- Invalid when content_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "References Content; not a class/course id." ]
allowedValues
[]
provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}test_family_id
- anchor
- field-alpha-ai-grading-audit-test-family-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Stable assessment family id across versions/forms.
- range
- Text within documented constraints.
- relationship
- References test family in the same tenant when present; many ai grading audit rows may point to one referenced test family.
- example
- family_linear_equations
- invalidWhen
- Invalid when test_family_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.results plus Alpha extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster result is renamed and extended for self-paced and external outcomes.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Matches result/test family when supplied." ]
allowedValues
[]
provenance
{
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}grading_stage
- anchor
- field-alpha-ai-grading-audit-grading-stage
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Scope of this AI grading row.
- range
- One documented enum value.
- relationship
- Governed value on ai grading audit; no free-text relationship, and consumers must use the documented enum values.
- example
- question
- invalidWhen
- Invalid when grading_stage is not one of overall, question, question_part, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before ai grading audit is written; adding a new grading_stage value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Closed enum: overall, question, question_part." ]
allowedValues
[
{
"value": "overall",
"meaning": "Audit row for the overall test/result grade and feedback.",
"useWhen": "Audit row for the overall test/result grade and feedback.",
"invalidWhen": "Invalid when overall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "question",
"meaning": "Audit row for a single question response.",
"useWhen": "Audit row for a single question response.",
"invalidWhen": "Invalid when question does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "question_part",
"meaning": "Audit row for one part of a multi-part question.",
"useWhen": "Audit row for one part of a multi-part question.",
"invalidWhen": "Invalid when question_part does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}grading_status
- anchor
- field-alpha-ai-grading-audit-grading-status
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Lifecycle status of this feedback revision.
- range
- One documented enum value.
- relationship
- Governed value on ai grading audit; no free-text relationship, and consumers must use the documented enum values.
- example
- accepted
- invalidWhen
- Invalid when grading_status is not one of proposed, accepted, superseded, overridden, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before ai grading audit is written; adding a new grading_status value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Closed enum: proposed, accepted, superseded, overridden." ]
allowedValues
[
{
"value": "proposed",
"meaning": "AI output was produced but has not become the accepted feedback.",
"useWhen": "AI output was produced but has not become the accepted feedback.",
"invalidWhen": "Invalid when proposed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "accepted",
"meaning": "AI output is the accepted grader feedback for this stage/revision.",
"useWhen": "AI output is the accepted grader feedback for this stage/revision.",
"invalidWhen": "Invalid when accepted does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "superseded",
"meaning": "A later AI or human-reviewed revision replaced this output.",
"useWhen": "A later AI or human-reviewed revision replaced this output.",
"invalidWhen": "Invalid when superseded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "overridden",
"meaning": "A human override replaced this AI output for display or scoring.",
"useWhen": "A human override replaced this AI output for display or scoring.",
"invalidWhen": "Invalid when overridden does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}ai_provider
- anchor
- field-alpha-ai-grading-audit-ai-provider
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- AI provider or platform grader service that produced the row.
- range
- Text within documented constraints.
- relationship
- Attribute on ai grading audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for ai_provider.
- example
- openai
- invalidWhen
- Invalid when ai_provider is missing, violates its documented constraints: Use a stable producer name such as openai or anthropic..
- edgeCases
- ai_provider follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Use a stable producer name such as openai or anthropic." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}ai_model
- anchor
- field-alpha-ai-grading-audit-ai-model
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Model family/name used for grading.
- range
- Text within documented constraints.
- relationship
- Attribute on ai grading audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for ai_model.
- example
- gpt-5.5
- invalidWhen
- Invalid when ai_model is missing, violates its documented constraints: Required so consumers can answer which model graded the response..
- edgeCases
- ai_model follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Required so consumers can answer which model graded the response." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}model_version
- anchor
- field-alpha-ai-grading-audit-model-version
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Pinned model version or dated release used by the grader.
- range
- Text within documented constraints.
- relationship
- Attribute on ai grading audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for model_version.
- example
- gpt-5.5-2026-06-01
- invalidWhen
- Invalid when model_version violates its documented constraints: Should be populated when the provider exposes a stable version id..
- edgeCases
- model_version follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Should be populated when the provider exposes a stable version id." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}grader_ref
- anchor
- field-alpha-ai-grading-audit-grader-ref
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Internal grader/rubric workflow reference.
- range
- Text within documented constraints.
- relationship
- Attribute on ai grading audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for grader_ref.
- example
- grader://linear-equations/free-response
- invalidWhen
- Invalid when grader_ref violates its documented constraints: Does not contain secrets or private prompt text..
- edgeCases
- grader_ref follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Does not contain secrets or private prompt text." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}prompt_ref
- anchor
- field-alpha-ai-grading-audit-prompt-ref
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Stable prompt template reference used by the grader.
- range
- Text within documented constraints.
- relationship
- Attribute on ai grading audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for prompt_ref.
- example
- prompt://linear-equations-ai-grader/v1
- invalidWhen
- Invalid when prompt_ref is missing, violates its documented constraints: Required for audit; prompt bodies live in governed prompt storage, not this row..
- edgeCases
- prompt_ref follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Required for audit; prompt bodies live in governed prompt storage, not this row." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}prompt_hash
- anchor
- field-alpha-ai-grading-audit-prompt-hash
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Hash of the prompt template/version used.
- range
- Text within documented constraints.
- relationship
- Attribute on ai grading audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for prompt_hash.
- example
- sha256:linear-equations-ai-grader-v1
- invalidWhen
- Invalid when prompt_hash is missing, violates its documented constraints: Use a sha256-style hash so revisions are comparable without exposing prompt text..
- edgeCases
- prompt_hash follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Use a sha256-style hash so revisions are comparable without exposing prompt text." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}input_evidence_refs
- anchor
- field-alpha-ai-grading-audit-input-evidence-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to result, response, rubric, and source evidence used by the grader.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on ai grading audit; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- ["result:018f4b4e-9c7a-7d3d-8b2f-2f673a000101","component:trc_alex_unit_1_q_response"]
- invalidWhen
- Invalid when input_evidence_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Store references, not private raw prompt payloads or secrets." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}output_feedback
- anchor
- field-alpha-ai-grading-audit-output-feedback
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Display-safe feedback produced by the AI grader.
- range
- Text within documented constraints.
- relationship
- Attribute on ai grading audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for output_feedback.
- example
- Correct. You isolated x and checked the solution.
- invalidWhen
- Invalid when output_feedback is missing, violates its documented constraints: Question rows carry question-level feedback; overall rows carry overall test feedback..
- edgeCases
- output_feedback follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Question rows carry question-level feedback; overall rows carry overall test feedback." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}output_json
- anchor
- field-alpha-ai-grading-audit-output-json
- type
- JSONB
- nullability
- Nullable.
- key
- Not a key
- meaning
- Structured grader output such as rubric dimensions, rationale summary, or classification.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on ai grading audit; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"rubric_score":"full_credit"}
- invalidWhen
- Invalid when output_json is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must not be the only place user-facing feedback or model provenance appears." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}score
- anchor
- field-alpha-ai-grading-audit-score
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Numeric score assigned by the AI grader for this stage.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on ai grading audit; it feeds documented calculations or reports but does not identify another object.
- example
- 1
- invalidWhen
- Invalid when score is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Use only when the AI grader produced a stage score..
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Use only when the AI grader produced a stage score." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}score_percent
- anchor
- field-alpha-ai-grading-audit-score-percent
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Normalized percent score assigned by the AI grader.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on ai grading audit; it feeds documented calculations or reports but does not identify another object.
- example
- 100
- invalidWhen
- Invalid when score_percent is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 100 inclusive when present..
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "0 through 100 inclusive when present." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}rubric_score
- anchor
- field-alpha-ai-grading-audit-rubric-score
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Rubric outcome label or score band assigned by the AI grader.
- range
- Text within documented constraints.
- relationship
- Attribute on ai grading audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for rubric_score.
- example
- full_credit
- invalidWhen
- Invalid when rubric_score violates its documented constraints: Use plain labels, not an opaque rubric blob..
- edgeCases
- rubric_score follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Use plain labels, not an opaque rubric blob." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}confidence
- anchor
- field-alpha-ai-grading-audit-confidence
- type
- NUMERIC(4,3)
- nullability
- Nullable.
- key
- Not a key
- meaning
- AI grader confidence when supplied.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on ai grading audit; it feeds documented calculations or reports but does not identify another object.
- example
- 0.982
- invalidWhen
- Invalid when confidence is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be between 0 and 1 inclusive when present..
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be between 0 and 1 inclusive when present." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}revision_number
- anchor
- field-alpha-ai-grading-audit-revision-number
- type
- INTEGER
- nullability
- Required.
- key
- Sort key
- meaning
- Monotonic revision number for this feedback target.
- range
- Integer within documented constraints.
- relationship
- Numeric value on ai grading audit; it feeds documented calculations or reports but does not identify another object.
- example
- 1
- invalidWhen
- Invalid when revision_number is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Starts at 1; later revisions increment..
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Starts at 1; later revisions increment." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}supersedes_ai_grading_audit_id
- anchor
- field-alpha-ai-grading-audit-supersedes-ai-grading-audit-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Prior audit row replaced by this revision.
- range
- Text within documented constraints.
- relationship
- Self-reference for revision history.
- example
- ai_grade_audit_alex_unit_1_q1_v0
- invalidWhen
- Invalid when supersedes_ai_grading_audit_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.ai_grading_audit in the same tenant when present." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}human_override_by
- anchor
- field-alpha-ai-grading-audit-human-override-by
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Person id or actor subject that overrode this AI output.
- range
- Text within documented constraints.
- relationship
- May reference a People & Orgs person/actor.
- example
- person_teacher_9142
- invalidWhen
- Invalid when human_override_by violates its documented constraints: Required when grading_status=overridden and an individual actor is known..
- edgeCases
- human_override_by follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required when grading_status=overridden and an individual actor is known." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}human_override_reason
- anchor
- field-alpha-ai-grading-audit-human-override-reason
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Plain reason for human override.
- range
- Text within documented constraints.
- relationship
- Attribute on ai grading audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for human_override_reason.
- example
- Rubric awarded partial credit for an equivalent equation form.
- invalidWhen
- Invalid when human_override_reason violates its documented constraints: Required when grading_status=overridden unless policy permits redaction..
- edgeCases
- human_override_reason follows the ai grading audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Required when grading_status=overridden unless policy permits redaction." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}graded_at
- anchor
- field-alpha-ai-grading-audit-graded-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- UTC timestamp when the AI grader produced this output.
- range
- UTC timestamp.
- relationship
- Time value on ai grading audit; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-01T15:12:00Z
- invalidWhen
- Invalid when graded_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha extension over settled result/grader evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "This answers when the model graded the work." ]
allowedValues
[]
provenance
{
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
}modified_at
- anchor
- field-alpha-ai-grading-audit-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on ai grading audit; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}deleted_at
- anchor
- field-alpha-ai-grading-audit-deleted-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Soft-delete timestamp. Null means active; non-null rows stay available for authorized audit reads and are excluded from ordinary current reports.
- range
- UTC timestamp.
- relationship
- Time value on ai grading audit; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when deleted_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results owns this lifecycle field; base soft-delete facts stay on their own surfaces or in source evidence.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Never hard-delete audit-significant Results rows.", "Non-null values must be UTC.", "Legal erasure flows are separate privacy workflows." ]
allowedValues
[]
provenance
{
"label": "Results lifecycle extension",
"changeType": "EXTEND",
"basis": "Results owns this lifecycle field; base soft-delete facts stay on their own surfaces or in source evidence.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}alpha.gradebook_item · Gradebook item
- kind
- SQL view
- moduleHome
- Results
- changeType
- RENAME
- upstream
- oneroster.line_items
- purpose
- The assignment, activity, assessment, or gradebook column that can produce one or more result records.
- lifecycle
- Created from OneRoster lineItems or Alpha authoring. Result records point here; the item is not the student's attempt and is not a report-card rollup.
- primaryKey
- (tenant_id, gradebook_item_id)
- storage
- SQL view column projection; no Alpha storage.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-gradebook-item
- fieldCount
- 15
itds
[
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]relationships
[ "Can have many result records.", "Can have one default score scale binding.", "References a section/class, category, academic session, and school when backed by OneRoster." ]
constraints
[ "assign_date and due_date are ISO dates when present.", "result_value_min must be <= result_value_max when both are present.", "The item is a blank work target, never the student's settled result." ]
invalidExamples
[ "A gradebook item with a student score stored on it.", "A due_date before assign_date.", "A line-item alias with no tenant boundary." ]
example
{
"gradebook_item_id": "gb_unit_1_quiz",
"title": "Unit 1 algebra readiness quiz",
"assign_date": "2026-08-15",
"due_date": "2026-08-22"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (15)
gradebook_item_id
- anchor
- field-alpha-gradebook-item-gradebook-item-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key
- meaning
- Plain Alpha id for the gradebook item; aliases OneRoster lineItems.sourcedId.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one gradebook item row within a tenant; downstream Results rows reference this value by its named id field.
- example
- gb_unit_1_quiz
- invalidWhen
- Invalid when gradebook_item_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.line_items.sourced_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "1 to 255 printable characters.", "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}tenant_id
- anchor
- field-alpha-gradebook-item-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}source_sourced_id
- anchor
- field-alpha-gradebook-item-source-sourced-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Original OneRoster lineItems.sourcedId when the item came from OneRoster.
- range
- Text within documented constraints.
- relationship
- References source sourced in the same tenant when present; many gradebook item rows may point to one referenced source sourced.
- example
- lineitem-unit-1-quiz
- invalidWhen
- Invalid when source_sourced_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.line_items.sourced_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "1 to 255 printable characters when present.", "Must stay stable across OneRoster imports." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}title
- anchor
- field-alpha-gradebook-item-title
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Teacher-readable title of the gradebook item.
- range
- Text within documented constraints.
- relationship
- Attribute on gradebook item; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for title.
- example
- Unit 1 algebra readiness quiz
- invalidWhen
- Invalid when title is missing, violates its documented constraints: 1 to 255 visible characters.; Must not contain credentials or private comments..
- edgeCases
- title follows the gradebook item lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- oneroster.line_items.title
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "1 to 255 visible characters.", "Must not contain credentials or private comments." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}description
- anchor
- field-alpha-gradebook-item-description
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Short explanation of the gradebook item for teachers, students, or reports.
- range
- Text within documented constraints.
- relationship
- Attribute on gradebook item; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for description.
- example
- Checks readiness for linear-equation work.
- invalidWhen
- Invalid when description violates its documented constraints: 0 to 1000 visible characters.; Must not be the only place a typed relationship or policy lives..
- edgeCases
- description follows the gradebook item lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- oneroster.line_items.description
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 to 1000 visible characters.", "Must not be the only place a typed relationship or policy lives." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}assign_date
- anchor
- field-alpha-gradebook-item-assign-date
- type
- DATE
- nullability
- Required for OneRoster-backed items.
- key
- Not a key
- meaning
- Date the item was assigned.
- range
- ISO 8601 calendar date.
- relationship
- Time value on gradebook item; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-08-15
- invalidWhen
- Invalid when assign_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- oneroster.line_items.assign_date
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "ISO 8601 date.", "Required for OneRoster lineItems." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}due_date
- anchor
- field-alpha-gradebook-item-due-date
- type
- DATE
- nullability
- Required for OneRoster-backed items.
- key
- Not a key
- meaning
- Date work is due.
- range
- ISO 8601 calendar date.
- relationship
- Time value on gradebook item; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-08-22
- invalidWhen
- Invalid when due_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- oneroster.line_items.due_date
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "ISO 8601 date.", "Must be on or after assign_date when both are present." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}class_id
- anchor
- field-alpha-gradebook-item-class-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Class/section that owns this item when the item is section-backed.
- range
- Text within documented constraints.
- relationship
- Many gradebook items can belong to one class.
- example
- class-algebra-1-a
- invalidWhen
- Invalid when class_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.line_items.class_sourced_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference People & Orgs class in the same tenant when present." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}category_id
- anchor
- field-alpha-gradebook-item-category-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Gradebook category such as quiz, homework, or test.
- range
- Text within documented constraints.
- relationship
- Many gradebook items can belong to one category.
- example
- quiz
- invalidWhen
- Invalid when category_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.line_items.category_sourced_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference a governed gradebook category when present." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}academic_session_id
- anchor
- field-alpha-gradebook-item-academic-session-id
- type
- TEXT
- nullability
- Required for section gradebook items.
- key
- Not a key
- meaning
- Academic session/term for this item.
- range
- Text within documented constraints.
- relationship
- References People & Orgs academic session.
- example
- term_2025_26_fall
- invalidWhen
- Invalid when academic_session_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.line_items.academic_session_sourced_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference the canonical academic session.", "Clients use canonical_term_id on reports, not display names." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}school_id
- anchor
- field-alpha-gradebook-item-school-id
- type
- TEXT
- nullability
- Required for section gradebook items.
- key
- Not a key
- meaning
- School org that owns the item.
- range
- Text within documented constraints.
- relationship
- Many gradebook items can belong to one school.
- example
- school_north_valley
- invalidWhen
- Invalid when school_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.line_items.school_sourced_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference People & Orgs school org in the same tenant." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}result_value_min
- anchor
- field-alpha-gradebook-item-result-value-min
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Lowest numeric score allowed for result records on this item.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on gradebook item; it feeds documented calculations or reports but does not identify another object.
- example
- 0
- invalidWhen
- Invalid when result_value_min is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be <= result_value_max when both are present..
- upstreamSource
- oneroster.line_items.result_value_min
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be <= result_value_max when both are present." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}result_value_max
- anchor
- field-alpha-gradebook-item-result-value-max
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Highest numeric score allowed for result records on this item.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on gradebook item; it feeds documented calculations or reports but does not identify another object.
- example
- 100
- invalidWhen
- Invalid when result_value_max is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= result_value_min when both are present..
- upstreamSource
- oneroster.line_items.result_value_max
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- OneRoster lineItem is renamed to a plain gradebook item.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be >= result_value_min when both are present." ]
allowedValues
[]
provenance
{
"label": "Gradebook alias",
"changeType": "RENAME",
"basis": "OneRoster lineItem is renamed to a plain gradebook item.",
"upstream": "oneroster.line_items",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}default_score_scale_id
- anchor
- field-alpha-gradebook-item-default-score-scale-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Default score scale attached to the item when no result-specific scale overrides it.
- range
- Text within documented constraints.
- relationship
- References alpha.score_scale.
- example
- scale_percent_0_100
- invalidWhen
- Invalid when default_score_scale_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.score_scales and score-scale join tables
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference alpha.score_scale when present.", "Exactly one effective scale is required before a scored result persists." ]
allowedValues
[]
provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}modified_at
- anchor
- field-alpha-gradebook-item-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on gradebook item; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.score_scale · Score scale
- kind
- SQL view
- moduleHome
- Results
- changeType
- RENAME + RESTRICT
- upstream
- oneroster.score_scales, oneroster.line_item_score_scales, oneroster.result_score_scales
- purpose
- The explicit score interpretation used by gradebook items and result records so score math is validated before persistence.
- lifecycle
- Created from OneRoster scoreScales and score-scale join rows or Alpha authoring. Resolved at write time for scored result rows.
- primaryKey
- (tenant_id, score_scale_id)
- storage
- SQL view projection plus validation; no Alpha storage.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-score-scale
- fieldCount
- 11
itds
[
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]relationships
[ "Can be bound to gradebook items.", "Can be bound directly to result records.", "Can scope to org, course, or class." ]
constraints
[ "A scored result may not persist when zero or multiple effective score scales match.", "score_scale_value is structured before public Alpha reads; consumers do not parse OneRoster scoreScaleValue strings." ]
invalidExamples
[ "Two active default scales for the same result.", "A numeric score outside the resolved scale range.", "A free-form scoreScaleValue string exposed as the only Alpha interpretation." ]
example
{
"score_scale_id": "scale_percent_0_100",
"scale_type": "percentage",
"min_value": 0,
"max_value": 100
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (11)
score_scale_id
- anchor
- field-alpha-score-scale-score-scale-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key
- meaning
- Plain Alpha id for a score scale; aliases OneRoster scoreScales.sourcedId.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one score scale row within a tenant; downstream Results rows reference this value by its named id field.
- example
- scale_percent_0_100
- invalidWhen
- Invalid when score_scale_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.score_scales.sourced_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "1 to 255 printable characters.", "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}tenant_id
- anchor
- field-alpha-score-scale-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}title
- anchor
- field-alpha-score-scale-title
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Human-readable score scale name.
- range
- Text within documented constraints.
- relationship
- Attribute on score scale; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for title.
- example
- Percent 0 to 100
- invalidWhen
- Invalid when title is missing, violates its documented constraints: 1 to 255 visible characters..
- edgeCases
- title follows the score scale lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- oneroster.score_scales.title
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "1 to 255 visible characters." ]
allowedValues
[]
provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}scale_type
- anchor
- field-alpha-score-scale-scale-type
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Plain score-scale type used by validation and display.
- range
- One documented enum value.
- relationship
- Governed value on score scale; no free-text relationship, and consumers must use the documented enum values.
- example
- percentage
- invalidWhen
- Invalid when scale_type is not one of percentage, points, letter, rubric, pass_fail, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before score scale is written; adding a new scale_type value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- oneroster.score_scales.type
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be one documented value.", "Open OneRoster type strings fold to this governed set at write time." ]
allowedValues
[
{
"value": "percentage",
"meaning": "A numeric percent scale.",
"useWhen": "A numeric percent scale.",
"invalidWhen": "Invalid when percentage does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "points",
"meaning": "A numeric point scale.",
"useWhen": "A numeric point scale.",
"invalidWhen": "Invalid when points does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "letter",
"meaning": "A letter-grade mapping.",
"useWhen": "A letter-grade mapping.",
"invalidWhen": "Invalid when letter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "rubric",
"meaning": "A rubric-level mapping.",
"useWhen": "A rubric-level mapping.",
"invalidWhen": "Invalid when rubric does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "pass_fail",
"meaning": "A binary pass/fail mapping.",
"useWhen": "A binary pass/fail mapping.",
"invalidWhen": "Invalid when pass_fail does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}min_value
- anchor
- field-alpha-score-scale-min-value
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Lowest numeric score accepted by this scale.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on score scale; it feeds documented calculations or reports but does not identify another object.
- example
- 0
- invalidWhen
- Invalid when min_value is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Required for percentage and points scales.; Must be <= max_value..
- upstreamSource
- oneroster.score_scales and score-scale join tables
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for percentage and points scales.", "Must be <= max_value." ]
allowedValues
[]
provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}max_value
- anchor
- field-alpha-score-scale-max-value
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Highest numeric score accepted by this scale.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on score scale; it feeds documented calculations or reports but does not identify another object.
- example
- 100
- invalidWhen
- Invalid when max_value is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Required for percentage and points scales.; Must be >= min_value..
- upstreamSource
- oneroster.score_scales and score-scale join tables
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for percentage and points scales.", "Must be >= min_value." ]
allowedValues
[]
provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}value_map
- anchor
- field-alpha-score-scale-value-map
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured mapping of labels, ranges, or source values to interpreted values.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on score scale; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"A":{"min":90,"max":100},"B":{"min":80,"max":89.99}}
- invalidWhen
- Invalid when value_map is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- oneroster.score_scales.score_scale_value
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be a JSON object or array matching scale_type.", "Generated from OneRoster score_scale_value before Alpha reads." ]
allowedValues
[]
provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}scope_kind
- anchor
- field-alpha-score-scale-scope-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Where this scale may apply.
- range
- One documented enum value.
- relationship
- Governed value on score scale; no free-text relationship, and consumers must use the documented enum values.
- example
- gradebook_item
- invalidWhen
- Invalid when scope_kind is not one of org, course, class, gradebook_item, result_record, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before score scale is written; adding a new scope_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- oneroster.score_scales and score-scale join tables
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be one documented value.", "Scope ids must match the scope kind." ]
allowedValues
[
{
"value": "org",
"meaning": "Scale applies to an organization.",
"useWhen": "Scale applies to an organization.",
"invalidWhen": "Invalid when org does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "course",
"meaning": "Scale applies to a course.",
"useWhen": "Scale applies to a course.",
"invalidWhen": "Invalid when course does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "class",
"meaning": "Scale applies to a class.",
"useWhen": "Scale applies to a class.",
"invalidWhen": "Invalid when class does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gradebook_item",
"meaning": "Scale applies to a gradebook item.",
"useWhen": "Scale applies to a gradebook item.",
"invalidWhen": "Invalid when gradebook_item does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "result_record",
"meaning": "Scale applies only to one result record.",
"useWhen": "Scale applies only to one result record.",
"invalidWhen": "Invalid when result_record does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}scope_id
- anchor
- field-alpha-score-scale-scope-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Id of the org, course, class, gradebook item, or result record named by scope_kind.
- range
- Text within documented constraints.
- relationship
- Polymorphic typed relationship controlled by scope_kind.
- example
- gb_unit_1_quiz
- invalidWhen
- Invalid when scope_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- oneroster.score_scales and score-scale join tables
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference the same tenant object named by scope_kind." ]
allowedValues
[]
provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}active
- anchor
- field-alpha-score-scale-active
- type
- BOOLEAN
- nullability
- Required.
- key
- Not a key
- meaning
- Whether this scale can be selected for new scored result writes.
- range
- true or false.
- relationship
- Boolean row state on score scale; scoped to this row and not a join target.
- example
- true
- invalidWhen
- Invalid when active is null, is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- active follows the score scale lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- oneroster.score_scales and score-scale join tables
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Score scale remains explicit and must resolve before scored results persist.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "False scales remain visible for historical rows but cannot be used for new writes." ]
allowedValues
[]
provenance
{
"label": "Score-scale alias",
"changeType": "RENAME + RESTRICT",
"basis": "Score scale remains explicit and must resolve before scored results persist.",
"upstream": "oneroster.score_scales and score-scale join tables",
"itds": [
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
}modified_at
- anchor
- field-alpha-score-scale-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on score scale; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.source_adapter · Source adapter
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- No direct OneRoster or NWEA table; required by cross-cutting external-result rule.
- purpose
- Audit and discovery registry of trusted scorers, importers, and migration adapters that write canonical Results rows. Registration does not act as an XP allowlist: every accepted public result is evaluated by alpha.policy.xp_award_formula.
- lifecycle
- Created by operators or implementation migrations before producer writes. Deactivated adapters cannot create new result records but remain referenced by history.
- primaryKey
- (tenant_id, source_adapter_id)
- storage
- Extension table only; stores adapter identity, active status, and auth-safe metadata. It never stores producer credentials or copied source result fields.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-source-adapter
- fieldCount
- 8
itds
[
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]relationships
[ "Writes many result records.", "Has many result source evidence rows." ]
constraints
[ "External outcomes must reference an active adapter.", "Adapters expose existence and health, not secrets.", "ap-one-bff is registered as an active QTI scorer that writes canonical response evidence.", "Adapter registration is not an award-eligibility switch; accepted public result rows use the same typed XP trigger regardless of producer." ]
invalidExamples
[ "A result row with source_kind external_assessment and no source_adapter_id.", "A secret API key stored in adapter metadata." ]
example
{
"source_adapter_id": "ap-one-bff",
"adapter_kind": "qti_scorer",
"active": true
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (8)
source_adapter_id
- anchor
- field-alpha-source-adapter-source-adapter-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for the named producer adapter.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one source adapter row within a tenant; downstream Results rows reference this value by its named id field.
- example
- adapter_nwea_map
- invalidWhen
- Invalid when source_adapter_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Unique within tenant.", "Use lowercase ASCII letters, digits, hyphens, and underscores." ]
allowedValues
[]
provenance
{
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}tenant_id
- anchor
- field-alpha-source-adapter-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}adapter_kind
- anchor
- field-alpha-source-adapter-adapter-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Type of scorer, import adapter, or migration producer.
- range
- One documented enum value.
- relationship
- Governed value on source adapter; no free-text relationship, and consumers must use the documented enum values.
- example
- nwea_map
- invalidWhen
- Invalid when adapter_kind is not one of platform_scorer, qti_scorer, nwea_map, college_board, barrons, princeton_review, migration, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before source adapter is written; adding a new adapter_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "platform_scorer",
"meaning": "Trusted platform scorer that writes canonical Results rows directly.",
"useWhen": "Trusted platform scorer that writes canonical Results rows directly.",
"invalidWhen": "Invalid when platform_scorer does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "qti_scorer",
"meaning": "QTI scorer that emits EAP5/EAP6 canonical response evidence.",
"useWhen": "QTI scorer that emits EAP5/EAP6 canonical response evidence.",
"invalidWhen": "Invalid when qti_scorer does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "nwea_map",
"meaning": "NWEA MAP adapter using the NWEAMap surface contract.",
"useWhen": "NWEA MAP adapter using the NWEAMap surface contract.",
"invalidWhen": "Invalid when nwea_map does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "college_board",
"meaning": "College Board or AP Classroom result adapter.",
"useWhen": "College Board or AP Classroom result adapter.",
"invalidWhen": "Invalid when college_board does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "barrons",
"meaning": "Barron's result adapter.",
"useWhen": "Barron's result adapter.",
"invalidWhen": "Invalid when barrons does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "princeton_review",
"meaning": "Princeton Review result adapter.",
"useWhen": "Princeton Review result adapter.",
"invalidWhen": "Invalid when princeton_review does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "migration",
"meaning": "One-time migration adapter used for closed-loop reconciliation.",
"useWhen": "One-time migration adapter used for closed-loop reconciliation.",
"invalidWhen": "Invalid when migration does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}display_name
- anchor
- field-alpha-source-adapter-display-name
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Human-readable adapter name shown in support and provenance views.
- range
- Text within documented constraints.
- relationship
- Attribute on source adapter; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for display_name.
- example
- NWEA MAP adapter
- invalidWhen
- Invalid when display_name is missing, violates its documented constraints: 1 to 160 visible characters.; Must not contain secrets..
- edgeCases
- display_name follows the source adapter lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "1 to 160 visible characters.", "Must not contain secrets." ]
allowedValues
[]
provenance
{
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}writes_canonical_response
- anchor
- field-alpha-source-adapter-writes-canonical-response
- type
- BOOLEAN
- nullability
- Required.
- key
- Not a key
- meaning
- Whether this adapter can write QTI canonical_response evidence.
- range
- true or false.
- relationship
- Boolean row state on source adapter; scoped to this row and not a join target.
- example
- false
- invalidWhen
- Invalid when writes_canonical_response is null, is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- writes_canonical_response follows the source adapter lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "True adapters must satisfy the QTI EAP5/EAP6 response contract." ]
allowedValues
[]
provenance
{
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}active
- anchor
- field-alpha-source-adapter-active
- type
- BOOLEAN
- nullability
- Required.
- key
- Not a key
- meaning
- Whether new writes through this adapter are accepted.
- range
- true or false.
- relationship
- Boolean row state on source adapter; scoped to this row and not a join target.
- example
- true
- invalidWhen
- Invalid when active is null, is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- active follows the source adapter lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "False rejects new writes but does not invalidate existing history." ]
allowedValues
[]
provenance
{
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}last_success_at
- anchor
- field-alpha-source-adapter-last-success-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Most recent successful write or import by this adapter.
- range
- UTC timestamp.
- relationship
- Time value on source adapter; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when last_success_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "UTC timestamp when present.", "Used for operator health, not student reporting." ]
allowedValues
[]
provenance
{
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}modified_at
- anchor
- field-alpha-source-adapter-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on source adapter; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.result_source_evidence · Result source evidence
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Platform audit plus adapter ids; references OneRoster, NWEAMap, QTI, or external producer records.
- purpose
- Immutable evidence that lets migration, audit, and reconciliation trace each public result back to its producer row or payload.
- lifecycle
- Written with or before a result_record. Never updated except to add supersession or soft-delete evidence.
- primaryKey
- (tenant_id, source_evidence_id)
- storage
- Extension table stores adapter ids, producer ids, evidence refs, and hashes; not copied source fields.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-result-source-evidence
- fieldCount
- 10
itds
[
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]relationships
[ "May belong to one result record.", "Belongs to one source adapter." ]
constraints
[ "raw_payload_hash and canonical_payload_hash are hashes, not raw secrets or PII dumps.", "source keys must be structured JSON, not parse-only strings." ]
invalidExamples
[ "Raw third-party credential in source_payload.", "A producer_result_id without source_adapter_id." ]
example
{
"source_evidence_id": "evi_10017_map_spring",
"source_adapter_id": "adapter_nwea_map",
"upstream_table": "nweamap.assessment_result_projection"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (10)
source_evidence_id
- anchor
- field-alpha-result-source-evidence-source-evidence-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for one source-evidence row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one result source evidence row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000201
- invalidWhen
- Invalid when source_evidence_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}tenant_id
- anchor
- field-alpha-result-source-evidence-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}result_record_id
- anchor
- field-alpha-result-source-evidence-result-record-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Result record this evidence supports; nullable while evidence is quarantined or awaiting reconciliation.
- range
- PostgreSQL UUID.
- relationship
- Many evidence rows can support one result record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000101
- invalidWhen
- Invalid when result_record_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.result_record when present." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}source_adapter_id
- anchor
- field-alpha-result-source-evidence-source-adapter-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Adapter that supplied this evidence.
- range
- Text within documented constraints.
- relationship
- Many evidence rows belong to one source adapter.
- example
- adapter_nwea_map
- invalidWhen
- Invalid when source_adapter_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.source_adapter." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}producer_result_id
- anchor
- field-alpha-result-source-evidence-producer-result-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Producer-specific result id, when supplied.
- range
- Text within documented constraints.
- relationship
- References producer result in the same tenant when present; many result source evidence rows may point to one referenced producer result.
- example
- 1110000001
- invalidWhen
- Invalid when producer_result_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Not globally unique without tenant and adapter.", "0 to 255 visible characters." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}upstream_table
- anchor
- field-alpha-result-source-evidence-upstream-table
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Approved upstream table, view, or producer collection this evidence came from.
- range
- Text within documented constraints.
- relationship
- Attribute on result source evidence; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for upstream_table.
- example
- nweamap.assessment_result_projection
- invalidWhen
- Invalid when upstream_table is missing, violates its documented constraints: Must be a known upstream source such as oneroster.results or nweamap.assessment_result_projection..
- edgeCases
- upstream_table follows the result source evidence lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a known upstream source such as oneroster.results or nweamap.assessment_result_projection." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}upstream_key
- anchor
- field-alpha-result-source-evidence-upstream-key
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured key values needed to find the source row again.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on result source evidence; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"projection_id":"018f...","test_id":"1110000001"}
- invalidWhen
- Invalid when upstream_key is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a JSON object.", "Relationships are represented as typed fields, not free-text tags." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}raw_payload_hash
- anchor
- field-alpha-result-source-evidence-raw-payload-hash
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Hash of the source payload or row content for idempotency and audit.
- range
- Text within documented constraints.
- relationship
- Attribute on result source evidence; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for raw_payload_hash.
- example
- sha256:2d3f6b4e8c1a0f9b
- invalidWhen
- Invalid when raw_payload_hash violates its documented constraints: Use sha256-prefixed digest.; Do not store raw secrets or credentials..
- edgeCases
- raw_payload_hash follows the result source evidence lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Use sha256-prefixed digest.", "Do not store raw secrets or credentials." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}canonical_payload_hash
- anchor
- field-alpha-result-source-evidence-canonical-payload-hash
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Hash of the normalized canonical payload written into Results.
- range
- Text within documented constraints.
- relationship
- Attribute on result source evidence; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for canonical_payload_hash.
- example
- sha256:bd21c73f0e9a
- invalidWhen
- Invalid when canonical_payload_hash violates its documented constraints: Use sha256-prefixed digest.; Changes when canonicalization changes..
- edgeCases
- canonical_payload_hash follows the result source evidence lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Use sha256-prefixed digest.", "Changes when canonicalization changes." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}imported_at
- anchor
- field-alpha-result-source-evidence-imported-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- UTC timestamp when the surface accepted this evidence.
- range
- UTC timestamp.
- relationship
- Time value on result source evidence; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when imported_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be UTC." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}alpha.result_kc_evidence · Result skill evidence
- kind
- SQL view
- moduleHome
- Results
- changeType
- RENAME + EXTEND
- upstream
- oneroster.result_learning_objective_ids plus Alpha KC ids
- purpose
- Per-result link to a Curriculum KC with the score evidence used to update the student's knowledge state.
- lifecycle
- Written by the surface when a result is settled and a scorer or adapter can map it to one or more curriculum KCs.
- primaryKey
- (tenant_id, result_kc_evidence_id)
- storage
- Unified view; extension table stores KC FK/evidence facts not present in OneRoster.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-result-kc-evidence
- fieldCount
- 10
itds
[
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]relationships
[ "Belongs to one result record.", "References one Curriculum KC.", "Feeds zero or one current student_kc_state update." ]
constraints
[ "kc_id is a foreign key, not a tag.", "Evidence weight must be non-negative.", "Evidence must not be created from unscored Events alone." ]
invalidExamples
[ "KC id parsed from a free-text lesson title.", "A mastery update with no result_record_id or external evidence link." ]
example
{
"result_kc_evidence_id": "rkc_1",
"result_record_id": "res_018f4b4e9c7a",
"kc_id": "kc_linear_equations",
"evidence_kind": "correct"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (10)
result_kc_evidence_id
- anchor
- field-alpha-result-kc-evidence-result-kc-evidence-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this result-to-KC evidence row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one result kc evidence row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000301
- invalidWhen
- Invalid when result_kc_evidence_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}tenant_id
- anchor
- field-alpha-result-kc-evidence-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-result-kc-evidence-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}result_record_id
- anchor
- field-alpha-result-kc-evidence-result-record-id
- type
- UUID
- nullability
- Required.
- key
- Not a key
- meaning
- Result record that produced the KC evidence.
- range
- PostgreSQL UUID.
- relationship
- Many KC evidence rows can belong to one result record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000101
- invalidWhen
- Invalid when result_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference alpha.result_record." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}kc_id
- anchor
- field-alpha-result-kc-evidence-kc-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- Curriculum knowledge-component id this evidence applies to.
- range
- Text within documented constraints.
- relationship
- References one Curriculum KC; many evidence rows can point to one KC.
- example
- kc_linear_equations
- invalidWhen
- Invalid when kc_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference Curriculum KC id.", "Must not be a tag or free text." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}evidence_kind
- anchor
- field-alpha-result-kc-evidence-evidence-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Direction and shape of evidence this result gives for the KC.
- range
- One documented enum value.
- relationship
- Governed value on result kc evidence; no free-text relationship, and consumers must use the documented enum values.
- example
- correct
- invalidWhen
- Invalid when evidence_kind is not one of correct, incorrect, partial, manual, external, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before result kc evidence is written; adding a new evidence_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "correct",
"meaning": "The result gives positive evidence for the KC.",
"useWhen": "The result gives positive evidence for the KC.",
"invalidWhen": "Invalid when correct does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "incorrect",
"meaning": "The result gives negative evidence for the KC.",
"useWhen": "The result gives negative evidence for the KC.",
"invalidWhen": "Invalid when incorrect does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "partial",
"meaning": "The result gives mixed or partial-credit evidence.",
"useWhen": "The result gives mixed or partial-credit evidence.",
"invalidWhen": "Invalid when partial does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "manual",
"meaning": "An authorized human or migration workflow supplied the evidence.",
"useWhen": "An authorized human or migration workflow supplied the evidence.",
"invalidWhen": "Invalid when manual does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "external",
"meaning": "A named external producer supplied normalized evidence.",
"useWhen": "A named external producer supplied normalized evidence.",
"invalidWhen": "Invalid when external does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}score_percent
- anchor
- field-alpha-result-kc-evidence-score-percent
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Percent score contribution for this KC only.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on result kc evidence; it feeds documented calculations or reports but does not identify another object.
- example
- 100.00
- invalidWhen
- Invalid when score_percent is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 100 inclusive when present..
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 through 100 inclusive when present." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}confidence_delta
- anchor
- field-alpha-result-kc-evidence-confidence-delta
- type
- NUMERIC(6,5)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Surface-computed movement applied to confidence for this KC.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on result kc evidence; it feeds documented calculations or reports but does not identify another object.
- example
- 0.12500
- invalidWhen
- Invalid when confidence_delta is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: -1 through 1.; Computed by Results policy, never client math..
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "-1 through 1.", "Computed by Results policy, never client math." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}evidence_weight
- anchor
- field-alpha-result-kc-evidence-evidence-weight
- type
- NUMERIC(8,4)
- nullability
- Required.
- key
- Not a key
- meaning
- Relative weight this evidence carries in mastery calculations.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on result kc evidence; it feeds documented calculations or reports but does not identify another object.
- example
- 1.0000
- invalidWhen
- Invalid when evidence_weight is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0.; Default comes from alpha.policy.* config..
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be >= 0.", "Default comes from alpha.policy.* config." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}evidence_at
- anchor
- field-alpha-result-kc-evidence-evidence-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort key
- meaning
- UTC timestamp when this evidence became true.
- range
- UTC timestamp.
- relationship
- Time value on result kc evidence; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-21T14:30:00Z
- invalidWhen
- Invalid when evidence_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be UTC.", "Usually copied from the result's occurred timestamp." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}alpha.result_content_evidence · Result content evidence
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND + RESTRICT
- upstream
- Alpha result/content links; Results owns the derived content_effectiveness rollup.
- purpose
- Input evidence stream for alpha.content_effectiveness. Results stores the evidence link here and recomputes counters/rates in the content_effectiveness read model.
- lifecycle
- Written after a settled result references content the student used. Results reads this evidence and recomputes alpha.content_effectiveness after relevant result changes.
- primaryKey
- (tenant_id, result_content_evidence_id)
- storage
- Extension table only; stores result-to-content evidence links. Derived counters/rates live in alpha.content_effectiveness, not on this evidence table.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-result-content-evidence
- fieldCount
- 10
itds
[
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]relationships
[ "Belongs to one result record.", "References one Content item and optionally one KC." ]
constraints
[ "validated_by_count, failed_by_count, and effectiveness_rate are forbidden here.", "content_id is a real relationship field." ]
invalidExamples
[ "A Results row named effectiveness_rate.", "A content link stored only in a tag." ]
example
{
"result_content_evidence_id": "rce_1",
"content_id": "content_factoring_video",
"validation_outcome": "validated"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (10)
result_content_evidence_id
- anchor
- field-alpha-result-content-evidence-result-content-evidence-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this result-to-content evidence row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one result content evidence row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000401
- invalidWhen
- Invalid when result_content_evidence_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}tenant_id
- anchor
- field-alpha-result-content-evidence-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-result-content-evidence-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}result_record_id
- anchor
- field-alpha-result-content-evidence-result-record-id
- type
- UUID
- nullability
- Required.
- key
- Not a key
- meaning
- Result record that evaluates or references the content.
- range
- PostgreSQL UUID.
- relationship
- Many content evidence rows can belong to one result.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000101
- invalidWhen
- Invalid when result_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference alpha.result_record." ]
allowedValues
[]
provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}content_id
- anchor
- field-alpha-result-content-evidence-content-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- Content item the student used before or during the result.
- range
- Text within documented constraints.
- relationship
- Many evidence rows can reference one Content item.
- example
- content_factoring_video
- invalidWhen
- Invalid when content_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference Content module.", "Real foreign-key relationship, never tag." ]
allowedValues
[]
provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}content_version_id
- anchor
- field-alpha-result-content-evidence-content-version-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Exact content version used when version evidence exists.
- range
- Text within documented constraints.
- relationship
- References one Content version.
- example
- content_factoring_video_v4
- invalidWhen
- Invalid when content_version_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference Content version when present." ]
allowedValues
[]
provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}kc_id
- anchor
- field-alpha-result-content-evidence-kc-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Curriculum KC this content evidence concerns.
- range
- Text within documented constraints.
- relationship
- References one Curriculum KC.
- example
- kc_factoring_quadratics
- invalidWhen
- Invalid when kc_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference Curriculum KC when present." ]
allowedValues
[]
provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}validation_outcome
- anchor
- field-alpha-result-content-evidence-validation-outcome
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Whether the result is positive, negative, neutral, or non-applicable evidence for content effectiveness.
- range
- One documented enum value.
- relationship
- Governed value on result content evidence; no free-text relationship, and consumers must use the documented enum values.
- example
- validated
- invalidWhen
- Invalid when validation_outcome is not one of validated, failed, neutral, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before result content evidence is written; adding a new validation_outcome value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "validated",
"meaning": "The result is positive evidence that the content helped this student succeed.",
"useWhen": "The result is positive evidence that the content helped this student succeed.",
"invalidWhen": "Invalid when validated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "failed",
"meaning": "The result is negative evidence for this content/KC pairing.",
"useWhen": "The result is negative evidence for this content/KC pairing.",
"invalidWhen": "Invalid when failed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "neutral",
"meaning": "The result is connected to the content but should not move effectiveness.",
"useWhen": "The result is connected to the content but should not move effectiveness.",
"invalidWhen": "Invalid when neutral does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The content link is audit evidence only.",
"useWhen": "The content link is audit evidence only.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}evidence_weight
- anchor
- field-alpha-result-content-evidence-evidence-weight
- type
- NUMERIC(8,4)
- nullability
- Required.
- key
- Not a key
- meaning
- Weight Content should use when rolling this evidence up.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on result content evidence; it feeds documented calculations or reports but does not identify another object.
- example
- 1.0000
- invalidWhen
- Invalid when evidence_weight is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0.; Policy/config owned by the surface..
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be >= 0.", "Policy/config owned by the surface." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}used_content_at
- anchor
- field-alpha-result-content-evidence-used-content-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Time the student interacted with the content when known from Events.
- range
- UTC timestamp.
- relationship
- Time value on result content evidence; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-21T14:12:00Z
- invalidWhen
- Invalid when used_content_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha result evidence for Content module
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "UTC timestamp when present.", "Results does not store raw Events; it stores the durable evidence link." ]
allowedValues
[]
provenance
{
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}alpha.student_kc_state · Student knowledge state
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- No OneRoster equivalent; derived from result evidence over Curriculum KC ids.
- purpose
- The per-student overlay on the shared curriculum graph: four named states for one student and one KC, plus due dates and evidence pointers.
- lifecycle
- Materialized by the Results surface after result evidence changes or retention policy runs. Historical point-in-time reads use effective dates.
- primaryKey
- (tenant_id, student_id, kc_id, effective_at)
- storage
- Extension table only; mastery is not copied from any base field.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-student-kc-state
- fieldCount
- 18
itds
[
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]relationships
[ "Belongs to one student.", "References one Curriculum KC.", "References result evidence rows." ]
constraints
[ "Mastery is forbidden on the student record.", "The shared curriculum graph is not stored here; kc_id is a foreign key.", "initial_mastery, current_retention, durable_mastery, and fluency_state are separate fields and must not be blended.", "Retention and mastery math use alpha.policy.* config." ]
invalidExamples
[ "A student.profile.mastery field.", "A blended mastery_state or mastery_score field used instead of the four named states.", "A KC state row with begin_date NULL and is_time_locatable true." ]
example
{
"student_id": "stu_timeback_10017",
"kc_id": "kc_linear_equations",
"initial_mastery": 0.94,
"current_retention": 0.88,
"durable_mastery": 0.81,
"fluency_state": "building_speed"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (18)
tenant_id
- anchor
- field-alpha-student-kc-state-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-student-kc-state-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}kc_id
- anchor
- field-alpha-student-kc-state-kc-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Curriculum KC id for this student overlay row.
- range
- Text within documented constraints.
- relationship
- Many student state rows can reference one Curriculum KC.
- example
- kc_linear_equations
- invalidWhen
- Invalid when kc_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference Curriculum KC.", "Not a tag." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}subject_id
- anchor
- field-alpha-student-kc-state-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student kc state is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}initial_mastery
- anchor
- field-alpha-student-kc-state-initial-mastery
- type
- NUMERIC(6,5)
- nullability
- Required.
- key
- Not a key
- meaning
- Acquisition-state value after initial learning and acquisition-gate evidence for this KC.
- range
- 0.00000 through 1.00000
- relationship
- Numeric value on student kc state; it feeds documented calculations or reports but does not identify another object.
- example
- 0.94000
- invalidWhen
- Invalid when initial_mastery is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 1 inclusive.; Must be stored separately from retention, durable mastery, and fluency.; Consumers must not recompute this from raw evidence..
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "0 through 1 inclusive.", "Must be stored separately from retention, durable mastery, and fluency.", "Consumers must not recompute this from raw evidence." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}current_retention
- anchor
- field-alpha-student-kc-state-current-retention
- type
- NUMERIC(6,5)
- nullability
- Required.
- key
- Not a key
- meaning
- Current retained-knowledge value after the active retention model and time decay.
- range
- 0.00000 through 1.00000
- relationship
- Numeric value on student kc state; it feeds documented calculations or reports but does not identify another object.
- example
- 0.88000
- invalidWhen
- Invalid when current_retention is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 1 inclusive.; This is the field review scheduling reads.; Consumers see next_due_at rather than retention-model internals..
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "0 through 1 inclusive.", "This is the field review scheduling reads.", "Consumers see next_due_at rather than retention-model internals." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}durable_mastery
- anchor
- field-alpha-student-kc-state-durable-mastery
- type
- NUMERIC(6,5)
- nullability
- Required.
- key
- Not a key
- meaning
- Longer-run mastery belief after repeated evidence and retention checks.
- range
- 0.00000 through 1.00000
- relationship
- Numeric value on student kc state; it feeds documented calculations or reports but does not identify another object.
- example
- 0.81000
- invalidWhen
- Invalid when durable_mastery is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 1 inclusive.; Must stay separate from current_retention so a recently refreshed KC and a durable KC do not collapse to one label..
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "0 through 1 inclusive.", "Must stay separate from current_retention so a recently refreshed KC and a durable KC do not collapse to one label." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}fluency_state
- anchor
- field-alpha-student-kc-state-fluency-state
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Accuracy/speed/automaticity stage for a KC; AP policy maps E1-E4 acquisition stages onto not_practiced, building_accuracy, building_speed, and fluent.
- range
- One documented enum value.
- relationship
- Governed value on student kc state; no free-text relationship, and consumers must use the documented enum values.
- example
- building_speed
- invalidWhen
- Invalid when fluency_state is not one of not_practiced, building_accuracy, building_speed, fluent, decayed, blocked, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student kc state is written; AP E1-E4 labels are exposed through this enum and the active policy_config row, not through consumer-side parsing.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be one documented value.", "Practice and fluency never gate initial acquisition.", "AP staged acquisition uses this field as the public stage signal; consumers read it and do not infer stages client-side." ]
allowedValues
[
{
"value": "not_practiced",
"meaning": "AP E1/not-practiced stage: the student has not yet completed enough acquisition practice for this KC.",
"useWhen": "AP E1/not-practiced stage: the student has not yet completed enough acquisition practice for this KC.",
"invalidWhen": "Invalid when not_practiced does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "building_accuracy",
"meaning": "AP E2/building-accuracy stage: practice is focused on reliable correctness before speed matters.",
"useWhen": "AP E2/building-accuracy stage: practice is focused on reliable correctness before speed matters.",
"invalidWhen": "Invalid when building_accuracy does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "building_speed",
"meaning": "AP E3/building-speed stage: the student is accurate enough and is now building automaticity.",
"useWhen": "AP E3/building-speed stage: the student is accurate enough and is now building automaticity.",
"invalidWhen": "Invalid when building_speed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fluent",
"meaning": "AP E4/fluent stage: the student meets the configured acquisition gate and speed threshold.",
"useWhen": "AP E4/fluent stage: the student meets the configured acquisition gate and speed threshold.",
"invalidWhen": "Invalid when fluent does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "decayed",
"meaning": "Earlier fluency evidence has decayed under the active retention policy.",
"useWhen": "Earlier fluency evidence has decayed under the active retention policy.",
"invalidWhen": "Invalid when decayed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "blocked",
"meaning": "The fluency state cannot update because evidence or policy config is missing.",
"useWhen": "The fluency state cannot update because evidence or policy config is missing.",
"invalidWhen": "Invalid when blocked does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}next_due_at
- anchor
- field-alpha-student-kc-state-next-due-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Sort/filter key
- meaning
- When the surface believes this KC next needs review or practice.
- range
- UTC timestamp.
- relationship
- Time value on student kc state; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-28T14:30:00Z
- invalidWhen
- Invalid when next_due_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "UTC timestamp when present.", "Null when no due task exists or null_reason explains why next task selection cannot use this row.", "Apps render due dates; they do not run the retention model." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}evidence_count
- anchor
- field-alpha-student-kc-state-evidence-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Number of evidence rows currently contributing to this state.
- range
- Integer within documented constraints.
- relationship
- Numeric value on student kc state; it feeds documented calculations or reports but does not identify another object.
- example
- 8
- invalidWhen
- Invalid when evidence_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0..
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be >= 0." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}last_evidence_at
- anchor
- field-alpha-student-kc-state-last-evidence-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Most recent evidence timestamp feeding this state.
- range
- UTC timestamp.
- relationship
- Time value on student kc state; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-21T14:30:00Z
- invalidWhen
- Invalid when last_evidence_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "UTC when present.", "Null only when evidence_count is 0." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}retention_model_ref
- anchor
- field-alpha-student-kc-state-retention-model-ref
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Policy/config id for the retention model used.
- range
- Text within documented constraints.
- relationship
- References alpha.policy_config.
- example
- retention_fire_v2026_01
- invalidWhen
- Invalid when retention_model_ref is missing, violates its documented constraints: Must reference active or historical alpha.policy_config.; No client retention or decay math..
- edgeCases
- retention_model_ref follows the student kc state lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference active or historical alpha.policy_config.", "No client retention or decay math." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}policy_version
- anchor
- field-alpha-student-kc-state-policy-version
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Config version used for mastery and decay calculations.
- range
- Text within documented constraints.
- relationship
- Attribute on student kc state; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for policy_version.
- example
- policy_2026_06_03
- invalidWhen
- Invalid when policy_version is missing, violates its documented constraints: Must be stable and traceable to alpha.policy_config..
- edgeCases
- policy_version follows the student kc state lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be stable and traceable to alpha.policy_config." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}source_result_refs
- anchor
- field-alpha-student-kc-state-source-result-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to result and KC-evidence rows supporting the state.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on student kc state; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- [{"type":"result_kc_evidence","id":"018f..."}]
- invalidWhen
- Invalid when source_result_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a JSON array of typed references.", "Must not include raw event payloads, content bodies, or copied source score columns." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}effective_at
- anchor
- field-alpha-student-kc-state-effective-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Primary key part
- meaning
- When this materialized state became effective.
- range
- UTC timestamp.
- relationship
- Primary identifier for one student kc state row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 2026-03-21T14:31:00Z
- invalidWhen
- Invalid when effective_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "UTC timestamp.", "Part of point-in-time history." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}begin_date
- anchor
- field-alpha-student-kc-state-begin-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- First date this state is locatable for point-in-time reads.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2026-03-21
- invalidWhen
- Invalid when begin_date is null but is_time_locatable is true, or when consumers include the row in point-in-time results despite a missing start.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Null means excluded from point-in-time reads." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}end_date
- anchor
- field-alpha-student-kc-state-end-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- Last date this state is active; null means still active after begin_date.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2026-05-01
- invalidWhen
- Invalid when end_date is before begin_date, or when a non-null end_date is ignored for point-in-time reads.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be null or >= begin_date." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}is_time_locatable
- anchor
- field-alpha-student-kc-state-is-time-locatable
- type
- BOOLEAN
- nullability
- Required on effective-dated rows.
- key
- Filter key
- meaning
- Surface-computed boolean telling consumers whether begin_date is known enough for point-in-time reads.
- range
- true or false.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- true
- invalidWhen
- Invalid when true with begin_date NULL, or false while a row is included in point-in-time computation.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha point-in-time rule
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Cross-cutting rule 2 requires typed time-locatability.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "begin_date NULL means false and the row is excluded from point-in-time computation.", "end_date NULL means active after begin_date.", "Both null means false." ]
allowedValues
[]
provenance
{
"label": "Point-in-time rule",
"changeType": "RESTRICT",
"basis": "Cross-cutting rule 2 requires typed time-locatability.",
"upstream": "Alpha point-in-time rule",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
}
]
}alpha.student_track_state · Student track state
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- No OneRoster equivalent; references OneRoster student ids and Curriculum track ids.
- purpose
- One student's current position on one Curriculum track, including current level, current segment, placement evidence, switch history, and effective dates.
- lifecycle
- Created when a student is placed on a track. Advancing updates the state for that track; switching closes the old row with status switched and creates a new row for the new track.
- primaryKey
- (tenant_id, student_id, track_id)
- storage
- Extension table only; track definitions are referenced, never copied.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-student-track-state
- fieldCount
- 15
itds
[
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]relationships
[ "Belongs to one student.", "References one Curriculum track.", "References current Curriculum track_level and track_level_segment rows.", "May point to the track the student switched to." ]
constraints
[ "One active row per student and track.", "Track definitions, levels, segments, courses, and components stay in Curriculum and are never copied here.", "begin_date NULL means the row is excluded from point-in-time reads." ]
invalidExamples
[ "A copied track course tree stored in Results.", "Two active rows for the same student and track.", "A track switch that copies the old track instead of closing the old state and opening a new state." ]
example
{
"student_id": "stu_timeback_10017",
"track_id": "track_common_core_math_k12",
"current_track_level_id": "track_level_math_7",
"current_segment_id": "segment_linear_equations",
"status": "active"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (15)
tenant_id
- anchor
- field-alpha-student-track-state-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-student-track-state-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-student-track-state-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student track state is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}track_id
- anchor
- field-alpha-student-track-state-track-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Curriculum track this state belongs to.
- range
- Text within documented constraints.
- relationship
- Many student track states can reference one Curriculum track.
- example
- track_common_core_math_k12
- invalidWhen
- Invalid when track_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference Curriculum track.", "Primary key part with tenant_id and student_id.", "Track definition is referenced, never copied." ]
allowedValues
[]
provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}current_track_level_id
- anchor
- field-alpha-student-track-state-current-track-level-id
- type
- TEXT
- nullability
- Required for active rows.
- key
- Not a key
- meaning
- Curriculum track level where the student currently sits.
- range
- Text within documented constraints.
- relationship
- Many student states can reference one Curriculum track_level.
- example
- track_level_math_7
- invalidWhen
- Invalid when current_track_level_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference a level that belongs to track_id.", "Null only when status is completed, exited, or blocked with missing placement." ]
allowedValues
[]
provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}current_segment_id
- anchor
- field-alpha-student-track-state-current-segment-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Current Curriculum track_level_segment inside the track level.
- range
- Text within documented constraints.
- relationship
- Many student states can reference one Curriculum track_level_segment.
- example
- segment_linear_equations
- invalidWhen
- Invalid when current_segment_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference a segment under current_track_level_id when present.", "Null is allowed before segment placement or after completion." ]
allowedValues
[]
provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}placement_evidence
- anchor
- field-alpha-student-track-state-placement-evidence
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to diagnostic, MAP, gate, or migration evidence that placed the student here.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on student track state; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"source":"grade_level_gate","result_record_id":"018f..."}
- invalidWhen
- Invalid when placement_evidence is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a JSON array/object of typed references.", "Must not copy MAP RIT, gate score, or transcript payload values; those stay in source rows." ]
allowedValues
[]
provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}status
- anchor
- field-alpha-student-track-state-status
- type
- TEXT enum
- nullability
- Required.
- key
- Filter key
- meaning
- Lifecycle state of the student's relationship to this track.
- range
- One documented enum value.
- relationship
- Governed value on student track state; no free-text relationship, and consumers must use the documented enum values.
- example
- active
- invalidWhen
- Invalid when status is not one of active, completed, paused, switched, exited, blocked, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student track state is written; adding a new status value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be one documented value.", "Only active rows drive current progress visualizations." ]
allowedValues
[
{
"value": "active",
"meaning": "The student is currently placed on this track.",
"useWhen": "The student is currently placed on this track.",
"invalidWhen": "Invalid when active does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "completed",
"meaning": "The student has completed the track under the active exit policy.",
"useWhen": "The student has completed the track under the active exit policy.",
"invalidWhen": "Invalid when completed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "paused",
"meaning": "The student remains on the track but active work is temporarily paused.",
"useWhen": "The student remains on the track but active work is temporarily paused.",
"invalidWhen": "Invalid when paused does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "switched",
"meaning": "The student switched away from this track; switched_to_track_id points at the new track.",
"useWhen": "The student switched away from this track; switched_to_track_id points at the new track.",
"invalidWhen": "Invalid when switched does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "exited",
"meaning": "The student left the track without switching to another tracked path.",
"useWhen": "The student left the track without switching to another tracked path.",
"invalidWhen": "Invalid when exited does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "blocked",
"meaning": "The surface cannot place or advance the student because required evidence or policy config is missing.",
"useWhen": "The surface cannot place or advance the student because required evidence or policy config is missing.",
"invalidWhen": "Invalid when blocked does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}switched_to_track_id
- anchor
- field-alpha-student-track-state-switched-to-track-id
- type
- TEXT
- nullability
- Nullable; required when status is switched.
- key
- Not a key
- meaning
- Curriculum track the student moved to when this row is closed by a switch.
- range
- Text within documented constraints.
- relationship
- References one Curriculum track as the switch target.
- example
- track_sat_math_600_800
- invalidWhen
- Invalid when switched_to_track_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference Curriculum track when present.", "Must be null unless status is switched." ]
allowedValues
[]
provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}effective_at
- anchor
- field-alpha-student-track-state-effective-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort key
- meaning
- UTC timestamp when this track-state version became effective.
- range
- UTC timestamp.
- relationship
- Time value on student track state; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-21T14:31:00Z
- invalidWhen
- Invalid when effective_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Used for audit ordering and replay.", "Must be UTC." ]
allowedValues
[]
provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}source_evidence_refs
- anchor
- field-alpha-student-track-state-source-evidence-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to Results, MAP, gate, or transcript rows supporting this state.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on student track state; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- [{"type":"map_score","id":"018f..."},{"type":"gate_pass","id":"018f..."}]
- invalidWhen
- Invalid when source_evidence_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a JSON array of typed references.", "Must not include raw event payloads or copied Curriculum definitions." ]
allowedValues
[]
provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}begin_date
- anchor
- field-alpha-student-track-state-begin-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- First date this track state is point-in-time valid.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2026-03-21
- invalidWhen
- Invalid when begin_date is null but is_time_locatable is true, or when consumers include the row in point-in-time results despite a missing start.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Null means excluded from point-in-time reads." ]
allowedValues
[]
provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}end_date
- anchor
- field-alpha-student-track-state-end-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- Last date this track state is valid; null means still active after begin_date.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2026-06-30
- invalidWhen
- Invalid when end_date is before begin_date, or when a non-null end_date is ignored for point-in-time reads.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha extension over Curriculum track ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student track position lives in Results while track definitions stay in Curriculum.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be null or >= begin_date." ]
allowedValues
[]
provenance
{
"label": "Student track state",
"changeType": "EXTEND",
"basis": "Per-student track position lives in Results while track definitions stay in Curriculum.",
"upstream": "Alpha extension over Curriculum track ids",
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
}is_time_locatable
- anchor
- field-alpha-student-track-state-is-time-locatable
- type
- BOOLEAN
- nullability
- Required on effective-dated rows.
- key
- Filter key
- meaning
- Surface-computed boolean telling consumers whether begin_date is known enough for point-in-time reads.
- range
- true or false.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- true
- invalidWhen
- Invalid when true with begin_date NULL, or false while a row is included in point-in-time computation.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha point-in-time rule
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Cross-cutting rule 2 requires typed time-locatability.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "begin_date NULL means false and the row is excluded from point-in-time computation.", "end_date NULL means active after begin_date.", "Both null means false." ]
allowedValues
[]
provenance
{
"label": "Point-in-time rule",
"changeType": "RESTRICT",
"basis": "Cross-cutting rule 2 requires typed time-locatability.",
"upstream": "Alpha point-in-time rule",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
}
]
}modified_at
- anchor
- field-alpha-student-track-state-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on student track state; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.next_task · Next task
- kind
- Derived read
- moduleHome
- Results
- changeType
- DERIVED READ
- upstream
- Derived from alpha.student_kc_state, alpha.student_track_state, alpha.gate_pass, Curriculum frontier/course members, and Policy.
- purpose
- One surface-owned scheduling answer for a student: a typed task reference plus why it was selected. Apps render this answer; they never choose it.
- lifecycle
- Computed on read, or served from an optional surface cache invalidated by state, gate, Curriculum, or Policy changes.
- primaryKey
- (tenant_id, student_id, subject_id, as_of_date, policy_version)
- storage
- No app-owned storage; optional surface cache stores task ref, reason, policy_version, and source state refs only.
- writePath
- Follow the object storage rule and ITD trace before writing.
- anchor
- table-alpha-next-task
- fieldCount
- 13
itds
[
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
},
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]relationships
[ "Belongs to one student.", "Reads KC state, track state, gate state, Curriculum candidate tasks, and Policy.", "Returns a typed reference to a course_component_member, Content item, external_course task, or no task." ]
constraints
[ "Clients must not implement frontier, review, practice, remediation, or gate-retry selection.", "task_type and task_ref identify exactly what to render.", "null_reason is required when task_type is no_task because required state or policy is missing." ]
invalidExamples
[ "A dashboard chooses a review KC by sorting current_retention itself.", "A mobile app retries a gate before the surface returns gate_retry.", "task_type no_task with no null_reason." ]
example
{
"student_id": "stu_timeback_10017",
"subject_id": "math",
"task_type": "review",
"task_ref_type": "course_component_member",
"task_ref_id": "member_review_linear_equations",
"reason": "retention_due"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (13)
tenant_id
- anchor
- field-alpha-next-task-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-next-task-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-next-task-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before next task is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}as_of_date
- anchor
- field-alpha-next-task-as-of-date
- type
- DATE
- nullability
- Required.
- key
- Primary key part
- meaning
- Point-in-time date for the next-task decision.
- range
- ISO 8601 calendar date.
- relationship
- Primary identifier for one next task row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 2026-06-05
- invalidWhen
- Invalid when as_of_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "ISO 8601 date.", "Current reads are still explicit asOfDate decisions." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}task_type
- anchor
- field-alpha-next-task-task-type
- type
- TEXT enum
- nullability
- Required.
- key
- Filter key
- meaning
- Kind of task the surface selected.
- range
- One documented enum value.
- relationship
- Governed value on next task; no free-text relationship, and consumers must use the documented enum values.
- example
- review
- invalidWhen
- Invalid when task_type is not one of new_lesson, review, practice, gate_retry, remediation, external_course_task, placement, test_out, no_task, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before next task is written; adding a new task_type value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived read over Results state plus Curriculum and Policy references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value.", "Apps render the type; they do not reinterpret it." ]
allowedValues
[
{
"value": "new_lesson",
"meaning": "Start a lesson on the current frontier KC.",
"useWhen": "Start a lesson on the current frontier KC.",
"invalidWhen": "Invalid when new_lesson does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "review",
"meaning": "Review the most-due retained KC.",
"useWhen": "Review the most-due retained KC.",
"invalidWhen": "Invalid when review does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "practice",
"meaning": "Practice a fluency or automaticity target.",
"useWhen": "Practice a fluency or automaticity target.",
"invalidWhen": "Invalid when practice does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gate_retry",
"meaning": "Retry a mastery gate after remediation or cooldown.",
"useWhen": "Retry a mastery gate after remediation or cooldown.",
"invalidWhen": "Invalid when gate_retry does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "remediation",
"meaning": "Complete assigned remediation before a gate retry.",
"useWhen": "Complete assigned remediation before a gate retry.",
"invalidWhen": "Invalid when remediation does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "external_course_task",
"meaning": "Work in a referenced external course under its evidence contract.",
"useWhen": "Work in a referenced external course under its evidence contract.",
"invalidWhen": "Invalid when external_course_task does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_task",
"meaning": "No task is available under the current policy and state.",
"useWhen": "No task is available under the current policy and state.",
"invalidWhen": "Invalid when no_task does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "placement",
"meaning": "Route the student into the platform-selected placement gate/candidate before ordinary coursework.",
"useWhen": "Route the student into the platform-selected placement gate/candidate before ordinary coursework.",
"invalidWhen": "Invalid when placement does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "test_out",
"meaning": "Route the student to a platform-selected test-out gate before ordinary coursework.",
"useWhen": "Route the student to a platform-selected test-out gate before ordinary coursework.",
"invalidWhen": "Invalid when test_out does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Next task read",
"changeType": "DERIVED READ",
"basis": "Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.",
"upstream": "Derived read over Results state plus Curriculum and Policy references",
"itds": [
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
}
]
}task_ref_type
- anchor
- field-alpha-next-task-task-ref-type
- type
- TEXT enum
- nullability
- Required unless task_type is no_task.
- key
- Not a key
- meaning
- Type of object the selected task points at.
- range
- One documented enum value.
- relationship
- Governed value on next task; no free-text relationship, and consumers must use the documented enum values.
- example
- course_component_member
- invalidWhen
- Invalid when task_ref_type is not one of course_component_member, course_component, content, external_course, gate, none, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before next task is written; adding a new task_ref_type value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived read over Results state plus Curriculum and Policy references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Allowed values: course_component_member, course_component, content, external_course, gate, none.", "Must match task_ref_id shape." ]
allowedValues
[
{
"value": "course_component_member",
"meaning": "A Curriculum member row that pairs target and renderer.",
"useWhen": "A Curriculum member row that pairs target and renderer.",
"invalidWhen": "Invalid when course_component_member does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "course_component",
"meaning": "A Curriculum component such as a lesson, review, or practice node.",
"useWhen": "A Curriculum component such as a lesson, review, or practice node.",
"invalidWhen": "Invalid when course_component does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "content",
"meaning": "A Content item or test to render.",
"useWhen": "A Content item or test to render.",
"invalidWhen": "Invalid when content does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "external_course",
"meaning": "An external course task governed by an evidence contract.",
"useWhen": "An external course task governed by an evidence contract.",
"invalidWhen": "Invalid when external_course does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gate",
"meaning": "A mastery gate retry or equivalent form.",
"useWhen": "A mastery gate retry or equivalent form.",
"invalidWhen": "Invalid when gate does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "none",
"meaning": "No task reference because task_type is no_task.",
"useWhen": "No task reference because task_type is no_task.",
"invalidWhen": "Invalid when none does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Next task read",
"changeType": "DERIVED READ",
"basis": "Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.",
"upstream": "Derived read over Results state plus Curriculum and Policy references",
"itds": [
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
}
]
}task_ref_id
- anchor
- field-alpha-next-task-task-ref-id
- type
- TEXT
- nullability
- Nullable; required unless task_type is no_task.
- key
- Not a key
- meaning
- Identifier of the task target named by task_ref_type.
- range
- Text within documented constraints.
- relationship
- Polymorphic typed reference controlled by task_ref_type.
- example
- member_review_linear_equations
- invalidWhen
- Invalid when task_ref_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Derived read over Results state plus Curriculum and Policy references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference the same tenant object named by task_ref_type.", "Null only when task_type is no_task." ]
allowedValues
[]
provenance
{
"label": "Next task read",
"changeType": "DERIVED READ",
"basis": "Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.",
"upstream": "Derived read over Results state plus Curriculum and Policy references",
"itds": [
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
}
]
}reason
- anchor
- field-alpha-next-task-reason
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Why the surface selected this task.
- range
- One documented enum value.
- relationship
- Governed value on next task; no free-text relationship, and consumers must use the documented enum values.
- example
- retention_due
- invalidWhen
- Invalid when reason is not one of frontier_ready, retention_due, fluency_due, gate_failed_never_learned, gate_failed_forgot, gate_failed_careless, gate_retry_stage_e1, gate_retry_stage_e2, gate_retry_stage_e3, gate_retry_stage_e4_next_day, cooldown_complete, blocked_missing_policy, blocked_missing_state, placement_required, placement_candidate_ready, test_out_ready, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before next task is written; AP staged-acquisition retry reasons are governed policy outputs, and adding a new reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived read over Results state plus Curriculum and Policy references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value.", "Reason is returned so apps can explain the assignment without recalculating it." ]
allowedValues
[
{
"value": "frontier_ready",
"meaning": "Prerequisites are ready and the next frontier KC can be taught.",
"useWhen": "Prerequisites are ready and the next frontier KC can be taught.",
"invalidWhen": "Invalid when frontier_ready does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "retention_due",
"meaning": "current_retention has a due review before it decays further.",
"useWhen": "current_retention has a due review before it decays further.",
"invalidWhen": "Invalid when retention_due does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fluency_due",
"meaning": "fluency_state needs practice before the KC is considered automatic.",
"useWhen": "fluency_state needs practice before the KC is considered automatic.",
"invalidWhen": "Invalid when fluency_due does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gate_failed_never_learned",
"meaning": "A failed gate classified misses as never learned.",
"useWhen": "A failed gate classified misses as never learned.",
"invalidWhen": "Invalid when gate_failed_never_learned does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gate_failed_forgot",
"meaning": "A failed gate classified misses as forgot.",
"useWhen": "A failed gate classified misses as forgot.",
"invalidWhen": "Invalid when gate_failed_forgot does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gate_failed_careless",
"meaning": "A failed gate classified misses as careless.",
"useWhen": "A failed gate classified misses as careless.",
"invalidWhen": "Invalid when gate_failed_careless does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gate_retry_stage_e1",
"meaning": "Retry AP E1 acquisition practice because the configured stage gate was not met.",
"useWhen": "Retry AP E1 acquisition practice because the configured stage gate was not met.",
"invalidWhen": "Invalid when gate_retry_stage_e1 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gate_retry_stage_e2",
"meaning": "Retry AP E2 acquisition practice because the configured stage gate was not met.",
"useWhen": "Retry AP E2 acquisition practice because the configured stage gate was not met.",
"invalidWhen": "Invalid when gate_retry_stage_e2 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gate_retry_stage_e3",
"meaning": "Retry AP E3 fluency-building practice because the configured stage gate was not met.",
"useWhen": "Retry AP E3 fluency-building practice because the configured stage gate was not met.",
"invalidWhen": "Invalid when gate_retry_stage_e3 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gate_retry_stage_e4_next_day",
"meaning": "Retry or schedule the AP E4 mastery test on a different calendar day from practice.",
"useWhen": "Retry or schedule the AP E4 mastery test on a different calendar day from practice.",
"invalidWhen": "Invalid when gate_retry_stage_e4_next_day does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "cooldown_complete",
"meaning": "A prior gate cooldown ended and retry is allowed.",
"useWhen": "A prior gate cooldown ended and retry is allowed.",
"invalidWhen": "Invalid when cooldown_complete does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "blocked_missing_policy",
"meaning": "Policy/config required to choose a task is missing.",
"useWhen": "Policy/config required to choose a task is missing.",
"invalidWhen": "Invalid when blocked_missing_policy does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "blocked_missing_state",
"meaning": "Student state required to choose a task is missing.",
"useWhen": "Student state required to choose a task is missing.",
"invalidWhen": "Invalid when blocked_missing_state does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "placement_required",
"meaning": "The student must complete placement before ordinary coursework can be selected.",
"useWhen": "The student must complete placement before ordinary coursework can be selected.",
"invalidWhen": "Invalid when placement_required does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "placement_candidate_ready",
"meaning": "A Curriculum placement candidate is ready for this student under Results/Policy.",
"useWhen": "A Curriculum placement candidate is ready for this student under Results/Policy.",
"invalidWhen": "Invalid when placement_candidate_ready does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "test_out_ready",
"meaning": "A test-out gate is ready and outranks ordinary coursework under Results/Policy.",
"useWhen": "A test-out gate is ready and outranks ordinary coursework under Results/Policy.",
"invalidWhen": "Invalid when test_out_ready does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Next task read",
"changeType": "DERIVED READ",
"basis": "Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.",
"upstream": "Derived read over Results state plus Curriculum and Policy references",
"itds": [
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
}
]
}due_at
- anchor
- field-alpha-next-task-due-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Sort key
- meaning
- When the selected task is due or should be shown.
- range
- UTC timestamp.
- relationship
- Time value on next task; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-05T15:00:00Z
- invalidWhen
- Invalid when due_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Derived read over Results state plus Curriculum and Policy references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "UTC timestamp when present.", "Usually comes from student_kc_state.next_due_at or gate cooldown policy." ]
allowedValues
[]
provenance
{
"label": "Next task read",
"changeType": "DERIVED READ",
"basis": "Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.",
"upstream": "Derived read over Results state plus Curriculum and Policy references",
"itds": [
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
}
]
}source_state_refs
- anchor
- field-alpha-next-task-source-state-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to KC state, track state, gate pass, and policy rows used for this decision.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on next task; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- [{"type":"student_kc_state","kc_id":"kc_linear_equations","effective_at":"2026-06-05T14:30:00Z"}]
- invalidWhen
- Invalid when source_state_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived read over Results state plus Curriculum and Policy references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be a JSON array of typed references.", "Must not contain raw mastery formulas, Curriculum definitions, or event payloads." ]
allowedValues
[]
provenance
{
"label": "Next task read",
"changeType": "DERIVED READ",
"basis": "Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.",
"upstream": "Derived read over Results state plus Curriculum and Policy references",
"itds": [
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
}
]
}policy_version
- anchor
- field-alpha-next-task-policy-version
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Policy/config version used by next-task selection.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one next task row within a tenant; downstream Results rows reference this value by its named id field.
- example
- policy_2026_06_03
- invalidWhen
- Invalid when policy_version is missing, violates its documented constraints: Must reference active or historical alpha.policy_config.; Changing policy creates a new answer version..
- edgeCases
- policy_version follows the next task lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference active or historical alpha.policy_config.", "Changing policy creates a new answer version." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}null_reason
- anchor
- field-alpha-next-task-null-reason
- type
- TEXT enum
- nullability
- Nullable; required when task_type is no_task.
- key
- Not a key
- meaning
- Why no task is available or why selection is blocked.
- range
- One documented enum value.
- relationship
- Governed value on next task; no free-text relationship, and consumers must use the documented enum values.
- example
- course_graph_not_routable
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, student_inactive, no_school_day, school_calendar_unavailable, placement_candidate_unavailable, course_graph_not_routable, curriculum_unavailable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before next task is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived read over Results state plus Curriculum and Policy references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value when present.", "Missing state/policy is a surface gap to reconcile, not an app fallback." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "student_inactive",
"meaning": "The known student is not active on the requested date.",
"useWhen": "The People & Orgs lifecycle says the known student is not active on the requested date.",
"invalidWhen": "Invalid when the student is active on the requested date or the student is unknown.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_school_day",
"meaning": "The Analytics calendar says the requested date is not an instructional school day.",
"useWhen": "The tenant calendar has an exact row for the requested date and marks it as a non-school day.",
"invalidWhen": "Invalid when the exact calendar row is missing or marks the date as a school day.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "school_calendar_unavailable",
"meaning": "The Analytics calendar has no exact row for the requested tenant and date.",
"useWhen": "Results cannot establish school-day eligibility because the exact governed calendar row is absent.",
"invalidWhen": "Invalid when an exact governed calendar row exists.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "placement_candidate_unavailable",
"meaning": "Placement is owed but Curriculum returned no eligible placement candidate above the highest mastered grade.",
"useWhen": "Results state requires placement and the governed Curriculum placement-candidate read has no eligible candidate.",
"invalidWhen": "Invalid when placement is not owed or an eligible placement candidate exists.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "course_graph_not_routable",
"meaning": "The enrolled Curriculum graph has no governed published frontier that satisfies the current Results state.",
"useWhen": "Curriculum reports structural or publication ineligibility, or the returned frontier cannot honor an owed review.",
"invalidWhen": "Invalid when a governed routable frontier exists or Curriculum could not be reached.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "curriculum_unavailable",
"meaning": "The Curriculum authority could not be reached or returned an operational failure.",
"useWhen": "Results cannot obtain a definitive Curriculum placement/frontier answer because the authority is unavailable.",
"invalidWhen": "Invalid when Curriculum returned a definitive routable or structural answer.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Next task read",
"changeType": "DERIVED READ",
"basis": "Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.",
"upstream": "Derived read over Results state plus Curriculum and Policy references",
"itds": [
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
}
]
}computed_at
- anchor
- field-alpha-next-task-computed-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- UTC timestamp when the surface produced this answer.
- range
- UTC timestamp.
- relationship
- Time value on next task; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-05T14:31:00Z
- invalidWhen
- Invalid when computed_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Derived read over Results state plus Curriculum and Policy references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Used for cache freshness and audit.", "Must be UTC." ]
allowedValues
[]
provenance
{
"label": "Next task read",
"changeType": "DERIVED READ",
"basis": "Results chooses the next task from student state, track state, gates, Curriculum frontier/placement candidates, and Policy.",
"upstream": "Derived read over Results state plus Curriculum and Policy references",
"itds": [
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
}
]
}alpha.xp_ledger · XP ledger
- kind
- Immutable extension ledger
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- No 1EdTech equivalent; computed from settled Results attempts, Content expected_xp references, effort evidence, and Policy.
- purpose
- Append-only source of truth for awarded XP. A row records one award, discount, penalty, or reversal with policy and evidence references. Accepted fully graded public result records with numeric score_percent and Content/Curriculum expected_xp atomically produce one verified_attempt award per (tenant_id, source_adapter_id, producer_result_id); gated video/article awards are also computed by Results from per-attempt accuracy evidence and alpha.policy.xp_award_formula.
- lifecycle
- Written only by the Results surface after a settled attempt or correction. Corrections append reversal rows instead of updating or deleting prior awards.
- primaryKey
- (tenant_id, xp_award_id)
- storage
- Immutable extension ledger; stores awarded_xp and calculation evidence, not copied Content expected_xp or event payloads.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-xp-ledger
- fieldCount
- 12
itds
[
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]relationships
[ "Belongs to one student.", "May reference one result_record.", "May reference one Content item and expected_xp source.", "May reverse one prior xp_ledger row." ]
constraints
[ "Apps display XP; they never compute or mutate it.", "Events, gates, engines, and clients cannot write canonical XP awards.", "Passive activities earn XP only when tied to a verifying attempt.", "Negative awarded_xp is allowed for gaming or cheating signals.", "Gated instructional article/video engagement never earns XP by completion alone; embedded-question first-attempt accuracy is the verification event and required article/video time is included in the expected_xp basis.", "Accuracy-to-XP thresholds and the perfect bonus must be read from alpha.policy.xp_award_formula, not renderer/player code.", "A public result-record verified_attempt award requires an accepted public result_kind, outcome_status=fully_graded, numeric score_percent, content_id, source_adapter_id, producer_result_id, and a Content/Curriculum expected_xp basis; it does not require track enrollment.", "Public result-record awards deduplicate on tenant_id plus source_adapter_id plus producer_result_id, preserve the result timestamp during historical repair, and never accept caller-supplied XP or expected_xp." ]
invalidExamples
[ "A mutable XP balance on the student record.", "An event row treated as canonical XP.", "An engine-written XP award without a Results policy calculation.", "A correction that overwrites awarded_xp instead of appending a reversal." ]
example
{
"xp_award_id": "xp_10017_factoring_gate_1",
"student_id": "stu_timeback_10017",
"awarded_xp": 42.5,
"award_reason": "accuracy_award"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (12)
xp_award_id
- anchor
- field-alpha-xp-ledger-xp-award-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this XP ledger row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one xp ledger row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a004001
- invalidWhen
- Invalid when xp_award_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension ledger over result/content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Awarded XP is immutable Results ledger history computed from settled attempts and policy.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Unique within tenant.", "Rows are append-only." ]
allowedValues
[]
provenance
{
"label": "XP ledger",
"changeType": "EXTEND",
"basis": "Awarded XP is immutable Results ledger history computed from settled attempts and policy.",
"upstream": "Alpha extension ledger over result/content evidence",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}tenant_id
- anchor
- field-alpha-xp-ledger-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-xp-ledger-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}result_record_id
- anchor
- field-alpha-xp-ledger-result-record-id
- type
- UUID
- nullability
- Nullable; required for attempt-based awards.
- key
- Not a key
- meaning
- Settled result that triggered this XP award.
- range
- PostgreSQL UUID.
- relationship
- Many XP ledger rows can reference one result record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000101
- invalidWhen
- Invalid when result_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension ledger over result/content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Awarded XP is immutable Results ledger history computed from settled attempts and policy.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference alpha.result_record when present.", "Required for accuracy, repeat-discount, and gaming-penalty awards tied to an attempt." ]
allowedValues
[]
provenance
{
"label": "XP ledger",
"changeType": "EXTEND",
"basis": "Awarded XP is immutable Results ledger history computed from settled attempts and policy.",
"upstream": "Alpha extension ledger over result/content evidence",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}content_id
- anchor
- field-alpha-xp-ledger-content-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Content item whose expected_xp was used.
- range
- Text within documented constraints.
- relationship
- Many XP ledger rows can reference one Content item.
- example
- content_factoring_gate_v3
- invalidWhen
- Invalid when content_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension ledger over result/content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Awarded XP is immutable Results ledger history computed from settled attempts and policy.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference Content when present.", "Does not copy Content title/body/kind." ]
allowedValues
[]
provenance
{
"label": "XP ledger",
"changeType": "EXTEND",
"basis": "Awarded XP is immutable Results ledger history computed from settled attempts and policy.",
"upstream": "Alpha extension ledger over result/content evidence",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}expected_xp_ref
- anchor
- field-alpha-xp-ledger-expected-xp-ref
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured reference to the expected XP basis used in the calculation. Raw TimeBack imports distinguish source_expected_xp, source_xp, and adapter_default instead of collapsing them into a vague Content/default bucket.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on xp ledger; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"expected_xp":40,"source":"source_expected_xp","policy_ref":null}
- invalidWhen
- Invalid when expected_xp_ref is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha extension ledger over result/content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Awarded XP is immutable Results ledger history computed from settled attempts and policy.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a JSON object of typed references.", "Must not copy a full Content row.", "source must be one of content_expected_xp, source_expected_xp, source_xp, or adapter_default.", "adapter_default is allowed only for raw TimeBack imports when neither expected XP nor awarded XP is present in the source row, and it must carry policy_ref alpha.policy.results.raw_timeback_import_expected_xp_default.", "For gated article/video components, expected_xp comes from the Curriculum/Content expected-XP-bearing component; Results stores only the typed reference and numeric basis used for the ledger row." ]
allowedValues
[]
provenance
{
"label": "XP ledger",
"changeType": "EXTEND",
"basis": "Awarded XP is immutable Results ledger history computed from settled attempts and policy.",
"upstream": "Alpha extension ledger over result/content evidence",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}awarded_xp
- anchor
- field-alpha-xp-ledger-awarded-xp
- type
- NUMERIC(10,2)
- nullability
- Required.
- key
- Aggregate value
- meaning
- XP amount awarded by this ledger row; may be negative for penalties or reversals.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on xp ledger; it feeds documented calculations or reports but does not identify another object.
- example
- 42.50
- invalidWhen
- Invalid when awarded_xp is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be negative.; Must be computed by Results under calculation_policy_ref.; Do not sum deleted or draft rows because ledger rows are never draft/deleted..
- upstreamSource
- Alpha extension ledger over result/content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Awarded XP is immutable Results ledger history computed from settled attempts and policy.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "May be negative.", "Must be computed by Results under calculation_policy_ref.", "Do not sum deleted or draft rows because ledger rows are never draft/deleted.", "For lesson-tier gated articles/videos under alpha.policy.xp_award_formula: first-attempt accuracy >= 80% earns full expected_xp, < 80% earns 0, and 100% earns expected_xp * 1.25 before effort/repeat adjustments." ]
allowedValues
[]
provenance
{
"label": "XP ledger",
"changeType": "EXTEND",
"basis": "Awarded XP is immutable Results ledger history computed from settled attempts and policy.",
"upstream": "Alpha extension ledger over result/content evidence",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}award_reason
- anchor
- field-alpha-xp-ledger-award-reason
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Why this XP row exists.
- range
- One documented enum value.
- relationship
- Governed value on xp ledger; no free-text relationship, and consumers must use the documented enum values.
- example
- accuracy_award
- invalidWhen
- Invalid when award_reason is not one of accuracy_award, effort_award, verified_passive_activity, repeat_attempt_discount, gaming_penalty, correction_reversal, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before xp ledger is written; adding a new award_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha extension ledger over result/content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Awarded XP is immutable Results ledger history computed from settled attempts and policy.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be one documented value.", "Reason determines required evidence fields." ]
allowedValues
[
{
"value": "accuracy_award",
"meaning": "Awarded from a verifying attempt's accuracy against expected_xp.",
"useWhen": "Awarded from a verifying attempt's accuracy against expected_xp.",
"invalidWhen": "Invalid when accuracy_award does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "effort_award",
"meaning": "Awarded from effort signals that are bound to a verifying attempt.",
"useWhen": "Awarded from effort signals that are bound to a verifying attempt.",
"invalidWhen": "Invalid when effort_award does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "verified_passive_activity",
"meaning": "Awarded for passive activity only after a verifying attempt.",
"useWhen": "Awarded for passive activity only after a verifying attempt.",
"invalidWhen": "Invalid when verified_passive_activity does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "repeat_attempt_discount",
"meaning": "Award adjusted downward by the repeat-attempt policy.",
"useWhen": "Award adjusted downward by the repeat-attempt policy.",
"invalidWhen": "Invalid when repeat_attempt_discount does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "gaming_penalty",
"meaning": "Negative award from cheating or gaming evidence.",
"useWhen": "Negative award from cheating or gaming evidence.",
"invalidWhen": "Invalid when gaming_penalty does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "correction_reversal",
"meaning": "Reversal row for a prior award correction.",
"useWhen": "Reversal row for a prior award correction.",
"invalidWhen": "Invalid when correction_reversal does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "XP ledger",
"changeType": "EXTEND",
"basis": "Awarded XP is immutable Results ledger history computed from settled attempts and policy.",
"upstream": "Alpha extension ledger over result/content evidence",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}calculation_policy_ref
- anchor
- field-alpha-xp-ledger-calculation-policy-ref
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Policy/config version that calculated awarded_xp.
- range
- Text within documented constraints.
- relationship
- References alpha.policy_config.
- example
- alpha.policy.xp_award_formula:2026-07-27.issue-1500
- invalidWhen
- Invalid when calculation_policy_ref is missing, does not reference alpha.policy_config, points at a renderer/player constant, or lets consumers re-run the formula.
- edgeCases
- calculation_policy_ref follows the xp ledger lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.policy_config.", "Consumers must not re-run the formula.", "For first-attempt accuracy awards, must reference alpha.policy_config where policy_name=alpha.policy.xp_award_formula." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}source_evidence_refs
- anchor
- field-alpha-xp-ledger-source-evidence-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to result, content, effort, anti-gaming, or correction evidence.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on xp ledger; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- [{"type":"result_record","id":"018f..."},{"type":"event_summary","id":"evt_sum_..."}]
- invalidWhen
- Invalid when source_evidence_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha extension ledger over result/content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Awarded XP is immutable Results ledger history computed from settled attempts and policy.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a JSON array of typed references.", "Must not contain raw event payloads or copied Content expected_xp values beyond expected_xp_ref." ]
allowedValues
[]
provenance
{
"label": "XP ledger",
"changeType": "EXTEND",
"basis": "Awarded XP is immutable Results ledger history computed from settled attempts and policy.",
"upstream": "Alpha extension ledger over result/content evidence",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}created_at
- anchor
- field-alpha-xp-ledger-created-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort key
- meaning
- UTC timestamp when this ledger row was appended.
- range
- UTC timestamp.
- relationship
- Time value on xp ledger; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-21T14:31:00Z
- invalidWhen
- Invalid when created_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha extension ledger over result/content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Awarded XP is immutable Results ledger history computed from settled attempts and policy.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be UTC.", "Never update this timestamp after insertion." ]
allowedValues
[]
provenance
{
"label": "XP ledger",
"changeType": "EXTEND",
"basis": "Awarded XP is immutable Results ledger history computed from settled attempts and policy.",
"upstream": "Alpha extension ledger over result/content evidence",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}reversal_of_xp_award_id
- anchor
- field-alpha-xp-ledger-reversal-of-xp-award-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Prior XP ledger row this row reverses or corrects.
- range
- PostgreSQL UUID.
- relationship
- Self-reference: one correction row reverses one prior XP award.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a004000
- invalidWhen
- Invalid when reversal_of_xp_award_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension ledger over result/content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Awarded XP is immutable Results ledger history computed from settled attempts and policy.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference alpha.xp_ledger when present.", "Required when award_reason is correction_reversal." ]
allowedValues
[]
provenance
{
"label": "XP ledger",
"changeType": "EXTEND",
"basis": "Awarded XP is immutable Results ledger history computed from settled attempts and policy.",
"upstream": "Alpha extension ledger over result/content evidence",
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
}
]
}alpha.content_effectiveness · Content effectiveness
- kind
- Derived extension read model
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from alpha.result_content_evidence and settled result records; references Content items.
- purpose
- Derived Results-owned rollup for one Content item: validated count, failed count, effectiveness rate, and provenance. Consumers read it; no app maintains counters.
- lifecycle
- Recomputed by the Results surface after a settled test result references content the student used. Historical answers retain policy/version provenance.
- primaryKey
- (tenant_id, content_id, content_version_id, kc_id, policy_version)
- storage
- Derived Results-owned read/materialized extension; stores counts/rate/provenance, not Content title/body/kind fields.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-content-effectiveness
- fieldCount
- 12
itds
[
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]relationships
[ "References one Content item and optional Content version.", "May be scoped to one Curriculum KC.", "Reads many result_content_evidence rows." ]
constraints
[ "validated_by_count and failed_by_count are recomputed by the surface after result changes.", "effectiveness_rate is a surface calculation under policy_version.", "Content title/body/kind stay in Content and are not copied here." ]
invalidExamples
[ "A content app increments validated_by_count directly.", "A dashboard recomputes effectiveness_rate from raw attempts.", "A Results row copies content title or body." ]
example
{
"content_id": "content_factoring_video",
"kc_id": "kc_factoring_quadratics",
"validated_by_count": 41,
"failed_by_count": 9,
"effectiveness_rate": 0.82
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (12)
tenant_id
- anchor
- field-alpha-content-effectiveness-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}content_id
- anchor
- field-alpha-content-effectiveness-content-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Content item this effectiveness row describes.
- range
- Text within documented constraints.
- relationship
- Many effectiveness rows can reference one Content item across versions, KCs, or policies.
- example
- content_factoring_video
- invalidWhen
- Invalid when content_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha derived read/materialized extension over result content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference Content.", "Primary key part.", "Do not copy Content title/body/kind into Results." ]
allowedValues
[]
provenance
{
"label": "Content effectiveness",
"changeType": "EXTEND",
"basis": "Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.",
"upstream": "Alpha derived read/materialized extension over result content evidence",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}content_version_id
- anchor
- field-alpha-content-effectiveness-content-version-id
- type
- TEXT
- nullability
- Nullable primary key part.
- key
- Primary key part
- meaning
- Exact Content version when effectiveness is version-specific.
- range
- Text within documented constraints.
- relationship
- References one Content version when present.
- example
- content_factoring_video_v4
- invalidWhen
- Invalid when content_version_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha derived read/materialized extension over result content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference Content version when present.", "Null means policy intentionally rolls up across versions." ]
allowedValues
[]
provenance
{
"label": "Content effectiveness",
"changeType": "EXTEND",
"basis": "Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.",
"upstream": "Alpha derived read/materialized extension over result content evidence",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}kc_id
- anchor
- field-alpha-content-effectiveness-kc-id
- type
- TEXT
- nullability
- Nullable primary key part.
- key
- Primary key part
- meaning
- Curriculum KC this effectiveness row concerns.
- range
- Text within documented constraints.
- relationship
- References one Curriculum KC when present.
- example
- kc_factoring_quadratics
- invalidWhen
- Invalid when kc_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha derived read/materialized extension over result content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference Curriculum KC when present.", "Null means content-level rollup across its scoped KCs by policy." ]
allowedValues
[]
provenance
{
"label": "Content effectiveness",
"changeType": "EXTEND",
"basis": "Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.",
"upstream": "Alpha derived read/materialized extension over result content evidence",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}subject_id
- anchor
- field-alpha-content-effectiveness-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before content effectiveness is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}validated_by_count
- anchor
- field-alpha-content-effectiveness-validated-by-count
- type
- INTEGER
- nullability
- Required.
- key
- Aggregate value
- meaning
- Number of settled result evidence rows that validated this content under the active policy.
- range
- Integer within documented constraints.
- relationship
- Numeric value on content effectiveness; it feeds documented calculations or reports but does not identify another object.
- example
- 41
- invalidWhen
- Invalid when validated_by_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0.; Surface recomputed; apps never increment..
- upstreamSource
- Alpha derived read/materialized extension over result content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be >= 0.", "Surface recomputed; apps never increment." ]
allowedValues
[]
provenance
{
"label": "Content effectiveness",
"changeType": "EXTEND",
"basis": "Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.",
"upstream": "Alpha derived read/materialized extension over result content evidence",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}failed_by_count
- anchor
- field-alpha-content-effectiveness-failed-by-count
- type
- INTEGER
- nullability
- Required.
- key
- Aggregate value
- meaning
- Number of settled result evidence rows that counted as failed evidence for this content under the active policy.
- range
- Integer within documented constraints.
- relationship
- Numeric value on content effectiveness; it feeds documented calculations or reports but does not identify another object.
- example
- 9
- invalidWhen
- Invalid when failed_by_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0.; Surface recomputed; apps never increment..
- upstreamSource
- Alpha derived read/materialized extension over result content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be >= 0.", "Surface recomputed; apps never increment." ]
allowedValues
[]
provenance
{
"label": "Content effectiveness",
"changeType": "EXTEND",
"basis": "Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.",
"upstream": "Alpha derived read/materialized extension over result content evidence",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}effectiveness_rate
- anchor
- field-alpha-content-effectiveness-effectiveness-rate
- type
- NUMERIC(6,5)
- nullability
- Nullable.
- key
- Not a key
- meaning
- validated_by_count divided by validated plus failed evidence under policy.
- range
- 0.00000 through 1.00000
- relationship
- Numeric value on content effectiveness; it feeds documented calculations or reports but does not identify another object.
- example
- 0.82000
- invalidWhen
- Invalid when effectiveness_rate is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 1 inclusive when present.; Null when there is no counted evidence.; Consumers must not recompute the rate..
- upstreamSource
- Alpha derived read/materialized extension over result content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "0 through 1 inclusive when present.", "Null when there is no counted evidence.", "Consumers must not recompute the rate." ]
allowedValues
[]
provenance
{
"label": "Content effectiveness",
"changeType": "EXTEND",
"basis": "Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.",
"upstream": "Alpha derived read/materialized extension over result content evidence",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}evidence_count
- anchor
- field-alpha-content-effectiveness-evidence-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Total result_content_evidence rows inspected for this rollup.
- range
- Integer within documented constraints.
- relationship
- Numeric value on content effectiveness; it feeds documented calculations or reports but does not identify another object.
- example
- 54
- invalidWhen
- Invalid when evidence_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= validated_by_count + failed_by_count.; Neutral and not_applicable evidence may make this larger..
- upstreamSource
- Alpha derived read/materialized extension over result content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be >= validated_by_count + failed_by_count.", "Neutral and not_applicable evidence may make this larger." ]
allowedValues
[]
provenance
{
"label": "Content effectiveness",
"changeType": "EXTEND",
"basis": "Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.",
"upstream": "Alpha derived read/materialized extension over result content evidence",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}policy_version
- anchor
- field-alpha-content-effectiveness-policy-version
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Policy/config version used to classify content evidence and compute the rate.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one content effectiveness row within a tenant; downstream Results rows reference this value by its named id field.
- example
- content_effectiveness_v2026_06
- invalidWhen
- Invalid when policy_version is missing, violates its documented constraints: Must reference alpha.policy_config.; Primary key part..
- edgeCases
- policy_version follows the content effectiveness lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.policy_config.", "Primary key part." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}source_result_refs
- anchor
- field-alpha-content-effectiveness-source-result-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to the result_content_evidence rows and rollup job that produced this answer.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on content effectiveness; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"evidence_set_id":"eff_factoring_v4_2026_06"}
- invalidWhen
- Invalid when source_result_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha derived read/materialized extension over result content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a JSON array/object of typed references.", "Must not include raw answer payloads or Content bodies." ]
allowedValues
[]
provenance
{
"label": "Content effectiveness",
"changeType": "EXTEND",
"basis": "Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.",
"upstream": "Alpha derived read/materialized extension over result content evidence",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}last_recomputed_at
- anchor
- field-alpha-content-effectiveness-last-recomputed-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort key
- meaning
- UTC timestamp when the surface last recomputed this row.
- range
- UTC timestamp.
- relationship
- Time value on content effectiveness; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-05T14:31:00Z
- invalidWhen
- Invalid when last_recomputed_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha derived read/materialized extension over result content evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be UTC.", "Used for freshness checks." ]
allowedValues
[]
provenance
{
"label": "Content effectiveness",
"changeType": "EXTEND",
"basis": "Results derives content effectiveness from settled result evidence and exposes counts/rate as a read.",
"upstream": "Alpha derived read/materialized extension over result content evidence",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
}alpha.policy_config · Results policy config
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND + RESTRICT
- upstream
- alpha.policy.* config required by cross-cutting rule 4.
- purpose
- Named thresholds, formulas, windows, and config lists the Results surface reads so consumers never hardcode policy numbers. alpha.policy.xp_award_formula is the Results-owned awarded-XP policy for public result-record verified_attempt awards, first-attempt accuracy, effort, repeat attempts, passive-activity verification, and penalties. Grade movement is governed by alpha.policy.grades_mastered_sytd_formula and alpha.policy.map_baseline_grade_delta_not_grades_mastered_formula; alpha.policy.advancement_formula is a deprecated alias of the former only.
- lifecycle
- Created as draft, activated for an effective window, then superseded or deprecated. Historical rows stay available for reproducibility.
- primaryKey
- (tenant_id, policy_name, config_version)
- storage
- Extension config table only; stores named alpha.policy.* values and versions, never magic numbers in consumers.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-policy-config
- fieldCount
- 10
itds
[
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]relationships
[ "Referenced by result, mastery, MAP calculator, report-card, and advancement outputs." ]
constraints
[ "Policy values are structured JSON with schema_name.", "Policy values are never tags or environment variables.", "Secrets are forbidden.", "alpha.policy.xp_award_formula must declare the full mastery x effort grid, first-response-per-component-attempt accuracy semantics, 80% lesson and gated article/video threshold, 90% assessment threshold, 25% perfect first-attempt bonus, and repeat-attempt multipliers.", "Renderer/player code emits response value, first-attempt, provenance, and raw effort evidence only; it must not compute correctness, awarded XP, or own threshold constants.", "alpha.policy.xp_award_formula must declare the public result-record trigger: public kinds, fully_graded, numeric score_percent, content_id, source_adapter_id, producer_result_id, Content/Curriculum expected_xp ownership, verified_attempt output, adapter registration as audit rather than allowlist, no enrollment prerequisite, deterministic award identity, and typed non-award reasons.", "alpha.policy.grades_mastered_sytd_formula must encode max(0,currentWorkingGrade-syStartWorkingGrade) as the default grades-mastered answer.", "alpha.policy.map_baseline_grade_delta_not_grades_mastered_formula must encode max(0,currentWorkingGrade-max(mapBaselinePlacementGrade,syStartWorkingGrade)) and label it placement/reporting context only.", "alpha.policy.advancement_formula is deprecated and must alias only alpha.policy.grades_mastered_sytd_formula." ]
invalidExamples
[ "A dashboard-local mastery cutoff.", "A policy value stored as a free-form tag.", "A secret in value_json.", "A renderer-local first-attempt accuracy XP formula.", "An Analytics rollup that awards XP without writing Results xp_ledger evidence." ]
example
{
"policy_name": "alpha.policy.xp_award_formula",
"config_version": "2026-07-27.issue-1500",
"schema_name": "results.xp_award_formula.v1",
"value_json": {
"source_ref": "workflowy://5622633c96ca",
"source_label": "XP System Brainlift, read 2026-07-06",
"unit": "1 XP = 1 minute of focused learning",
"expected_xp_owner": "Curriculum/Content expected_xp; Results reads expected_xp_ref.",
"public_result_record_trigger": {
"eligible_result_kinds": [
"self_paced",
"external_assessment",
"learning_app_outcome",
"legacy_assessment",
"question_result"
],
"required_evidence": [
"outcome_status=fully_graded",
"numeric score_percent",
"content_id",
"source_adapter_id",
"producer_result_id",
"Content/Curriculum expected_xp"
],
"adapter_registration_role": "audit_and_discovery_not_award_allowlist",
"verified_attempt_role": "Results output award_reason, not a producer input signal",
"track_enrollment_required": false,
"award_identity": "one per tenant_id + source_adapter_id + producer_result_id",
"calculation": "round(expected_xp * clamp(score_percent, 0, 100) / 100)",
"non_award_reasons": [
"outcome_not_fully_graded",
"score_percent_missing",
"content_id_missing",
"expected_xp_missing",
"duplicate_producer_result"
]
},
"evidence_contract": {
"renderer_role": "emit evidence only: response value, first_attempt flag, attempt ordinal, raw effort signals, and gated Curriculum component/question provenance; QTI/Results-owned grading resolves correctness downstream",
"accuracy_rollup_owner": "Analytics",
"award_owner": "Results alpha.xp_ledger",
"accuracy_basis": "first_attempt_only",
"accuracy_basis_scope": "attempt ordinal 1; repeat_attempt_accuracy_basis governs redo attempts",
"repeat_attempt_accuracy_basis": "select the highest attempt_ordinal in the requested evidence window and use the first submitted response per declared question within that attempt",
"component_boundary": "one gated Curriculum component: instructional video, Interactive Article, lesson, quiz, or test",
"denominator": "declared embedded questions; skipped declared questions count incorrect; denominator clamps to max(declared_question_count, attempted_question_count); accuracy_percent is capped at 100"
},
"mastery_thresholds": {
"lesson_percent": 80,
"gated_instructional_video_percent": 80,
"gated_interactive_article_percent": 80,
"assessment_percent": 90
},
"focused_mastered_multiplier": 1,
"perfect_first_attempt_bonus_rate": 0.25,
"perfect_first_attempt_multiplier": 1.25,
"repeat_attempt_multipliers": {
"first_mastery": 1,
"redo1": 0.5,
"redo2": 0.25,
"redo3_plus": 0
},
"enforcement_status": {
"focused_first_attempt_grid": "enforced",
"repeat_attempt_multipliers": "enforced by POST /alpha/results/v1/component-xp-awards",
"effort_class_award_grid": "not_enforced_by_owner_decision_issue_1500",
"effort_class_decision": "Owner decision #1500 (2026-07-27): the effort-class award grid and negative XP are intentionally not implemented; anti-gaming is met by first-attempt-accuracy gating (<80% earns 0) and redo decay (0.5/0.25/0). A graded effort grid and negative XP are rejected as punitive and false-positive-prone on noisy signals."
},
"award_grid": [
{
"mastery_state": "mastered",
"effort_class": "focused",
"result": "full_expected_xp",
"condition": "accuracy_percent >= mastery_threshold_percent and no speed bumps"
},
{
"mastery_state": "perfect",
"effort_class": "focused",
"result": "expected_xp * 1.25",
"condition": "accuracy_percent = 100 on first attempt only"
},
{
"mastery_state": "mastered",
"effort_class": "wasteful",
"result": "partial_expected_xp",
"condition": "mastered with speed bumps such as idling, skipping, rushing, or guessing"
},
{
"mastery_state": "mastered",
"effort_class": "insincere",
"result": "negative_xp",
"condition": "gaming or cheating to master without learning"
},
{
"mastery_state": "not_mastered",
"effort_class": "focused_or_wasteful",
"result": "0",
"condition": "incomplete or complete below mastery threshold"
},
{
"mastery_state": "not_mastered",
"effort_class": "insincere",
"result": "negative_xp",
"condition": "cheating, gaming, rushing, or guessing without mastery"
}
],
"passive_activity_rule": "Do not award XP for article/video engagement alone. Award when learning is verified by embedded-question first-attempt accuracy or another Results-owned verifying attempt; include required article/video time in expected_xp.",
"golden_cells": [
{
"id": "gated_instructional_first_attempt_80_full",
"component_tier": "lesson",
"component_kind": "gated_instructional_video",
"expected_xp": 40,
"accuracy_percent": 80,
"attempt_ordinal": 1,
"effort_class": "focused",
"awarded_xp": 40
},
{
"id": "gated_instructional_first_attempt_below_80_zero",
"component_tier": "lesson",
"component_kind": "gated_interactive_article",
"expected_xp": 40,
"accuracy_percent": 79,
"attempt_ordinal": 1,
"effort_class": "focused",
"awarded_xp": 0
},
{
"id": "gated_instructional_first_attempt_100_bonus",
"component_tier": "lesson",
"component_kind": "gated_instructional_video",
"expected_xp": 40,
"accuracy_percent": 100,
"attempt_ordinal": 1,
"effort_class": "focused",
"awarded_xp": 50
},
{
"id": "assessment_first_attempt_100_full_no_bonus",
"component_tier": "assessment",
"component_kind": "test",
"expected_xp": 45,
"accuracy_percent": 100,
"attempt_ordinal": 1,
"effort_class": "focused",
"awarded_xp": 45
},
{
"id": "gated_instructional_redo1_100_half_no_bonus",
"component_tier": "lesson",
"component_kind": "gated_interactive_article",
"expected_xp": 12,
"accuracy_percent": 100,
"attempt_ordinal": 2,
"effort_class": "focused",
"awarded_xp": 6
},
{
"id": "gated_instructional_redo2_100_quarter_no_bonus",
"component_tier": "lesson",
"component_kind": "gated_interactive_article",
"expected_xp": 12,
"accuracy_percent": 100,
"attempt_ordinal": 3,
"effort_class": "focused",
"awarded_xp": 3
},
{
"id": "gated_instructional_redo3_plus_zero",
"component_tier": "lesson",
"component_kind": "gated_interactive_article",
"expected_xp": 12,
"accuracy_percent": 100,
"attempt_ordinal": 4,
"effort_class": "focused",
"awarded_xp": 0
}
]
}
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (10)
tenant_id
- anchor
- field-alpha-policy-config-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}policy_name
- anchor
- field-alpha-policy-config-policy-name
- type
- TEXT enum
- nullability
- Required.
- key
- Primary key part
- meaning
- Canonical policy key read by the Results surface.
- range
- One documented enum value.
- relationship
- Primary identifier for one policy config row within a tenant; downstream Results rows reference this value by its named id field.
- example
- alpha.policy.growth_x_target
- invalidWhen
- Invalid when policy_name is not one of alpha.policy.mastery_cutoff, alpha.policy.stuck_attempt_threshold, alpha.policy.gate_retake_cooldown, alpha.policy.proxy_subject_rules, alpha.policy.growth_x_target, alpha.policy.school_year_boundaries, alpha.policy.school_levels, alpha.policy.tenure_buckets, alpha.policy.rit_calculator, alpha.policy.percentile_rit_translation, alpha.policy.r90_table, alpha.policy.retention_model, alpha.policy.next_task_selection, alpha.policy.xp_award_formula, alpha.policy.content_effectiveness, alpha.policy.advancement_formula, alpha.policy.next_task, alpha.policy.results.raw_timeback_import_expected_xp_default, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before policy config is written; adding a new policy_name value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be one documented policy name or an accepted future policy through architecture update." ]
allowedValues
[
{
"value": "alpha.policy.mastery_cutoff",
"meaning": "Cutoff for mastery decisions, displayed as >=90% when value is 89.5.",
"useWhen": "Cutoff for mastery decisions, displayed as >=90% when value is 89.5.",
"invalidWhen": "Invalid when alpha.policy.mastery_cutoff does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.stuck_attempt_threshold",
"meaning": "Attempt count threshold for stuck-student detection.",
"useWhen": "Attempt count threshold for stuck-student detection.",
"invalidWhen": "Invalid when alpha.policy.stuck_attempt_threshold does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.gate_retake_cooldown",
"meaning": "Cooldown window before retaking a failed mastery gate.",
"useWhen": "Cooldown window before retaking a failed mastery gate.",
"invalidWhen": "Invalid when alpha.policy.gate_retake_cooldown does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.proxy_subject_rules",
"meaning": "Rules mapping source subjects such as Vocab, Writing, and FastMath.",
"useWhen": "Rules mapping source subjects such as Vocab, Writing, and FastMath.",
"invalidWhen": "Invalid when alpha.policy.proxy_subject_rules does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.growth_x_target",
"meaning": "Default Growth X target, currently 2.0.",
"useWhen": "Default Growth X target, currently 2.0.",
"invalidWhen": "Invalid when alpha.policy.growth_x_target does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.school_year_boundaries",
"meaning": "School-year boundaries for term and TimeBack-era calculations.",
"useWhen": "School-year boundaries for term and TimeBack-era calculations.",
"invalidWhen": "Invalid when alpha.policy.school_year_boundaries does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.school_levels",
"meaning": "Locked WL/LL/L1/L2/MS/HS school-level registry used by every report that filters by level.",
"useWhen": "Locked WL/LL/L1/L2/MS/HS school-level registry used by every report that filters by level.",
"invalidWhen": "Invalid when alpha.policy.school_levels does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.tenure_buckets",
"meaning": "Locked tenure bucket definitions read from admission_date; reports never hardcode band edges.",
"useWhen": "Locked tenure bucket definitions read from admission_date; reports never hardcode band edges.",
"invalidWhen": "Invalid when alpha.policy.tenure_buckets does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.rit_calculator",
"meaning": "RIT50/RIT90/effective-grade and 99-level calculator config.",
"useWhen": "RIT50/RIT90/effective-grade and 99-level calculator config.",
"invalidWhen": "Invalid when alpha.policy.rit_calculator does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.percentile_rit_translation",
"meaning": "Percentile <-> RIT translation config over NWEA published norms; no app-side norms table.",
"useWhen": "Percentile <-> RIT translation config over NWEA published norms; no app-side norms table.",
"invalidWhen": "Invalid when alpha.policy.percentile_rit_translation does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.r90_table",
"meaning": "Legacy Results R90 fixture policy; GOALS grade2RIT/R90 uses NWEAMAP/Analytics.",
"useWhen": "Legacy Results R90 fixture policy; GOALS grade2RIT/R90 uses NWEAMAP/Analytics.",
"invalidWhen": "Invalid when alpha.policy.r90_table does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.retention_model",
"meaning": "Retention model used for student_kc_state.current_retention and next_due_at.",
"useWhen": "Retention model used for student_kc_state.current_retention and next_due_at.",
"invalidWhen": "Invalid when alpha.policy.retention_model does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.next_task_selection",
"meaning": "Task-selection priority and blocked/null-reason policy.",
"useWhen": "Task-selection priority and blocked/null-reason policy.",
"invalidWhen": "Invalid when alpha.policy.next_task_selection does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.xp_award_formula",
"meaning": "Awarded-XP formula, first-attempt accuracy thresholds, perfect bonus, repeat-attempt discount, effort weights, passive verification, and penalty rules.",
"useWhen": "Awarded-XP formula, first-attempt accuracy thresholds, perfect bonus, repeat-attempt discount, effort weights, passive verification, and penalty rules.",
"invalidWhen": "Invalid when alpha.policy.xp_award_formula does not declare the Results-owned per-attempt accuracy, repeat discounts, and effort grid or when clients/renderers duplicate the thresholds.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.content_effectiveness",
"meaning": "Evidence classification and effectiveness-rate policy for content rollups.",
"useWhen": "Evidence classification and effectiveness-rate policy for content rollups.",
"invalidWhen": "Invalid when alpha.policy.content_effectiveness does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.grades_mastered_sytd_formula",
"meaning": "Default grades-mastered formula: max(0,currentWorkingGrade-syStartWorkingGrade).",
"useWhen": "Default grades-mastered formula: max(0,currentWorkingGrade-syStartWorkingGrade).",
"invalidWhen": "Invalid when alpha.policy.grades_mastered_sytd_formula does not match TimeBack 2026.07.17.11 MG-10 or its documented usage.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.map_baseline_grade_delta_not_grades_mastered_formula",
"meaning": "Placement/reporting context only: max(0,currentWorkingGrade-max(mapBaselinePlacementGrade,syStartWorkingGrade)); never grades mastered.",
"useWhen": "Placement/reporting context only: max(0,currentWorkingGrade-max(mapBaselinePlacementGrade,syStartWorkingGrade)); never grades mastered.",
"invalidWhen": "Invalid when alpha.policy.map_baseline_grade_delta_not_grades_mastered_formula does not match TimeBack 2026.07.17.11 MG-10 or its documented usage.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.advancement_formula",
"meaning": "Deprecated alias fixed to alpha.policy.grades_mastered_sytd_formula only.",
"useWhen": "Deprecated alias fixed to alpha.policy.grades_mastered_sytd_formula only.",
"invalidWhen": "Invalid when alpha.policy.advancement_formula does not match TimeBack 2026.07.17.11 MG-10 or its documented usage.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.next_task",
"meaning": "Task-selection priority and blocked/null-reason policy used by the current Results implementation.",
"useWhen": "Task-selection priority and blocked/null-reason policy used by the current Results implementation.",
"invalidWhen": "Invalid when alpha.policy.next_task does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha.policy.results.raw_timeback_import_expected_xp_default",
"meaning": "Adapter-default expected XP policy for raw TimeBack import rows that lack both source expected XP and awarded/source XP.",
"useWhen": "Adapter-default expected XP policy for raw TimeBack import rows that lack both source expected XP and awarded/source XP.",
"invalidWhen": "Invalid when alpha.policy.results.raw_timeback_import_expected_xp_default does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}config_version
- anchor
- field-alpha-policy-config-config-version
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Stable version string for this policy value.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one policy config row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 2026-06-03
- invalidWhen
- Invalid when config_version is missing, violates its documented constraints: Unique with tenant_id and policy_name.; Use ISO date or semantic version..
- edgeCases
- config_version follows the policy config lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Unique with tenant_id and policy_name.", "Use ISO date or semantic version." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}schema_name
- anchor
- field-alpha-policy-config-schema-name
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Schema used to validate value_json.
- range
- Text within documented constraints.
- relationship
- Attribute on policy config; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for schema_name.
- example
- results.retention_model.v2
- invalidWhen
- Invalid when schema_name is missing, violates its documented constraints: Must be a known policy schema.; Changing schema requires a new config_version..
- edgeCases
- schema_name follows the policy config lifecycle; AP pedagogy changes use v2 policy schemas and a new config_version instead of client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a known policy schema.", "Changing schema requires a new config_version.", "results.xp_award_formula.v1 validates the first-attempt accuracy and effort-grid payload.", "results.mastery_cutoff.v2 validates AP staged acquisition, conjunctive DOK facet bars, retry day-timing, KC graph consistency, and grade-level mastery gate payloads.", "results.retention_model.v2 validates spacing fraction and latency adjustment payloads.", "results.next_task.v2 validates interleaving and review:new ratio payloads." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}value_json
- anchor
- field-alpha-policy-config-value-json
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured policy value or formula inputs. AP pedagogy policy rows expose staged acquisition, conjunctive DOK facet bars, mastery-test retry timing, KC graph consistency, expanding-interval spacing, latency adjustment, interleaving, and review:new ratio settings; alpha.policy.xp_award_formula continues to expose the canonical XP formula payload.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on policy config; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"source_ref":"workflowy://5622633c96ca","source_label":"XP System Brainlift, read 2026-07-06","unit":"1 XP = 1 minute of focused learning","expected_xp_owner":"Curriculum/Content expected_xp; Results reads expected_xp_ref.","evidence_contract":{"renderer_role":"emit evidence only: response value, first_attempt flag, attempt ordinal, raw effort signals, and gated Curriculum component/question provenance; QTI/Results-owned grading resolves correctness downstream","accuracy_rollup_owner":"Analytics","award_owner":"Results alpha.xp_ledger","accuracy_basis":"first_attempt_only","accuracy_basis_scope":"attempt ordinal 1; repeat_attempt_accuracy_basis governs redo attempts","repeat_attempt_accuracy_basis":"select the highest attempt_ordinal in the requested evidence window and use the first submitted response per declared question within that attempt","component_boundary":"one gated Curriculum component: instructional video, Interactive Article, lesson, quiz, or test","denominator":"declared embedded questions; skipped declared questions count incorrect; denominator clamps to max(declared_question_count, attempted_question_count); accuracy_percent is capped at 100"},"mastery_thresholds":{"lesson_percent":80,"gated_instructional_video_percent":80,"gated_interactive_article_percent":80,"assessment_percent":90},"focused_mastered_multiplier":1,"perfect_first_attempt_bonus_rate":0.25,"perfect_first_attempt_multiplier":1.25,"repeat_attempt_multipliers":{"first_mastery":1,"redo1":0.5,"redo2":0.25,"redo3_plus":0},"award_grid":[{"mastery_state":"mastered","effort_class":"focused","result":"full_expected_xp","condition":"accuracy_percent >= mastery_threshold_percent and no speed bumps"},{"mastery_state":"perfect","effort_class":"focused","result":"expected_xp * 1.25","condition":"accuracy_percent = 100 on first attempt only"},{"mastery_state":"mastered","effort_class":"wasteful","result":"partial_expected_xp","condition":"mastered with speed bumps such as idling, skipping, rushing, or guessing"},{"mastery_state":"mastered","effort_class":"insincere","result":"negative_xp","condition":"gaming or cheating to master without learning"},{"mastery_state":"not_mastered","effort_class":"focused_or_wasteful","result":"0","condition":"incomplete or complete below mastery threshold"},{"mastery_state":"not_mastered","effort_class":"insincere","result":"negative_xp","condition":"cheating, gaming, rushing, or guessing without mastery"}],"passive_activity_rule":"Do not award XP for article/video engagement alone. Award when learning is verified by embedded-question first-attempt accuracy or another Results-owned verifying attempt; include required article/video time in expected_xp.","golden_cells":[{"id":"gated_instructional_first_attempt_80_full","component_tier":"lesson","component_kind":"gated_instructional_video","expected_xp":40,"accuracy_percent":80,"attempt_ordinal":1,"effort_class":"focused","awarded_xp":40},{"id":"gated_instructional_first_attempt_below_80_zero","component_tier":"lesson","component_kind":"gated_interactive_article","expected_xp":40,"accuracy_percent":79,"attempt_ordinal":1,"effort_class":"focused","awarded_xp":0},{"id":"gated_instructional_first_attempt_100_bonus","component_tier":"lesson","component_kind":"gated_instructional_video","expected_xp":40,"accuracy_percent":100,"attempt_ordinal":1,"effort_class":"focused","awarded_xp":50},{"id":"assessment_first_attempt_100_full_no_bonus","component_tier":"assessment","component_kind":"test","expected_xp":45,"accuracy_percent":100,"attempt_ordinal":1,"effort_class":"focused","awarded_xp":45},{"id":"gated_instructional_redo1_100_half_no_bonus","component_tier":"lesson","component_kind":"gated_interactive_article","expected_xp":12,"accuracy_percent":100,"attempt_ordinal":2,"effort_class":"focused","awarded_xp":6},{"id":"gated_instructional_redo2_100_quarter_no_bonus","component_tier":"lesson","component_kind":"gated_interactive_article","expected_xp":12,"accuracy_percent":100,"attempt_ordinal":3,"effort_class":"focused","awarded_xp":3},{"id":"gated_instructional_redo3_plus_zero","component_tier":"lesson","component_kind":"gated_interactive_article","expected_xp":12,"accuracy_percent":100,"attempt_ordinal":4,"effort_class":"focused","awarded_xp":0}]}
- invalidWhen
- Invalid when value_json is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it. AP pedagogy policy payloads are exposed config; DOK facet and KC graph checks are auditable in mastery_ledger.criteria_result, while FIRe internals remain hidden behind retention_model_ref and next_due_at.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must validate against schema_name.", "Must not contain secrets or free-text business rules.", "For alpha.policy.xp_award_formula, must include evidence_contract, mastery_thresholds, perfect_first_attempt_multiplier, repeat_attempt_multipliers, enforcement_status, award_grid, passive_activity_rule, and golden_cells.", "enforcement_status must distinguish the enforced focused/redo paths from effort-class rules that are not enforced by owner decision (#1500, 2026-07-27); consumers must not infer negative or partial effort awards while effort_class_award_grid is marked not enforced.", "The golden_cells must pin 80% first-attempt accuracy to full expected XP, below 80% to 0 XP, 100% first-attempt accuracy to expected_xp * 1.25 for lesson-tier gated article/video components, assessment first-attempt 100% to full XP without a bonus, and focused redo mastery to 50% / 25% / 0% for redo1 / redo2 / redo3+.", "For alpha.policy.mastery_cutoff, must include grade_level_mastery_gate and staged_acquisition with E1-E4 gates, >=80% stage thresholds, fluency_state mapping, E4 different-calendar-day requirement, DOK1-2 core >=90%, DOK3 transfer >=70%, next-calendar-day failed mastery-test retry timing, and KC graph consistency thresholds.", "For alpha.policy.retention_model, must include spacing_fraction min/default/max keys, per-subject overrides, target_retention_interval_days reference key, and latency_adjustment where fast+correct extends and slow+correct shortens intervals.", "For alpha.policy.next_task, must include interleaving constraints and review_new_ratio_targets by ability band." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}status
- anchor
- field-alpha-policy-config-status
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Lifecycle state of this config row.
- range
- One documented enum value.
- relationship
- Governed value on policy config; no free-text relationship, and consumers must use the documented enum values.
- example
- active
- invalidWhen
- Invalid when status is not one of draft, active, superseded, deprecated, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before policy config is written; adding a new status value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "draft",
"meaning": "Config is being prepared and is not used by surface computations.",
"useWhen": "Config is being prepared and is not used by surface computations.",
"invalidWhen": "Invalid when draft does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "active",
"meaning": "Config is the current value read by the surface for its effective window.",
"useWhen": "Config is the current value read by the surface for its effective window.",
"invalidWhen": "Invalid when active does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "superseded",
"meaning": "Config has been replaced but remains available for historical answers.",
"useWhen": "Config has been replaced but remains available for historical answers.",
"invalidWhen": "Invalid when superseded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "deprecated",
"meaning": "Config should not be used for new calculations and remains only for audit.",
"useWhen": "Config should not be used for new calculations and remains only for audit.",
"invalidWhen": "Invalid when deprecated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}begin_date
- anchor
- field-alpha-policy-config-begin-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- First date this config can be used.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2026-06-03
- invalidWhen
- Invalid when begin_date is null but is_time_locatable is true, or when consumers include the row in point-in-time results despite a missing start.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Null configs are not time-locatable and cannot drive point-in-time calculations." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}end_date
- anchor
- field-alpha-policy-config-end-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- Last date this config can be used; null means active after begin_date.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2027-06-30
- invalidWhen
- Invalid when end_date is before begin_date, or when a non-null end_date is ignored for point-in-time reads.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be null or >= begin_date." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}is_time_locatable
- anchor
- field-alpha-policy-config-is-time-locatable
- type
- BOOLEAN
- nullability
- Required on effective-dated rows.
- key
- Filter key
- meaning
- Surface-computed boolean telling consumers whether begin_date is known enough for point-in-time reads.
- range
- true or false.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- true
- invalidWhen
- Invalid when true with begin_date NULL, or false while a row is included in point-in-time computation.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha point-in-time rule
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Cross-cutting rule 2 requires typed time-locatability.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "begin_date NULL means false and the row is excluded from point-in-time computation.", "end_date NULL means active after begin_date.", "Both null means false." ]
allowedValues
[]
provenance
{
"label": "Point-in-time rule",
"changeType": "RESTRICT",
"basis": "Cross-cutting rule 2 requires typed time-locatability.",
"upstream": "Alpha point-in-time rule",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
}
]
}owner
- anchor
- field-alpha-policy-config-owner
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Role accountable for the config value.
- range
- Text within documented constraints.
- relationship
- Attribute on policy config; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for owner.
- example
- academics-policy
- invalidWhen
- Invalid when owner is missing, violates its documented constraints: 1 to 160 visible characters.; Must be a role or team, not a secret..
- edgeCases
- owner follows the policy config lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "1 to 160 visible characters.", "Must be a role or team, not a secret." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.academic_record_view · Academic record
- kind
- SQL view
- moduleHome
- Results
- changeType
- RENAME + RESTRICT
- upstream
- edfi.canonical_record where resource_name/record_kind = StudentAcademicRecord
- purpose
- Plain Results view of Ed-Fi StudentAcademicRecord: one student's cumulative or term academic achievement, credits, GPA evidence, diplomas, honors, and report-card references.
- lifecycle
- Produced by the Ed-Fi 1EdTech base after canonical ack. Results reads only canonical records, excludes drafts, and excludes soft-deleted rows unless audit scope is explicit.
- primaryKey
- (tenant_id, academic_record_id)
- storage
- SQL view over Ed-Fi canonical records; filters tenant/resource/canonical state/is_deleted, extracts typed payload_json fields, resolves descriptors, and joins roster sourcedIds; no Alpha storage.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-academic-record-view
- fieldCount
- 19
itds
[
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]relationships
[ "Belongs to one TimeBack student.", "References one education organization/school and one canonical term.", "Can have many course transcript rows." ]
constraints
[ "record_kind must be StudentAcademicRecord.", "Descriptor fields resolve through edfi.descriptor_code.", "Student and school references resolve through platform3 sourcedIds.", "No Alpha table stores StudentAcademicRecord payload fields." ]
invalidExamples
[ "Querying edfi.draft_record for a report-card answer.", "Filtering by Ed-Fi display term text instead of canonical_term_id.", "Copying cumulative credits into an Alpha transcript table." ]
example
{
"academic_record_id": "edfi_sar_10017_2025_26_spring",
"student_id": "stu_timeback_10017",
"canonical_term_id": "term_2025_26_spring",
"cumulative_earned_credits": 18.5
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (19)
academic_record_id
- anchor
- field-alpha-academic-record-view-academic-record-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable Results id for the StudentAcademicRecord view row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one academic record view row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003101
- invalidWhen
- Invalid when academic_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record.id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Unique within tenant.", "Derived from the Ed-Fi canonical_record id and resource kind." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}tenant_id
- anchor
- field-alpha-academic-record-view-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-academic-record-view-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}student_sourced_id
- anchor
- field-alpha-academic-record-view-student-sourced-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- Platform3 OneRoster student sourcedId resolved from the Ed-Fi StudentReference.
- range
- Text within documented constraints.
- relationship
- References one People & Orgs student through platform3 sourcedId.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_sourced_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- StudentAcademicRecord.StudentReference
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must join to the same tenant People & Orgs student.", "Do not expose an Ed-Fi-only local student key as the Alpha student id." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi roster reference",
"changeType": "RENAME + RESTRICT",
"basis": "Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.",
"upstream": "edfi.canonical_record references plus OneRoster sourcedIds",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}school_sourced_id
- anchor
- field-alpha-academic-record-view-school-sourced-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- Platform3 org/school sourcedId resolved from the Ed-Fi EducationOrganizationReference.
- range
- Text within documented constraints.
- relationship
- References one People & Orgs school or education organization.
- example
- school_north_valley
- invalidWhen
- Invalid when school_sourced_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- StudentAcademicRecord.EducationOrganizationReference
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must join to a same-tenant People & Orgs org.", "District/school meaning comes from the org tree, not Results storage." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi roster reference",
"changeType": "RENAME + RESTRICT",
"basis": "Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.",
"upstream": "edfi.canonical_record references plus OneRoster sourcedIds",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}canonical_term_id
- anchor
- field-alpha-academic-record-view-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}school_year
- anchor
- field-alpha-academic-record-view-school-year
- type
- TEXT
- nullability
- Required.
- key
- Filter key
- meaning
- Canonical school year for the academic record.
- range
- Text within documented constraints.
- relationship
- Attribute on academic record view; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for school_year.
- example
- 2025-26
- invalidWhen
- Invalid when school_year is missing, violates its documented constraints: Format YYYY-YY.; Resolved from Ed-Fi SchoolYearTypeReference before the view is public..
- edgeCases
- school_year follows the academic record view lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- StudentAcademicRecord.SchoolYearTypeReference
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Format YYYY-YY.", "Resolved from Ed-Fi SchoolYearTypeReference before the view is public." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}term_descriptor
- anchor
- field-alpha-academic-record-view-term-descriptor
- type
- TEXT descriptor code
- nullability
- Required in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Filter key
- meaning
- Ed-Fi TermDescriptor code for the source academic record, resolved beside canonical_term_id.
- range
- Text within documented constraints.
- relationship
- References one governed Ed-Fi descriptor value through edfi.descriptor_code.
- example
- Spring Semester
- invalidWhen
- Invalid when the descriptor cannot be resolved through edfi.descriptor_code for the tenant and effective date.
- edgeCases
- Descriptor labels may change over time; use the governed code plus descriptor provenance, not display-text parsing.
- upstreamSource
- StudentAcademicRecord.TermDescriptor
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must resolve through edfi.descriptor_code by tenant_id, descriptor_type, namespace, code_value, and effective-date window.", "No local Results descriptor table or free-text fallback is allowed." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi descriptor resolution",
"changeType": "RESTRICT",
"basis": "Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.",
"upstream": "edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
}session_attempted_credits
- anchor
- field-alpha-academic-record-view-session-attempted-credits
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Credits attempted during this academic session.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on academic record view; it feeds documented calculations or reports but does not identify another object.
- example
- 3.50
- invalidWhen
- Invalid when session_attempted_credits is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 or greater when present.; Extracted as a typed number from payload_json, not client JSON parsing..
- upstreamSource
- StudentAcademicRecord.SessionAttemptedCredits
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 or greater when present.", "Extracted as a typed number from payload_json, not client JSON parsing." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}session_earned_credits
- anchor
- field-alpha-academic-record-view-session-earned-credits
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Credits earned during this academic session.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on academic record view; it feeds documented calculations or reports but does not identify another object.
- example
- 3.50
- invalidWhen
- Invalid when session_earned_credits is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 or greater when present.; Must not exceed attempted credits unless the source record explicitly allows transfer/extra-credit context..
- upstreamSource
- StudentAcademicRecord.SessionEarnedCredits
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 or greater when present.", "Must not exceed attempted credits unless the source record explicitly allows transfer/extra-credit context." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}cumulative_attempted_credits
- anchor
- field-alpha-academic-record-view-cumulative-attempted-credits
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Total attempted credits in the cumulative academic record.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on academic record view; it feeds documented calculations or reports but does not identify another object.
- example
- 20.00
- invalidWhen
- Invalid when cumulative_attempted_credits is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 or greater when present.; Extracted from Ed-Fi credit object value..
- upstreamSource
- StudentAcademicRecord.CumulativeAttemptedCredits
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 or greater when present.", "Extracted from Ed-Fi credit object value." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}cumulative_earned_credits
- anchor
- field-alpha-academic-record-view-cumulative-earned-credits
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Total earned credits in the cumulative academic record.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on academic record view; it feeds documented calculations or reports but does not identify another object.
- example
- 18.50
- invalidWhen
- Invalid when cumulative_earned_credits is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 or greater when present.; Used by transcript rollups when course-level rows are unavailable..
- upstreamSource
- StudentAcademicRecord.CumulativeEarnedCredits
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 or greater when present.", "Used by transcript rollups when course-level rows are unavailable." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}gpa
- anchor
- field-alpha-academic-record-view-gpa
- type
- NUMERIC(5,3)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Grade point average value from the academic record when the source includes a GPA object.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on academic record view; it feeds documented calculations or reports but does not identify another object.
- example
- 3.875
- invalidWhen
- Invalid when gpa is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through the tenant's configured GPA scale when present.; Descriptor and GPA type provenance remains in source_evidence when multiple GPA objects exist..
- upstreamSource
- StudentAcademicRecord.GradePointAverages
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 through the tenant's configured GPA scale when present.", "Descriptor and GPA type provenance remains in source_evidence when multiple GPA objects exist." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}class_rank
- anchor
- field-alpha-academic-record-view-class-rank
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Class-rank value from Ed-Fi ClassRanking when present.
- range
- Integer within documented constraints.
- relationship
- Numeric value on academic record view; it feeds documented calculations or reports but does not identify another object.
- example
- 12
- invalidWhen
- Invalid when class_rank is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 1 when present.; Null when no rank exists or the source suppresses it..
- upstreamSource
- StudentAcademicRecord.ClassRanking
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be >= 1 when present.", "Null when no rank exists or the source suppresses it." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}projected_graduation_date
- anchor
- field-alpha-academic-record-view-projected-graduation-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- Projected graduation date from the academic record.
- range
- ISO 8601 calendar date.
- relationship
- Time value on academic record view; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2028-06-01
- invalidWhen
- Invalid when projected_graduation_date is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- StudentAcademicRecord.ProjectedGraduationDate
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "ISO 8601 date.", "May be a month/year projection represented as a canonical date by Ed-Fi source policy." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}source_canonical_record_id
- anchor
- field-alpha-academic-record-view-source-canonical-record-id
- type
- UUID
- nullability
- Required in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Ed-Fi canonical_record row id backing this Alpha view row.
- range
- PostgreSQL UUID.
- relationship
- References exactly one Ed-Fi canonical record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003001
- invalidWhen
- Invalid when source_canonical_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record.id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference edfi.canonical_record.", "Used only for audit and raw/API convergence." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}canonical_state
- anchor
- field-alpha-academic-record-view-canonical-state
- type
- TEXT enum
- nullability
- Required in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Canonical state of the source Ed-Fi record.
- range
- One documented enum value.
- relationship
- Governed value on academic record view; no free-text relationship, and consumers must use the documented enum values.
- example
- canonical
- invalidWhen
- Invalid when canonical_state is not one of canonical, superseded, deleted, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before academic record view is written; adding a new canonical_state value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- edfi.canonical_record.canonical_state
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Ordinary reads include canonical only.", "Superseded/deleted states require audit or point-in-time scope." ]
allowedValues
[
{
"value": "canonical",
"meaning": "The Ed-Fi base accepted the record and it is eligible for Results reads.",
"useWhen": "The Ed-Fi base accepted the record and it is eligible for Results reads.",
"invalidWhen": "Invalid when canonical does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "superseded",
"meaning": "A later canonical record replaced this row; ordinary current reads exclude it unless point-in-time or audit scope asks for it.",
"useWhen": "A later canonical record replaced this row; ordinary current reads exclude it unless point-in-time or audit scope asks for it.",
"invalidWhen": "Invalid when superseded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "deleted",
"meaning": "The canonical row is soft-deleted and ordinary reads exclude it.",
"useWhen": "The canonical row is soft-deleted and ordinary reads exclude it.",
"invalidWhen": "Invalid when deleted does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}deleted_at
- anchor
- field-alpha-academic-record-view-deleted-at
- type
- TIMESTAMPTZ
- nullability
- Nullable in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Soft-delete timestamp. Null means active; non-null rows stay available for authorized audit reads and are excluded from ordinary current reports.
- range
- UTC timestamp.
- relationship
- Time value on academic record view; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when deleted_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- edfi.canonical_record_overlay.deleted_at
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Never hard-delete audit-significant Results rows.", "Non-null values must be UTC.", "Legal erasure flows are separate privacy workflows." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}modified_at
- anchor
- field-alpha-academic-record-view-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on academic record view; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.course_transcript_view · Course transcript
- kind
- SQL view
- moduleHome
- Results
- changeType
- RENAME + RESTRICT
- upstream
- edfi.canonical_record where resource_name/record_kind = CourseTranscript, joined to StudentAcademicRecord references
- purpose
- Plain Results view of Ed-Fi CourseTranscript: final course grade, attempt result, attempted credits, earned credits, credit descriptors, repeat code, and source academic-record link.
- lifecycle
- Created only after the Ed-Fi base accepts a canonical CourseTranscript record. Corrections route to the Ed-Fi 1EdTech surface; Results exposes the typed view.
- primaryKey
- (tenant_id, course_transcript_id)
- storage
- SQL view over Ed-Fi canonical records; descriptor fields resolve through edfi.descriptor_code and course/student/school references resolve through platform3 sourcedIds; no Alpha storage.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-course-transcript-view
- fieldCount
- 20
itds
[
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]relationships
[ "Belongs to one academic record and one student.", "References one course and optionally sections/teachers through platform3 sourcedIds.", "Feeds transcript_result_view." ]
constraints
[ "record_kind must be CourseTranscript.", "course_attempt_result is required and descriptor-resolved.", "Course and student references must resolve through platform3 sourcedIds.", "No Alpha table stores CourseTranscript payload fields." ]
invalidExamples
[ "A transcript row without an academic_record_id.", "A final grade parsed from DiagnosticStatement.", "Client descriptor lookup tables for CourseAttemptResult." ]
example
{
"course_transcript_id": "edfi_ct_10017_alg1_spring",
"course_id": "course_algebra_1",
"final_letter_grade": "A-",
"earned_credits": 0.5
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (20)
course_transcript_id
- anchor
- field-alpha-course-transcript-view-course-transcript-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable Results id for one CourseTranscript view row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one course transcript view row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003201
- invalidWhen
- Invalid when course_transcript_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record.id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Unique within tenant.", "Derived from the source canonical_record id and record kind." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}tenant_id
- anchor
- field-alpha-course-transcript-view-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-course-transcript-view-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}academic_record_id
- anchor
- field-alpha-course-transcript-view-academic-record-id
- type
- UUID
- nullability
- Required.
- key
- Join key
- meaning
- Academic record this course transcript belongs to.
- range
- PostgreSQL UUID.
- relationship
- Many course transcripts can belong to one academic record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003101
- invalidWhen
- Invalid when academic_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- CourseTranscript.StudentAcademicRecordReference
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference alpha.academic_record_view in the same tenant." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}course_id
- anchor
- field-alpha-course-transcript-view-course-id
- type
- TEXT
- nullability
- Required.
- key
- Join/filter key
- meaning
- Platform3 course sourcedId for the course recorded on the transcript.
- range
- Text within documented constraints.
- relationship
- References one platform3 course; one course can appear on many transcripts.
- example
- course_algebra_1
- invalidWhen
- Invalid when course_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- CourseTranscript.CourseReference
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must resolve through OneRoster/People & Orgs course views.", "Do not use a local Ed-Fi course key in public Alpha filters." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi roster reference",
"changeType": "RENAME + RESTRICT",
"basis": "Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.",
"upstream": "edfi.canonical_record references plus OneRoster sourcedIds",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}course_title
- anchor
- field-alpha-course-transcript-view-course-title
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Course title from Ed-Fi when present.
- range
- Text within documented constraints.
- relationship
- Attribute on course transcript view; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for course_title.
- example
- Algebra I
- invalidWhen
- Invalid when course_title violates its documented constraints: 0 to 120 characters.; Display-only; do not parse for subject, grade, or course id..
- edgeCases
- course_title follows the course transcript view lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- CourseTranscript.CourseTitle
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 to 120 characters.", "Display-only; do not parse for subject, grade, or course id." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}canonical_term_id
- anchor
- field-alpha-course-transcript-view-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}school_year
- anchor
- field-alpha-course-transcript-view-school-year
- type
- TEXT
- nullability
- Required.
- key
- Filter key
- meaning
- Canonical school year inherited from the linked academic record.
- range
- Text within documented constraints.
- relationship
- Attribute on course transcript view; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for school_year.
- example
- 2025-26
- invalidWhen
- Invalid when school_year is missing, violates its documented constraints: Format YYYY-YY.; Must match the linked academic_record_view row..
- edgeCases
- school_year follows the course transcript view lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- StudentAcademicRecord.SchoolYear through CourseTranscript.StudentAcademicRecordReference
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Format YYYY-YY.", "Must match the linked academic_record_view row." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}course_attempt_result
- anchor
- field-alpha-course-transcript-view-course-attempt-result
- type
- TEXT descriptor code
- nullability
- Required.
- key
- Filter key
- meaning
- Governed Ed-Fi CourseAttemptResultDescriptor value for the student's course attempt.
- range
- Text within documented constraints.
- relationship
- References one governed Ed-Fi descriptor value through edfi.descriptor_code.
- example
- Pass
- invalidWhen
- Invalid when the descriptor cannot be resolved through edfi.descriptor_code for the tenant and effective date.
- edgeCases
- Descriptor labels may change over time; use the governed code plus descriptor provenance, not display-text parsing.
- upstreamSource
- CourseTranscript.CourseAttemptResultDescriptor
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must resolve through edfi.descriptor_code by tenant_id, descriptor_type, namespace, code_value, and effective-date window.", "No local Results descriptor table or free-text fallback is allowed." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi descriptor resolution",
"changeType": "RESTRICT",
"basis": "Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.",
"upstream": "edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
}attempted_credits
- anchor
- field-alpha-course-transcript-view-attempted-credits
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Credits the student attempted for this course.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on course transcript view; it feeds documented calculations or reports but does not identify another object.
- example
- 0.50
- invalidWhen
- Invalid when attempted_credits is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 or greater when present.; Extracted from Ed-Fi AttemptedCredits object..
- upstreamSource
- CourseTranscript.AttemptedCredits
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 or greater when present.", "Extracted from Ed-Fi AttemptedCredits object." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}earned_credits
- anchor
- field-alpha-course-transcript-view-earned-credits
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Credits the student earned for this course.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on course transcript view; it feeds documented calculations or reports but does not identify another object.
- example
- 0.50
- invalidWhen
- Invalid when earned_credits is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 or greater when present.; This is the credit field used by transcript_result_view for final course answers..
- upstreamSource
- CourseTranscript.EarnedCredits
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 or greater when present.", "This is the credit field used by transcript_result_view for final course answers." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}credit_type
- anchor
- field-alpha-course-transcript-view-credit-type
- type
- TEXT descriptor code
- nullability
- Nullable.
- key
- Not a key
- meaning
- Governed descriptor for the kind/category of course credit when Ed-Fi supplies one.
- range
- Text within documented constraints.
- relationship
- References one governed Ed-Fi descriptor value through edfi.descriptor_code.
- example
- Academic
- invalidWhen
- Invalid when the descriptor cannot be resolved through edfi.descriptor_code for the tenant and effective date.
- edgeCases
- Descriptor labels may change over time; use the governed code plus descriptor provenance, not display-text parsing.
- upstreamSource
- CourseTranscript.CreditCategories
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must resolve through edfi.descriptor_code by tenant_id, descriptor_type, namespace, code_value, and effective-date window.", "No local Results descriptor table or free-text fallback is allowed." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi descriptor resolution",
"changeType": "RESTRICT",
"basis": "Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.",
"upstream": "edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
}method_credit_earned
- anchor
- field-alpha-course-transcript-view-method-credit-earned
- type
- TEXT descriptor code
- nullability
- Nullable.
- key
- Not a key
- meaning
- Governed descriptor for how the credits were earned.
- range
- Text within documented constraints.
- relationship
- References one governed Ed-Fi descriptor value through edfi.descriptor_code.
- example
- Classroom
- invalidWhen
- Invalid when the descriptor cannot be resolved through edfi.descriptor_code for the tenant and effective date.
- edgeCases
- Descriptor labels may change over time; use the governed code plus descriptor provenance, not display-text parsing.
- upstreamSource
- CourseTranscript.MethodCreditEarnedDescriptor
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must resolve through edfi.descriptor_code by tenant_id, descriptor_type, namespace, code_value, and effective-date window.", "No local Results descriptor table or free-text fallback is allowed." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi descriptor resolution",
"changeType": "RESTRICT",
"basis": "Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.",
"upstream": "edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
}final_letter_grade
- anchor
- field-alpha-course-transcript-view-final-letter-grade
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Final letter grade submitted for the course.
- range
- Text within documented constraints.
- relationship
- Attribute on course transcript view; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for final_letter_grade.
- example
- A-
- invalidWhen
- Invalid when final_letter_grade violates its documented constraints: 0 to 20 characters.; Do not infer pass/fail from this text; use course_attempt_result when deciding attempt result..
- edgeCases
- final_letter_grade follows the course transcript view lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- CourseTranscript.FinalLetterGradeEarned
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 to 20 characters.", "Do not infer pass/fail from this text; use course_attempt_result when deciding attempt result." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}final_numeric_grade
- anchor
- field-alpha-course-transcript-view-final-numeric-grade
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Final numeric grade submitted for the course.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on course transcript view; it feeds documented calculations or reports but does not identify another object.
- example
- 91.50
- invalidWhen
- Invalid when final_numeric_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Numeric precision 9, scale 2.; Null when the transcript uses letter grade only..
- upstreamSource
- CourseTranscript.FinalNumericGradeEarned
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Numeric precision 9, scale 2.", "Null when the transcript uses letter grade only." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}course_repeat_code
- anchor
- field-alpha-course-transcript-view-course-repeat-code
- type
- TEXT descriptor code
- nullability
- Nullable.
- key
- Not a key
- meaning
- Governed descriptor for how a repeated course counts in GPA/credit calculations.
- range
- Text within documented constraints.
- relationship
- References one governed Ed-Fi descriptor value through edfi.descriptor_code.
- example
- Repeat counted
- invalidWhen
- Invalid when the descriptor cannot be resolved through edfi.descriptor_code for the tenant and effective date.
- edgeCases
- Descriptor labels may change over time; use the governed code plus descriptor provenance, not display-text parsing.
- upstreamSource
- CourseTranscript.CourseRepeatCodeDescriptor
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must resolve through edfi.descriptor_code by tenant_id, descriptor_type, namespace, code_value, and effective-date window.", "No local Results descriptor table or free-text fallback is allowed." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi descriptor resolution",
"changeType": "RESTRICT",
"basis": "Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.",
"upstream": "edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
}source_canonical_record_id
- anchor
- field-alpha-course-transcript-view-source-canonical-record-id
- type
- UUID
- nullability
- Required in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Ed-Fi canonical_record row id backing this course transcript view row.
- range
- PostgreSQL UUID.
- relationship
- References exactly one Ed-Fi canonical record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003002
- invalidWhen
- Invalid when source_canonical_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record.id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference edfi.canonical_record.", "Used for source evidence and raw/API convergence." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}canonical_state
- anchor
- field-alpha-course-transcript-view-canonical-state
- type
- TEXT enum
- nullability
- Required in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Canonical state of the source Ed-Fi record.
- range
- One documented enum value.
- relationship
- Governed value on course transcript view; no free-text relationship, and consumers must use the documented enum values.
- example
- canonical
- invalidWhen
- Invalid when canonical_state is not one of canonical, superseded, deleted, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before course transcript view is written; adding a new canonical_state value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- edfi.canonical_record.canonical_state
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Ordinary reads include canonical only.", "Deleted/superseded states require audit scope." ]
allowedValues
[
{
"value": "canonical",
"meaning": "The Ed-Fi base accepted the record and it is eligible for Results reads.",
"useWhen": "The Ed-Fi base accepted the record and it is eligible for Results reads.",
"invalidWhen": "Invalid when canonical does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "superseded",
"meaning": "A later canonical record replaced this row; ordinary current reads exclude it unless point-in-time or audit scope asks for it.",
"useWhen": "A later canonical record replaced this row; ordinary current reads exclude it unless point-in-time or audit scope asks for it.",
"invalidWhen": "Invalid when superseded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "deleted",
"meaning": "The canonical row is soft-deleted and ordinary reads exclude it.",
"useWhen": "The canonical row is soft-deleted and ordinary reads exclude it.",
"invalidWhen": "Invalid when deleted does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}deleted_at
- anchor
- field-alpha-course-transcript-view-deleted-at
- type
- TIMESTAMPTZ
- nullability
- Nullable in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Soft-delete timestamp. Null means active; non-null rows stay available for authorized audit reads and are excluded from ordinary current reports.
- range
- UTC timestamp.
- relationship
- Time value on course transcript view; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when deleted_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- edfi.canonical_record_overlay.deleted_at
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Never hard-delete audit-significant Results rows.", "Non-null values must be UTC.", "Legal erasure flows are separate privacy workflows." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}modified_at
- anchor
- field-alpha-course-transcript-view-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on course transcript view; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.course_grade_view · Course grade
- kind
- SQL view
- moduleHome
- Results
- changeType
- RENAME + RESTRICT
- upstream
- edfi.canonical_record where resource_name/record_kind = Grade, with GradebookEntry references when present
- purpose
- Plain Results view of Ed-Fi Grade records that are durable academic facts: letter/numeric grade, grade type, current-grade indicator, grading-period reference, and gradebook-entry evidence.
- lifecycle
- Exposed after the Ed-Fi base accepts the Grade as canonical. Draft UI-recovery grades and attendance/discipline records are outside Results.
- primaryKey
- (tenant_id, course_grade_id)
- storage
- SQL view over Ed-Fi canonical records; extracts LetterGradeEarned, NumericGradeEarned, GradeTypeDescriptor, CurrentGradeIndicator, CurrentGradeAsOfDate, grading-period references, and gradebook-entry references from payload_json; no Alpha storage.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-course-grade-view
- fieldCount
- 16
itds
[
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]relationships
[ "Belongs to one student-section association and grading period.", "May reference one gradebook entry as source evidence.", "Can feed transcript_result_view." ]
constraints
[ "record_kind must be Grade.", "GradeTypeDescriptor must resolve through edfi.descriptor_code.", "Student/section references resolve through platform3 sourcedIds.", "No Alpha table stores Grade payload fields." ]
invalidExamples
[ "Treating an unacknowledged draft grade as a Results row.", "Putting attendance or discipline grade-like facts in this Results view.", "Parsing DiagnosticStatement to decide final grade." ]
example
{
"course_grade_id": "edfi_grade_10017_alg1_gp4",
"grade_type": "Final",
"letter_grade": "A-",
"current_grade_indicator": false
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (16)
course_grade_id
- anchor
- field-alpha-course-grade-view-course-grade-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable Results id for one Ed-Fi Grade view row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one course grade view row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003301
- invalidWhen
- Invalid when course_grade_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record.id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Unique within tenant.", "Derived from the source canonical_record id and record kind." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}tenant_id
- anchor
- field-alpha-course-grade-view-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-course-grade-view-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}section_id
- anchor
- field-alpha-course-grade-view-section-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- Platform3 section/class sourcedId resolved from StudentSectionAssociationReference.
- range
- Text within documented constraints.
- relationship
- Many grades can belong to one section.
- example
- section_alg1_a
- invalidWhen
- Invalid when section_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Grade.StudentSectionAssociationReference
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference a same-tenant People & Orgs section.", "Do not duplicate section facts into Results." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi roster reference",
"changeType": "RENAME + RESTRICT",
"basis": "Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.",
"upstream": "edfi.canonical_record references plus OneRoster sourcedIds",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}grading_period_id
- anchor
- field-alpha-course-grade-view-grading-period-id
- type
- TEXT
- nullability
- Required.
- key
- Filter key
- meaning
- Canonical grading period for the grade.
- range
- Text within documented constraints.
- relationship
- Many grades can belong to one grading period.
- example
- gp_2025_26_q4
- invalidWhen
- Invalid when grading_period_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Grade.GradingPeriodReference
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference People & Orgs academic period.", "Must not be parsed from an Ed-Fi descriptor label." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi roster reference",
"changeType": "RENAME + RESTRICT",
"basis": "Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.",
"upstream": "edfi.canonical_record references plus OneRoster sourcedIds",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}grade_type
- anchor
- field-alpha-course-grade-view-grade-type
- type
- TEXT descriptor code
- nullability
- Required.
- key
- Filter key
- meaning
- Governed Ed-Fi GradeTypeDescriptor value, such as final or grading period.
- range
- Text within documented constraints.
- relationship
- References one governed Ed-Fi descriptor value through edfi.descriptor_code.
- example
- Final
- invalidWhen
- Invalid when the descriptor cannot be resolved through edfi.descriptor_code for the tenant and effective date.
- edgeCases
- Descriptor labels may change over time; use the governed code plus descriptor provenance, not display-text parsing.
- upstreamSource
- Grade.GradeTypeDescriptor
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must resolve through edfi.descriptor_code by tenant_id, descriptor_type, namespace, code_value, and effective-date window.", "No local Results descriptor table or free-text fallback is allowed." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi descriptor resolution",
"changeType": "RESTRICT",
"basis": "Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.",
"upstream": "edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
}letter_grade
- anchor
- field-alpha-course-grade-view-letter-grade
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Letter grade earned for the course or grading period.
- range
- Text within documented constraints.
- relationship
- Attribute on course grade view; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for letter_grade.
- example
- A-
- invalidWhen
- Invalid when letter_grade violates its documented constraints: 0 to 20 characters.; Use grade_type and current_grade_indicator to understand lifecycle..
- edgeCases
- letter_grade follows the course grade view lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Grade.LetterGradeEarned
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 to 20 characters.", "Use grade_type and current_grade_indicator to understand lifecycle." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}numeric_grade
- anchor
- field-alpha-course-grade-view-numeric-grade
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Numeric grade earned for the course or grading period.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on course grade view; it feeds documented calculations or reports but does not identify another object.
- example
- 91.50
- invalidWhen
- Invalid when numeric_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Numeric precision 9, scale 2.; Null when the source uses only a letter grade or performance conversion..
- upstreamSource
- Grade.NumericGradeEarned
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Numeric precision 9, scale 2.", "Null when the source uses only a letter grade or performance conversion." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}current_grade_indicator
- anchor
- field-alpha-course-grade-view-current-grade-indicator
- type
- BOOLEAN
- nullability
- Nullable.
- key
- Not a key
- meaning
- Whether this is an interim current grade rather than a final grade.
- range
- true or false.
- relationship
- Boolean row state on course grade view; scoped to this row and not a join target.
- example
- false
- invalidWhen
- Invalid when current_grade_indicator is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- current_grade_indicator follows the course grade view lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Grade.CurrentGradeIndicator
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "True means interim/current for the grading period.", "Final transcript answers prefer final grades/course transcripts when available." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}current_grade_as_of_date
- anchor
- field-alpha-course-grade-view-current-grade-as-of-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- As-of date for a current/interim grade.
- range
- ISO 8601 calendar date.
- relationship
- Time value on course grade view; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-05-30
- invalidWhen
- Invalid when current_grade_as_of_date is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- Grade.CurrentGradeAsOfDate
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "ISO 8601 date.", "Required by policy when current_grade_indicator is true and source supplies it." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}gradebook_entry_id
- anchor
- field-alpha-course-grade-view-gradebook-entry-id
- type
- TEXT
- nullability
- Nullable in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Ed-Fi gradebook entry identifier joined as evidence when the grade references one.
- range
- Text within documented constraints.
- relationship
- May reference one Ed-Fi GradebookEntry source row.
- example
- edfi_gbe_final_exam
- invalidWhen
- Invalid when gradebook_entry_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- GradebookEntryReference / GradebookEntryIdentifier
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must not be confused with alpha.gradebook_item unless mapped through platform3 sourcedIds.", "Used as source evidence, not a blank instrument home." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}diagnostic_statement
- anchor
- field-alpha-course-grade-view-diagnostic-statement
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Teacher/source diagnostic note attached to the grade.
- range
- Text within documented constraints.
- relationship
- Attribute on course grade view; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for diagnostic_statement.
- example
- Consistent evidence across final unit assessments.
- invalidWhen
- Invalid when diagnostic_statement is returned outside the authenticated tenant/scope or copied into a report surface that is not allowed to reveal education-record data.
- edgeCases
- Visibility depends on auth scopes and tenant claims; skill-pack examples must not copy this value into answer keys unless the platform returns it.
- upstreamSource
- Grade.DiagnosticStatement
- privacyTag
- PII: Education record
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 to 1024 characters.", "Display/audit text only; do not parse for grade or pass/fail logic." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}source_canonical_record_id
- anchor
- field-alpha-course-grade-view-source-canonical-record-id
- type
- UUID
- nullability
- Required in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Ed-Fi canonical_record row id backing this course grade view row.
- range
- PostgreSQL UUID.
- relationship
- References exactly one Ed-Fi canonical record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003003
- invalidWhen
- Invalid when source_canonical_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record.id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference edfi.canonical_record." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}canonical_state
- anchor
- field-alpha-course-grade-view-canonical-state
- type
- TEXT enum
- nullability
- Required in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Canonical state of the source Ed-Fi record.
- range
- One documented enum value.
- relationship
- Governed value on course grade view; no free-text relationship, and consumers must use the documented enum values.
- example
- canonical
- invalidWhen
- Invalid when canonical_state is not one of canonical, superseded, deleted, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before course grade view is written; adding a new canonical_state value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- edfi.canonical_record.canonical_state
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Ordinary reads include canonical only.", "Deleted/superseded states require audit scope." ]
allowedValues
[
{
"value": "canonical",
"meaning": "The Ed-Fi base accepted the record and it is eligible for Results reads.",
"useWhen": "The Ed-Fi base accepted the record and it is eligible for Results reads.",
"invalidWhen": "Invalid when canonical does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "superseded",
"meaning": "A later canonical record replaced this row; ordinary current reads exclude it unless point-in-time or audit scope asks for it.",
"useWhen": "A later canonical record replaced this row; ordinary current reads exclude it unless point-in-time or audit scope asks for it.",
"invalidWhen": "Invalid when superseded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "deleted",
"meaning": "The canonical row is soft-deleted and ordinary reads exclude it.",
"useWhen": "The canonical row is soft-deleted and ordinary reads exclude it.",
"invalidWhen": "Invalid when deleted does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}deleted_at
- anchor
- field-alpha-course-grade-view-deleted-at
- type
- TIMESTAMPTZ
- nullability
- Nullable in the backing view; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Not a key
- meaning
- Soft-delete timestamp. Null means active; non-null rows stay available for authorized audit reads and are excluded from ordinary current reports.
- range
- UTC timestamp.
- relationship
- Time value on course grade view; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when deleted_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- edfi.canonical_record_overlay.deleted_at
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Never hard-delete audit-significant Results rows.", "Non-null values must be UTC.", "Legal erasure flows are separate privacy workflows." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}modified_at
- anchor
- field-alpha-course-grade-view-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on course grade view; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.transcript_result_view · Transcript result
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- RENAME + RESTRICT
- upstream
- Union/read view over alpha.academic_record_view, alpha.course_transcript_view, and alpha.course_grade_view
- purpose
- Report-ready Results row for questions such as: what final grade and earned credits does this student have for this course in this term?
- lifecycle
- Read-only view generated after academic-record/course-transcript/course-grade views are available. It normalizes the answer but stores no copied Ed-Fi payload fields.
- primaryKey
- (tenant_id, student_id, course_id, canonical_term_id, transcript_answer_kind, source_record_id)
- storage
- Public read view only; it normalizes transcript answer rows without copying Ed-Fi payload fields into Alpha tables.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-transcript-result-view
- fieldCount
- 17
itds
[
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Belongs to one student.", "Usually references one course transcript and academic record.", "May fall back to a course grade when CourseTranscript is absent." ]
constraints
[ "Final transcript answers prefer CourseTranscript over Grade unless policy says otherwise.", "includeSourceEvidence controls whether source ids and descriptor provenance appear.", "No local descriptor tables, payload parsing, or Ed-Fi copied columns." ]
invalidExamples
[ "A parent portal computing earned credits from raw payload_json.", "A transcript answer that includes an attendance or discipline Ed-Fi record.", "A row with final grade but no source_record_id." ]
example
{
"student_id": "stu_timeback_10017",
"course_id": "course_algebra_1",
"canonical_term_id": "term_2025_26_spring",
"final_grade": "A-",
"earned_credits": 0.5
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (17)
tenant_id
- anchor
- field-alpha-transcript-result-view-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-transcript-result-view-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}course_id
- anchor
- field-alpha-transcript-result-view-course-id
- type
- TEXT
- nullability
- Required for course-scoped answers.
- key
- Primary key part
- meaning
- Platform3 course sourcedId for the transcript answer.
- range
- Text within documented constraints.
- relationship
- References one platform3 course when course-scoped.
- example
- course_algebra_1
- invalidWhen
- Invalid when course_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record references plus OneRoster sourcedIds
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must resolve through OneRoster/People & Orgs.", "Nullable only for academic-record-only summary rows." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi roster reference",
"changeType": "RENAME + RESTRICT",
"basis": "Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.",
"upstream": "edfi.canonical_record references plus OneRoster sourcedIds",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}canonical_term_id
- anchor
- field-alpha-transcript-result-view-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}transcript_answer_kind
- anchor
- field-alpha-transcript-result-view-transcript-answer-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Primary key part
- meaning
- Source shape used for this normalized transcript answer.
- range
- One documented enum value.
- relationship
- Primary identifier for one transcript result view row within a tenant; downstream Results rows reference this value by its named id field.
- example
- course_transcript
- invalidWhen
- Invalid when transcript_answer_kind is not one of academic_record, course_transcript, course_grade, transcript_rollup, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before transcript result view is written; adding a new transcript_answer_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must be one documented value.", "Determines which source id field is populated." ]
allowedValues
[
{
"value": "academic_record",
"meaning": "Summary row from StudentAcademicRecord.",
"useWhen": "Summary row from StudentAcademicRecord.",
"invalidWhen": "Invalid when academic_record does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "course_transcript",
"meaning": "Course-level final grade and credit row from CourseTranscript.",
"useWhen": "Course-level final grade and credit row from CourseTranscript.",
"invalidWhen": "Invalid when course_transcript does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "course_grade",
"meaning": "Grading-period or final grade row from Grade.",
"useWhen": "Grading-period or final grade row from Grade.",
"invalidWhen": "Invalid when course_grade does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "transcript_rollup",
"meaning": "Report-ready normalized answer row over academic record, course transcript, and grade views.",
"useWhen": "Report-ready normalized answer row over academic record, course transcript, and grade views.",
"invalidWhen": "Invalid when transcript_rollup does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}source_record_id
- anchor
- field-alpha-transcript-result-view-source-record-id
- type
- UUID
- nullability
- Required in the backing view and key; returned only with includeSourceEvidence=true and the exact results:audit scope.
- key
- Primary key part
- meaning
- Source Alpha transcript view row id used for this answer.
- range
- PostgreSQL UUID.
- relationship
- Polymorphic typed reference controlled by transcript_answer_kind.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003201
- invalidWhen
- Invalid when source_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must reference academic_record_id, course_transcript_id, or course_grade_id according to transcript_answer_kind." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}academic_record_id
- anchor
- field-alpha-transcript-result-view-academic-record-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Academic record linked to this transcript answer.
- range
- PostgreSQL UUID.
- relationship
- Many transcript answer rows can reference one academic record.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003101
- invalidWhen
- Invalid when academic_record_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must reference alpha.academic_record_view when present." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}course_transcript_id
- anchor
- field-alpha-transcript-result-view-course-transcript-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Course transcript row selected for the answer.
- range
- PostgreSQL UUID.
- relationship
- References one course transcript row.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003201
- invalidWhen
- Invalid when course_transcript_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must reference alpha.course_transcript_view when present.", "Preferred source for final grade and credits." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}course_grade_id
- anchor
- field-alpha-transcript-result-view-course-grade-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Course grade row used when transcript policy selects or falls back to Ed-Fi Grade.
- range
- PostgreSQL UUID.
- relationship
- References one course grade row.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a003301
- invalidWhen
- Invalid when course_grade_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must reference alpha.course_grade_view when present." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}final_grade
- anchor
- field-alpha-transcript-result-view-final-grade
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Final grade display value for the transcript answer.
- range
- Text within documented constraints.
- relationship
- Attribute on transcript result view; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for final_grade.
- example
- A-
- invalidWhen
- Invalid when final_grade violates its documented constraints: Usually final_letter_grade; may be numeric text when only numeric grade exists.; Do not parse this field for course attempt result..
- edgeCases
- final_grade follows the transcript result view lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Usually final_letter_grade; may be numeric text when only numeric grade exists.", "Do not parse this field for course attempt result." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}final_numeric_grade
- anchor
- field-alpha-transcript-result-view-final-numeric-grade
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Numeric final grade for the transcript answer when available.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on transcript result view; it feeds documented calculations or reports but does not identify another object.
- example
- 91.50
- invalidWhen
- Invalid when final_numeric_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Numeric precision 9, scale 2..
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Numeric precision 9, scale 2." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}earned_credits
- anchor
- field-alpha-transcript-result-view-earned-credits
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Credits earned for the course/term answer.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on transcript result view; it feeds documented calculations or reports but does not identify another object.
- example
- 0.50
- invalidWhen
- Invalid when earned_credits is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 or greater when present.; Read from CourseTranscript earned_credits or academic record summary by policy..
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "0 or greater when present.", "Read from CourseTranscript earned_credits or academic record summary by policy." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}attempted_credits
- anchor
- field-alpha-transcript-result-view-attempted-credits
- type
- NUMERIC(9,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Credits attempted for the course/term answer.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on transcript result view; it feeds documented calculations or reports but does not identify another object.
- example
- 0.50
- invalidWhen
- Invalid when attempted_credits is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 or greater when present..
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "0 or greater when present." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}course_attempt_result
- anchor
- field-alpha-transcript-result-view-course-attempt-result
- type
- TEXT descriptor code
- nullability
- Nullable.
- key
- Not a key
- meaning
- Governed Ed-Fi attempt-result descriptor selected for the transcript answer.
- range
- Text within documented constraints.
- relationship
- References one governed Ed-Fi descriptor value through edfi.descriptor_code.
- example
- Pass
- invalidWhen
- Invalid when the descriptor cannot be resolved through edfi.descriptor_code for the tenant and effective date.
- edgeCases
- Descriptor labels may change over time; use the governed code plus descriptor provenance, not display-text parsing.
- upstreamSource
- CourseTranscript.CourseAttemptResultDescriptor
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must resolve through edfi.descriptor_code by tenant_id, descriptor_type, namespace, code_value, and effective-date window.", "No local Results descriptor table or free-text fallback is allowed." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi descriptor resolution",
"changeType": "RESTRICT",
"basis": "Descriptor values are governed Ed-Fi code-list rows resolved through edfi.descriptor_code.",
"upstream": "edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
}answer_precedence
- anchor
- field-alpha-transcript-result-view-answer-precedence
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Surface-owned precedence used to choose among transcript sources.
- range
- Integer within documented constraints.
- relationship
- Numeric value on transcript result view; it feeds documented calculations or reports but does not identify another object.
- example
- 10
- invalidWhen
- Invalid when answer_precedence is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Lower numbers win.; Policy is documented by the Results surface; clients do not choose by inspecting raw Ed-Fi payloads..
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Lower numbers win.", "Policy is documented by the Results surface; clients do not choose by inspecting raw Ed-Fi payloads." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}source_evidence
- anchor
- field-alpha-transcript-result-view-source-evidence
- type
- JSONB
- nullability
- Returned only when includeSourceEvidence=true and the token has ordinary read authority plus the exact results:audit scope.
- key
- Not a key
- meaning
- Structured source evidence limited to string-or-null resource, canonical_record_id, and grade_canonical_record_id keys.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on transcript result view; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"resource":"CourseTranscript","canonical_record_id":"018f..."}
- invalidWhen
- Invalid when source_evidence is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- edfi.canonical_record payload_json plus edfi.descriptor_code
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must be a JSON object containing only resource, canonical_record_id, and grade_canonical_record_id string-or-null keys.", "Must not include raw payload_json blobs or secrets." ]
allowedValues
[]
provenance
{
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}modified_at
- anchor
- field-alpha-transcript-result-view-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on transcript result view; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- Public read-view field over approved base views and Results-owned projections; do not create an Alpha table column for this source value.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.report_card_entry · Report card entry
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- OneRoster result/lineItem rollup inputs.
- purpose
- Settled report-card statement for one student, subject, course, section, or reporting period.
- lifecycle
- Created when report-card rollups settle. Superseded entries remain available through point-in-time reads.
- primaryKey
- (tenant_id, report_card_entry_id)
- storage
- Extension table only; no OneRoster lineItem/result fields are copied.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-report-card-entry
- fieldCount
- 15
itds
[
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
}
]relationships
[ "Belongs to one student.", "May reference result records, working grade, MAP score, or gate pass evidence." ]
constraints
[ "begin_date NULL means excluded from point-in-time reads.", "Evidence links are structured JSON references, not copied source rows." ]
invalidExamples
[ "A current-only report-card cache with no effective dates.", "A report card entry derived by a client rather than surface policy." ]
example
{
"report_card_entry_id": "rpt_math_spring_10017",
"status": "final",
"grade_value": "A-"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (15)
report_card_entry_id
- anchor
- field-alpha-report-card-entry-report-card-entry-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this report-card statement.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one report card entry row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000501
- invalidWhen
- Invalid when report_card_entry_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}tenant_id
- anchor
- field-alpha-report-card-entry-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-report-card-entry-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-report-card-entry-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report card entry is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}course_id
- anchor
- field-alpha-report-card-entry-course-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Course this entry concerns when it is course-scoped.
- range
- Text within documented constraints.
- relationship
- Many report-card entries can reference one course.
- example
- course_algebra_1
- invalidWhen
- Invalid when course_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference People & Orgs/Curriculum course when present." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}section_id
- anchor
- field-alpha-report-card-entry-section-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Class or section this entry concerns when section-scoped.
- range
- Text within documented constraints.
- relationship
- Many report-card entries can reference one section.
- example
- class-algebra-1-a
- invalidWhen
- Invalid when section_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference People & Orgs class/section when present." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}reporting_period_id
- anchor
- field-alpha-report-card-entry-reporting-period-id
- type
- TEXT
- nullability
- Required.
- key
- Filter key
- meaning
- Typed reporting period for this statement.
- range
- Text within documented constraints.
- relationship
- References People & Orgs academic session.
- example
- rp_2025_26_spring
- invalidWhen
- Invalid when reporting_period_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference canonical academic session/period." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}grade_value
- anchor
- field-alpha-report-card-entry-grade-value
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Published grade or level shown on the report card.
- range
- Text within documented constraints.
- relationship
- Attribute on report card entry; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for grade_value.
- example
- A-
- invalidWhen
- Invalid when grade_value violates its documented constraints: 0 to 64 visible characters.; Must align with grade_scale_id when present..
- edgeCases
- grade_value follows the report card entry lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "0 to 64 visible characters.", "Must align with grade_scale_id when present." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}narrative
- anchor
- field-alpha-report-card-entry-narrative
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Optional teacher/system narrative shown on the report card.
- range
- Text within documented constraints.
- relationship
- Attribute on report card entry; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for narrative.
- example
- Strong growth in equations; continue fractions practice.
- invalidWhen
- Invalid when narrative is returned outside the authenticated tenant/scope or copied into a report surface that is not allowed to reveal education-record data.
- edgeCases
- Visibility depends on auth scopes and tenant claims; skill-pack examples must not copy this value into answer keys unless the platform returns it.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: Education record
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "0 to 4000 visible characters.", "Must not be the only source of typed status." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}status
- anchor
- field-alpha-report-card-entry-status
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Lifecycle state of this report-card entry.
- range
- One documented enum value.
- relationship
- Governed value on report card entry; no free-text relationship, and consumers must use the documented enum values.
- example
- final
- invalidWhen
- Invalid when status is not one of draft, final, superseded, voided, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report card entry is written; adding a new status value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "draft",
"meaning": "Visible only to authorized staff and not final for the reporting period.",
"useWhen": "Visible only to authorized staff and not final for the reporting period.",
"invalidWhen": "Invalid when draft does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "final",
"meaning": "Published durable report-card statement.",
"useWhen": "Published durable report-card statement.",
"invalidWhen": "Invalid when final does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "superseded",
"meaning": "Replaced by a later effective-dated report-card entry.",
"useWhen": "Replaced by a later effective-dated report-card entry.",
"invalidWhen": "Invalid when superseded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "voided",
"meaning": "Retained for audit but excluded from current report-card reads.",
"useWhen": "Retained for audit but excluded from current report-card reads.",
"invalidWhen": "Invalid when voided does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}evidence_links
- anchor
- field-alpha-report-card-entry-evidence-links
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured links to result, MAP, mastery, or gate evidence used for this statement.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on report card entry; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- [{"type":"result_record","id":"018f..."}]
- invalidWhen
- Invalid when evidence_links is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a JSON array of typed references.", "No raw source payloads." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}policy_version
- anchor
- field-alpha-report-card-entry-policy-version
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Policy/config version used to calculate this statement.
- range
- Text within documented constraints.
- relationship
- Attribute on report card entry; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for policy_version.
- example
- policy_2026_06_03
- invalidWhen
- Invalid when policy_version is missing, violates its documented constraints: Must reference alpha.policy_config rows used by the rollup..
- edgeCases
- policy_version follows the report card entry lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.policy_config rows used by the rollup." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}begin_date
- anchor
- field-alpha-report-card-entry-begin-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- First date this report-card statement is point-in-time valid.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2026-05-30
- invalidWhen
- Invalid when begin_date is null but is_time_locatable is true, or when consumers include the row in point-in-time results despite a missing start.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Null means excluded from point-in-time reads." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}end_date
- anchor
- field-alpha-report-card-entry-end-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- Last date this statement is valid; null means still active after begin_date.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2026-06-30
- invalidWhen
- Invalid when end_date is before begin_date, or when a non-null end_date is ignored for point-in-time reads.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be null or >= begin_date." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}is_time_locatable
- anchor
- field-alpha-report-card-entry-is-time-locatable
- type
- BOOLEAN
- nullability
- Required on effective-dated rows.
- key
- Filter key
- meaning
- Surface-computed boolean telling consumers whether begin_date is known enough for point-in-time reads.
- range
- true or false.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- true
- invalidWhen
- Invalid when true with begin_date NULL, or false while a row is included in point-in-time computation.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha point-in-time rule
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Cross-cutting rule 2 requires typed time-locatability.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "begin_date NULL means false and the row is excluded from point-in-time computation.", "end_date NULL means active after begin_date.", "Both null means false." ]
allowedValues
[]
provenance
{
"label": "Point-in-time rule",
"changeType": "RESTRICT",
"basis": "Cross-cutting rule 2 requires typed time-locatability.",
"upstream": "Alpha point-in-time rule",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
}
]
}alpha.gate_pass · Gate pass
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- OneRoster result plus Content mastery-gate metadata.
- purpose
- Durable pass, fail, cooldown, or retry permission for an advancement or mastery gate.
- lifecycle
- Created after a gate result settles. Updated by new attempts or cooldown policy; historical rows remain point-in-time evidence.
- primaryKey
- (tenant_id, gate_pass_id)
- storage
- Extension table only; threshold/cooldown values come from alpha.policy.*.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-gate-pass
- fieldCount
- 14
itds
[
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]relationships
[ "Belongs to one student.", "References one gate content/test and one result record when available." ]
constraints
[ "Gate thresholds and cooldowns read alpha.policy.* config.", "is_mastery_gate is read from Content, not inferred from URL or name." ]
invalidExamples
[ "Gate status stored on a student profile.", "Cooldown computed in a dashboard." ]
example
{
"gate_pass_id": "gate_alg_1_10017",
"gate_status": "passed",
"attempt_count": 2
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (14)
gate_pass_id
- anchor
- field-alpha-gate-pass-gate-pass-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this gate state row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one gate pass row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000601
- invalidWhen
- Invalid when gate_pass_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}tenant_id
- anchor
- field-alpha-gate-pass-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-gate-pass-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-gate-pass-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before gate pass is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}gate_content_id
- anchor
- field-alpha-gate-pass-gate-content-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Content test or gate this pass concerns.
- range
- Text within documented constraints.
- relationship
- Many gate passes can reference one gate content item.
- example
- content_alg_1_mastery_gate
- invalidWhen
- Invalid when gate_content_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference Content.", "Content owns blank gate/test metadata." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}result_record_id
- anchor
- field-alpha-gate-pass-result-record-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Most recent result record deciding this gate state.
- range
- PostgreSQL UUID.
- relationship
- Many gate state rows can reference one result over time.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000101
- invalidWhen
- Invalid when result_record_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.result_record when present." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}gate_status
- anchor
- field-alpha-gate-pass-gate-status
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Current durable gate state for this effective window.
- range
- One documented enum value.
- relationship
- Governed value on gate pass; no free-text relationship, and consumers must use the documented enum values.
- example
- passed
- invalidWhen
- Invalid when gate_status is not one of passed, failed, cooldown, retry_allowed, blocked, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before gate pass is written; adding a new gate_status value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "passed",
"meaning": "The student currently has permission or credit for the gate.",
"useWhen": "The student currently has permission or credit for the gate.",
"invalidWhen": "Invalid when passed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "failed",
"meaning": "The latest settled gate outcome did not pass.",
"useWhen": "The latest settled gate outcome did not pass.",
"invalidWhen": "Invalid when failed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "cooldown",
"meaning": "The student failed and must wait until next_eligible_at before retaking.",
"useWhen": "The student failed and must wait until next_eligible_at before retaking.",
"invalidWhen": "Invalid when cooldown does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "retry_allowed",
"meaning": "The student may retake the gate now.",
"useWhen": "The student may retake the gate now.",
"invalidWhen": "Invalid when retry_allowed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "blocked",
"meaning": "The gate cannot be decided because required policy or evidence is missing.",
"useWhen": "The gate cannot be decided because required policy or evidence is missing.",
"invalidWhen": "Invalid when blocked does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}passed_at
- anchor
- field-alpha-gate-pass-passed-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- UTC timestamp when the student passed the gate.
- range
- UTC timestamp.
- relationship
- Time value on gate pass; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-21T14:30:00Z
- invalidWhen
- Invalid when passed_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Required when gate_status is passed.", "Null otherwise." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}next_eligible_at
- anchor
- field-alpha-gate-pass-next-eligible-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- UTC time a student may retake after cooldown.
- range
- UTC timestamp.
- relationship
- Time value on gate pass; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-24T14:30:00Z
- invalidWhen
- Invalid when next_eligible_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Required when gate_status is cooldown.", "Computed from alpha.policy.gate_retake_cooldown." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}attempt_count
- anchor
- field-alpha-gate-pass-attempt-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Number of settled attempts considered for this gate state.
- range
- Integer within documented constraints.
- relationship
- Numeric value on gate pass; it feeds documented calculations or reports but does not identify another object.
- example
- 2
- invalidWhen
- Invalid when attempt_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0.; Stuck-attempt policy reads this value..
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be >= 0.", "Stuck-attempt policy reads this value." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}policy_version
- anchor
- field-alpha-gate-pass-policy-version
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Policy/config version for cutoff and cooldown rules.
- range
- Text within documented constraints.
- relationship
- Attribute on gate pass; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for policy_version.
- example
- policy_2026_06_03
- invalidWhen
- Invalid when policy_version is missing, violates its documented constraints: Must reference alpha.policy_config..
- edgeCases
- policy_version follows the gate pass lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.policy_config." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}begin_date
- anchor
- field-alpha-gate-pass-begin-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- First date this gate state is point-in-time valid.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2026-03-21
- invalidWhen
- Invalid when begin_date is null but is_time_locatable is true, or when consumers include the row in point-in-time results despite a missing start.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Null means excluded from point-in-time reads." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}end_date
- anchor
- field-alpha-gate-pass-end-date
- type
- DATE
- nullability
- Nullable.
- key
- Not a key
- meaning
- Last date this gate state is valid; null means still active after begin_date.
- range
- ISO 8601 calendar date.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- 2026-04-01
- invalidWhen
- Invalid when end_date is before begin_date, or when a non-null end_date is ignored for point-in-time reads.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be null or >= begin_date." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}is_time_locatable
- anchor
- field-alpha-gate-pass-is-time-locatable
- type
- BOOLEAN
- nullability
- Required on effective-dated rows.
- key
- Filter key
- meaning
- Surface-computed boolean telling consumers whether begin_date is known enough for point-in-time reads.
- range
- true or false.
- relationship
- Part of the effective-dated point-in-time contract for this row, not a foreign key.
- example
- true
- invalidWhen
- Invalid when true with begin_date NULL, or false while a row is included in point-in-time computation.
- edgeCases
- Null-date behavior follows the cross-cutting point-in-time rule: missing begin_date excludes the row; null end_date means active after begin_date.
- upstreamSource
- Alpha point-in-time rule
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Cross-cutting rule 2 requires typed time-locatability.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "begin_date NULL means false and the row is excluded from point-in-time computation.", "end_date NULL means active after begin_date.", "Both null means false." ]
allowedValues
[]
provenance
{
"label": "Point-in-time rule",
"changeType": "RESTRICT",
"basis": "Cross-cutting rule 2 requires typed time-locatability.",
"upstream": "Alpha point-in-time rule",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
}
]
}alpha.mastery_ledger · Mastery ledger
- kind
- Immutable extension ledger
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Settled mastery-gate result records plus Content/Curriculum gate references.
- purpose
- Immutable history of actual mastery-test results used to derive highest mastered grade and working grade at any as-of date.
- lifecycle
- Appended when a mastery-gate result settles. Corrections append superseding ledger rows; historical rows remain queryable by asOfDate. Summary tables and course placements never overwrite this ledger.
- primaryKey
- (tenant_id, mastery_ledger_id)
- storage
- Immutable extension ledger; stores mastery-gate result references, grade-level evidence, score percent, and policy references used for historical HMG reads. It does not copy Curriculum track trees or student profile fields.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-mastery-ledger
- fieldCount
- 20
itds
[
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]relationships
[ "Belongs to one student.", "References one settled result_record.", "References one gate Content item and one Curriculum track level/grade.", "References the policy config used for the mastery cutoff." ]
constraints
[ "Actual mastery-test results are authoritative for HMG and working grade.", "The mastery cutoff is read from alpha.policy.mastery_cutoff for the row's effective date; consumers never hardcode 89.5.", "A passing ledger row satisfies every required policy criterion: scalar cutoff, DOK facet bars when item DOK evidence is present, and KC graph consistency when scoped KC refs are present.", "Failed mastery-test retakes expose retry_eligible_at on the next UTC calendar day unless shell mastery is detected.", "Shell-mastery detection is stored on this ledger row; no separate node-consistency object exists.", "Rows are point-in-time queryable by effective_date and are not current-only shortcuts." ]
invalidExamples
[ "A highest mastered grade derived from a summary table when qualifying mastery-test rows exist.", "A client hardcodes 89.5 instead of reading alpha.policy.mastery_cutoff.", "A current-only mastery summary with no historical effective date.", "A mastery ledger row stored on the student record." ]
example
{
"mastery_ledger_id": "mled_10017_math_g7_exit",
"student_id": "stu_timeback_10017",
"grade_level": 7,
"score_percent": 92.5,
"passed_mastery_gate": true,
"retry_eligible_at": null,
"shell_mastery_detected": false
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (20)
mastery_ledger_id
- anchor
- field-alpha-mastery-ledger-mastery-ledger-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this immutable mastery-test ledger row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one mastery ledger row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a005001
- invalidWhen
- Invalid when mastery_ledger_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Unique within tenant.", "Generated by the surface or deterministic migration mapping." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}tenant_id
- anchor
- field-alpha-mastery-ledger-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-mastery-ledger-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-mastery-ledger-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before mastery ledger is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}result_record_id
- anchor
- field-alpha-mastery-ledger-result-record-id
- type
- UUID
- nullability
- Required.
- key
- Join key
- meaning
- Settled result record for the mastery-gate attempt.
- range
- PostgreSQL UUID.
- relationship
- Many mastery ledger rows can reference distinct mastery-gate result records.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000101
- invalidWhen
- Invalid when result_record_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.result_record.", "The referenced result must be a mastery_gate or equivalent gate result." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}gate_content_id
- anchor
- field-alpha-mastery-ledger-gate-content-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Content test or test_bank gate this attempt answered.
- range
- Text within documented constraints.
- relationship
- Many mastery ledger rows can reference one gate Content/test bank.
- example
- content_math_g7_exit_bank
- invalidWhen
- Invalid when gate_content_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference Content.", "Do not infer a gate from a display title." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}track_id
- anchor
- field-alpha-mastery-ledger-track-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- Curriculum track whose level/grade the gate certifies.
- range
- Text within documented constraints.
- relationship
- Many mastery ledger rows can reference one Curriculum track.
- example
- track_common_core_math_k12
- invalidWhen
- Invalid when track_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference Curriculum track.", "Track definitions stay in Curriculum." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}track_level_id
- anchor
- field-alpha-mastery-ledger-track-level-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- Curriculum track level or grade certified by the gate.
- range
- Text within documented constraints.
- relationship
- Many mastery ledger rows can reference one Curriculum track level.
- example
- track_level_math_7
- invalidWhen
- Invalid when track_level_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference a level that belongs to track_id.", "Used to compare mastered grades within a subject." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}grade_level
- anchor
- field-alpha-mastery-ledger-grade-level
- type
- NUMERIC(5,2)
- nullability
- Required.
- key
- Sort value
- meaning
- Numeric grade level certified by this gate attempt.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on mastery ledger; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when grade_level is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be comparable within subject and track.; Comes from Curriculum track-level registry, not a parsed gate name..
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be comparable within subject and track.", "Comes from Curriculum track-level registry, not a parsed gate name." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}score_percent
- anchor
- field-alpha-mastery-ledger-score-percent
- type
- NUMERIC(5,2)
- nullability
- Required.
- key
- Not a key
- meaning
- Percent score earned on the mastery-gate attempt.
- range
- 0.00 through 100.00
- relationship
- Numeric value on mastery ledger; it feeds documented calculations or reports but does not identify another object.
- example
- 92.50
- invalidWhen
- Invalid when score_percent is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 100 inclusive.; Compared with alpha.policy.mastery_cutoff by the surface..
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "0 through 100 inclusive.", "Compared with alpha.policy.mastery_cutoff by the surface." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}mastery_cutoff_policy_ref
- anchor
- field-alpha-mastery-ledger-mastery-cutoff-policy-ref
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Policy config row that supplies the cutoff for this gate decision.
- range
- Text within documented constraints.
- relationship
- References alpha.policy_config.
- example
- alpha.policy.mastery_cutoff:2026-07-08.ap-pedagogy
- invalidWhen
- Invalid when mastery_cutoff_policy_ref is missing, violates its documented constraints: Must reference alpha.policy_config where policy_name=alpha.policy.mastery_cutoff.; Do not store or read a client-local cutoff..
- edgeCases
- mastery_cutoff_policy_ref follows the mastery ledger lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.policy_config where policy_name=alpha.policy.mastery_cutoff.", "Do not store or read a client-local cutoff." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}passed_mastery_gate
- anchor
- field-alpha-mastery-ledger-passed-mastery-gate
- type
- BOOLEAN
- nullability
- Required.
- key
- Filter key
- meaning
- Whether this gate attempt satisfied every required alpha.policy.mastery_cutoff criterion.
- range
- true or false.
- relationship
- Boolean row state on mastery ledger; scoped to this row and not a join target.
- example
- true
- invalidWhen
- Invalid when passed_mastery_gate is null, is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- passed_mastery_gate follows the mastery ledger lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "True only when the scalar cutoff passes and all applied DOK facet and KC graph criteria pass.", "DOK1-2 core and DOK3 transfer facets are conjunctive when DOK evidence is present; they are never averaged into one total score.", "False rows remain history but do not raise HMG." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}attempted_at
- anchor
- field-alpha-mastery-ledger-attempted-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort key
- meaning
- UTC timestamp when the mastery-test attempt was completed.
- range
- UTC timestamp.
- relationship
- Time value on mastery ledger; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-21T14:30:00Z
- invalidWhen
- Invalid when attempted_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be UTC.", "Used for ordering attempts on the same gate." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}effective_date
- anchor
- field-alpha-mastery-ledger-effective-date
- type
- DATE
- nullability
- Required.
- key
- As-of filter key
- meaning
- First date this ledger row can affect HMG and working-grade as-of reads.
- range
- ISO 8601 calendar date.
- relationship
- Time value on mastery ledger; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-03-21
- invalidWhen
- Invalid when effective_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "ISO 8601 date.", "Must not be null because HMG is point-in-time." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}retry_eligible_at
- anchor
- field-alpha-mastery-ledger-retry-eligible-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Earliest UTC instant when a failed mastery-test attempt may be retried.
- range
- UTC timestamp.
- relationship
- Time value on mastery ledger; used for retry eligibility and point-in-time gate-pass reads.
- example
- 2026-03-24T00:00:00Z
- invalidWhen
- Invalid when a failed non-shell mastery gate is eligible on the same calendar day, or when a passed/shell-blocked gate carries a retry timestamp.
- edgeCases
- The retry policy is same_or_equivalent_form, but failed mastery-test retakes must occur on a different calendar day to avoid working-memory retests.
- upstreamSource
- alpha.policy.mastery_cutoff plus settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Mastery-test failure rows must expose next-day retry timing from alpha.policy.mastery_cutoff.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "For ordinary failed mastery gates, must be the start of the next UTC calendar day after effective_date.", "Must be null for passed gates.", "Must be null when shell_mastery_detected is true because the gate is blocked pending remediation/diagnosis rather than same-or-equivalent-form cooldown." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Mastery-test failure rows must expose next-day retry timing from alpha.policy.mastery_cutoff.",
"upstream": "alpha.policy.mastery_cutoff plus settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}criteria_result
- anchor
- field-alpha-mastery-ledger-criteria-result
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured evaluation trace for the alpha.policy.mastery_cutoff gate decision.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on mastery ledger; references policy criteria and KC ids but does not replace typed ledger fields.
- example
- {"schema_name":"results.mastery_cutoff.v2","composition":"conjunctive","failed_criteria":["dok_facet_split"]}
- invalidWhen
- Invalid when criteria_result is malformed JSON, omits applied criteria, averages DOK facets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Historical backfills may mark DOK and KC checks as not applied when no item-level evidence or explicit scoped KC refs existed.
- upstreamSource
- alpha.policy.mastery_cutoff plus alpha.test_result_component and alpha.student_kc_state
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Mastery-gate decisions require an auditable conjunctive criteria trace for scalar cutoff, DOK facets, retry timing, and KC graph consistency.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must include the scalar score_percent_cutoff decision.", "Must include dok_facet_split with DOK1-2 core >=90% and DOK3 transfer >=70% when DOK evidence exists; facets are conjunctive and never averaged.", "Must include kc_graph_consistency when explicit scoped KC refs exist, comparing alpha.student_kc_state.current_retention and durable_mastery against policy thresholds.", "Must not hide required typed fields such as passed_mastery_gate, retry_eligible_at, or shell_mastery_detected." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Mastery-gate decisions require an auditable conjunctive criteria trace for scalar cutoff, DOK facets, retry timing, and KC graph consistency.",
"upstream": "alpha.policy.mastery_cutoff plus alpha.test_result_component and alpha.student_kc_state",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}shell_mastery_detected
- anchor
- field-alpha-mastery-ledger-shell-mastery-detected
- type
- BOOLEAN
- nullability
- Required.
- key
- Filter key
- meaning
- Whether the attempt looked like a mastery pass by score/facet evidence but failed scoped KC graph consistency.
- range
- true or false.
- relationship
- Boolean row state on mastery ledger; scoped to this row and not a join target.
- example
- false
- invalidWhen
- Invalid when shell_mastery_detected is null, contradicts criteria_result.kc_graph_consistency, or is stored in a separate node-consistency object instead of this ledger row.
- edgeCases
- KC graph consistency is not applied when no explicit scoped KC refs exist; those rows are not shell mastery.
- upstreamSource
- alpha.policy.mastery_cutoff plus alpha.student_kc_state
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- False-mastery gating records cross-node consistency failures on the mastery ledger without creating separate node-consistency objects.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "True only when applied KC graph consistency fails for a mastery claim.", "Rows with shell_mastery_detected=true must not raise HMG or working grade.", "Rows with shell_mastery_detected=true block same-or-equivalent-form cooldown by leaving retry_eligible_at null." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "False-mastery gating records cross-node consistency failures on the mastery ledger without creating separate node-consistency objects.",
"upstream": "alpha.policy.mastery_cutoff plus alpha.student_kc_state",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}superseded_by_mastery_ledger_id
- anchor
- field-alpha-mastery-ledger-superseded-by-mastery-ledger-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Later correction row that supersedes this ledger row.
- range
- PostgreSQL UUID.
- relationship
- Self-reference: one correction row may supersede one prior ledger row.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a005002
- invalidWhen
- Invalid when superseded_by_mastery_ledger_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.mastery_ledger in the same tenant when present.", "Ordinary as-of reads exclude rows superseded on or before the requested date." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}source_evidence_refs
- anchor
- field-alpha-mastery-ledger-source-evidence-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to result, gate, test_bank/form, scorer, and migration evidence.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on mastery ledger; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- [{"type":"result_record","id":"018f..."},{"type":"policy_config","id":"alpha.policy.mastery_cutoff:2026-07-08.ap-pedagogy"}]
- invalidWhen
- Invalid when source_evidence_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha extension over settled gate result records
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Actual mastery-test results form immutable Results history used by HMG and working grade.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a JSON array of typed references.", "Must not include raw answer payloads or copied Curriculum definitions." ]
allowedValues
[]
provenance
{
"label": "Mastery ledger",
"changeType": "EXTEND",
"basis": "Actual mastery-test results form immutable Results history used by HMG and working grade.",
"upstream": "Alpha extension over settled gate result records",
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}modified_at
- anchor
- field-alpha-mastery-ledger-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on mastery ledger; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.highest_mastered_grade · Highest mastered grade
- kind
- Derived extension read model
- moduleHome
- Results
- changeType
- DERIVED READ
- upstream
- alpha.mastery_ledger plus explicitly labeled fallback source references.
- purpose
- Point-in-time answer for the highest grade a student has mastered in one subject as of any date.
- lifecycle
- Computed from alpha.mastery_ledger for the requested asOfDate. If no actual mastery-test result exists, the surface may use a summary-table or course-placement fallback and must label that fallback. When tests and summaries disagree, tests win.
- primaryKey
- (tenant_id, student_id, subject_id, as_of_date, policy_version)
- storage
- Derived Results read/materialized view over alpha.mastery_ledger plus explicitly labeled fallback source references. The view stores or returns the answer and evidence refs; consumers never recompute HMG from summaries or placements.
- writePath
- Follow the object storage rule and ITD trace before writing.
- anchor
- table-alpha-highest-mastered-grade
- fieldCount
- 12
itds
[
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]relationships
[ "Belongs to one student.", "Reads mastery_ledger rows for actual test evidence.", "May reference fallback summary/course-placement evidence only when no qualifying test result exists." ]
constraints
[ "Default and historical reads require an explicit or defaulted as_of_date.", "HMG is the max grade_level among passed mastery_ledger rows with effective_date <= as_of_date under the active mastery_cutoff policy.", "Summary tables and course placements are fallbacks only when no actual mastery-test result exists as of the date.", "Consumers must not compute HMG from course placement, student profile fields, or summary tables when ledger rows exist." ]
invalidExamples
[ "A current-only HMG endpoint with no asOfDate.", "A summary table overriding raw mastery-test results.", "A hardcoded score >= 89.5 predicate in consumer SQL.", "A course placement treated as actual mastered-grade evidence when a gate result exists." ]
example
{
"student_id": "stu_timeback_10017",
"subject_id": "math",
"as_of_date": "2026-06-05",
"highest_mastered_grade": 7
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (12)
tenant_id
- anchor
- field-alpha-highest-mastered-grade-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-highest-mastered-grade-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-highest-mastered-grade-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before highest mastered grade is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}as_of_date
- anchor
- field-alpha-highest-mastered-grade-as-of-date
- type
- DATE
- nullability
- Required.
- key
- Primary key part
- meaning
- Point-in-time date for the HMG answer.
- range
- ISO 8601 calendar date.
- relationship
- Primary identifier for one highest mastered grade row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 2026-06-05
- invalidWhen
- Invalid when as_of_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "ISO 8601 date.", "Current reads are still represented as as-of reads." ]
allowedValues
[]
provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}highest_mastered_grade
- anchor
- field-alpha-highest-mastered-grade-highest-mastered-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Answer value
- meaning
- Highest grade level mastered as of the date.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on highest mastered grade; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when highest_mastered_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Null only when null_reason is present.; Derived from actual mastery-test results before any fallback is considered..
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Null only when null_reason is present.", "Derived from actual mastery-test results before any fallback is considered." ]
allowedValues
[]
provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}evidence_source
- anchor
- field-alpha-highest-mastered-grade-evidence-source
- type
- TEXT enum
- nullability
- Required.
- key
- Filter/audit key
- meaning
- Which evidence family produced the HMG answer.
- range
- One documented enum value.
- relationship
- Governed value on highest mastered grade; no free-text relationship, and consumers must use the documented enum values.
- example
- mastery_test_results
- invalidWhen
- Invalid when evidence_source is not one of mastery_test_results, summary_table_fallback, course_placement_fallback, none, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before highest mastered grade is written; adding a new evidence_source value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value.", "mastery_test_results wins over summary_table_fallback and course_placement_fallback." ]
allowedValues
[
{
"value": "mastery_test_results",
"meaning": "Actual mastery-gate test results exist as of the requested date and are the authoritative source.",
"useWhen": "Actual mastery-gate test results exist as of the requested date and are the authoritative source.",
"invalidWhen": "Invalid when mastery_test_results does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "summary_table_fallback",
"meaning": "No actual mastery-test result exists as of the requested date, so the surface used a legacy summary table only as fallback evidence.",
"useWhen": "No actual mastery-test result exists as of the requested date, so the surface used a legacy summary table only as fallback evidence.",
"invalidWhen": "Invalid when summary_table_fallback does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "course_placement_fallback",
"meaning": "No actual mastery-test result or usable summary row exists as of the requested date, so the surface used course placement only as fallback evidence.",
"useWhen": "No actual mastery-test result or usable summary row exists as of the requested date, so the surface used course placement only as fallback evidence.",
"invalidWhen": "Invalid when course_placement_fallback does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "none",
"meaning": "No usable actual or fallback evidence exists as of the requested date.",
"useWhen": "No usable actual or fallback evidence exists as of the requested date.",
"invalidWhen": "Invalid when none does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}mastery_cutoff_policy_ref
- anchor
- field-alpha-highest-mastered-grade-mastery-cutoff-policy-ref
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Policy config used to decide which mastery-test rows count as passing.
- range
- Text within documented constraints.
- relationship
- References alpha.policy_config.
- example
- alpha.policy.mastery_cutoff:2026-07-08.ap-pedagogy
- invalidWhen
- Invalid when mastery_cutoff_policy_ref is missing, violates its documented constraints: Must reference alpha.policy_config where policy_name=alpha.policy.mastery_cutoff.; The common 89.5 value is read from policy; it is not embedded in consumer SQL..
- edgeCases
- mastery_cutoff_policy_ref follows the highest mastered grade lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference alpha.policy_config where policy_name=alpha.policy.mastery_cutoff.", "The common 89.5 value is read from policy; it is not embedded in consumer SQL." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}source_mastery_ledger_ids
- anchor
- field-alpha-highest-mastered-grade-source-mastery-ledger-ids
- type
- JSONB array
- nullability
- Required.
- key
- Not a key
- meaning
- Ledger row ids that support the returned grade.
- range
- JSON value matching documented schema.
- relationship
- References zero or more alpha.mastery_ledger rows.
- example
- ["018f4b4e-9c7a-7d3d-8b2f-2f673a005001"]
- invalidWhen
- Invalid when source_mastery_ledger_ids is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Empty only when evidence_source is summary_table_fallback, course_placement_fallback, or none.", "Must be a JSON array of ids, not raw payloads." ]
allowedValues
[]
provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}fallback_source_refs
- anchor
- field-alpha-highest-mastered-grade-fallback-source-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to summary-table or course-placement fallback evidence.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on highest mastered grade; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- []
- invalidWhen
- Invalid when fallback_source_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Empty array when evidence_source is mastery_test_results.", "Fallback refs are audit evidence only and never override mastery_ledger rows." ]
allowedValues
[]
provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}policy_version
- anchor
- field-alpha-highest-mastered-grade-policy-version
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Policy/config version for the HMG resolver.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one highest mastered grade row within a tenant; downstream Results rows reference this value by its named id field.
- example
- hmg_resolver_v2026_06
- invalidWhen
- Invalid when policy_version is missing, violates its documented constraints: Must reference alpha.policy_config.; Changing policy produces a new answer version..
- edgeCases
- policy_version follows the highest mastered grade lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference alpha.policy_config.", "Changing policy produces a new answer version." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}null_reason
- anchor
- field-alpha-highest-mastered-grade-null-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Why highest_mastered_grade is null.
- range
- One documented enum value.
- relationship
- Governed value on highest mastered grade; no free-text relationship, and consumers must use the documented enum values.
- example
- not_enough_history
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before highest mastered grade is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required when highest_mastered_grade is null." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}computed_at
- anchor
- field-alpha-highest-mastered-grade-computed-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- UTC timestamp when the surface produced this HMG answer.
- range
- UTC timestamp.
- relationship
- Time value on highest mastered grade; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-05T14:31:00Z
- invalidWhen
- Invalid when computed_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be UTC.", "Used for freshness and report-answer audit." ]
allowedValues
[]
provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.working_grade · Working grade
- kind
- Derived extension read model
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Actual mastery-test results plus MAP effective grade and fallback source references.
- purpose
- Surface-owned grade-equivalent level for one student and subject as of a date.
- lifecycle
- Recomputed when mastery-test ledger rows, MAP effective grade, mastery state, report-card evidence, fallback evidence, or policy inputs change. Actual mastery-test results are authoritative; summary tables and course placements are fallback evidence only.
- primaryKey
- (tenant_id, student_id, subject_id, as_of_date, formula_version)
- storage
- Extension table or materialized derived extension; no base score fields copied.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-working-grade
- fieldCount
- 13
itds
[
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]relationships
[ "Belongs to one student.", "References MAP effective-grade and mastery evidence where available." ]
constraints
[ "Formula version is recorded with every row.", "Missing inputs return null_reason instead of client fallback math.", "When actual mastery-test results and summary/course placement disagree, mastery-test results win.", "When enrollment grade and HMG+1 disagree, the working-grade resolver uses HMG+1 under policy." ]
invalidExamples
[ "A dashboard-computed working grade with no formula_version.", "A working grade parsed from MAP TestName.", "A working grade using course placement while qualifying mastery_ledger rows exist." ]
example
{
"student_id": "stu_timeback_10017",
"subject_id": "math",
"as_of_date": "2026-06-03",
"working_grade": 7.4
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (13)
tenant_id
- anchor
- field-alpha-working-grade-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-working-grade-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-working-grade-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before working grade is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}as_of_date
- anchor
- field-alpha-working-grade-as-of-date
- type
- DATE
- nullability
- Required.
- key
- Primary key part
- meaning
- Point-in-time date for the working-grade answer.
- range
- ISO 8601 calendar date.
- relationship
- Primary identifier for one working grade row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 2026-06-03
- invalidWhen
- Invalid when as_of_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "ISO 8601 date.", "Current reads are still asOfDate reads." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}working_grade
- anchor
- field-alpha-working-grade-working-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Surface-owned grade-equivalent level as of the date.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on working grade; it feeds documented calculations or reports but does not identify another object.
- example
- 7.40
- invalidWhen
- Invalid when working_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be null only when null_reason is present.; Do not recompute in clients.; Must honor the actual-test-before-fallback evidence priority..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "May be null only when null_reason is present.", "Do not recompute in clients.", "Must honor the actual-test-before-fallback evidence priority." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}highest_mastered_grade
- anchor
- field-alpha-working-grade-highest-mastered-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Highest mastered grade input used by the working-grade resolver.
- range
- Decimal number within documented constraints.
- relationship
- References the point-in-time alpha.highest_mastered_grade answer by student, subject, as_of_date, and policy.
- example
- 7.00
- invalidWhen
- Invalid when highest_mastered_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Read from alpha.highest_mastered_grade for the same student, subject, and as_of_date.; May be null only when HMG has no evidence..
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Read from alpha.highest_mastered_grade for the same student, subject, and as_of_date.", "May be null only when HMG has no evidence." ]
allowedValues
[]
provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}input_kind
- anchor
- field-alpha-working-grade-input-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Primary evidence family used to produce the value.
- range
- One documented enum value.
- relationship
- Governed value on working grade; no free-text relationship, and consumers must use the documented enum values.
- example
- mixed
- invalidWhen
- Invalid when input_kind is not one of mastery_test_results, map_effective_grade, student_kc_state, report_card, teacher_override, summary_table_fallback, course_placement_fallback, mixed, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before working grade is written; adding a new input_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be one documented value.", "mastery_test_results wins over summary_table_fallback and course_placement_fallback when present." ]
allowedValues
[
{
"value": "mastery_test_results",
"meaning": "Actual mastery-test results drove the grade/level answer; this source wins over summaries and placements.",
"useWhen": "Actual mastery-test results drove the grade/level answer; this source wins over summaries and placements.",
"invalidWhen": "Invalid when mastery_test_results does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "map_effective_grade",
"meaning": "MAP effective-grade output drove the value where policy allows MAP-based placement.",
"useWhen": "MAP effective-grade output drove the value where policy allows MAP-based placement.",
"invalidWhen": "Invalid when map_effective_grade does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "student_kc_state",
"meaning": "Four-state KC state drove the value.",
"useWhen": "Four-state KC state drove the value.",
"invalidWhen": "Invalid when student_kc_state does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "report_card",
"meaning": "Report-card evidence drove the value.",
"useWhen": "Report-card evidence drove the value.",
"invalidWhen": "Invalid when report_card does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "teacher_override",
"meaning": "Authorized human override drove the value.",
"useWhen": "Authorized human override drove the value.",
"invalidWhen": "Invalid when teacher_override does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "summary_table_fallback",
"meaning": "Legacy summary table was used only because no qualifying mastery-test result existed.",
"useWhen": "Legacy summary table was used only because no qualifying mastery-test result existed.",
"invalidWhen": "Invalid when summary_table_fallback does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "course_placement_fallback",
"meaning": "Course placement was used only because no qualifying mastery-test result or summary row existed.",
"useWhen": "Course placement was used only because no qualifying mastery-test result or summary row existed.",
"invalidWhen": "Invalid when course_placement_fallback does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "mixed",
"meaning": "Multiple evidence families contributed, with actual mastery-test results taking precedence when present.",
"useWhen": "Multiple evidence families contributed, with actual mastery-test results taking precedence when present.",
"invalidWhen": "Invalid when mixed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}baseline_effective_grade
- anchor
- field-alpha-working-grade-baseline-effective-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Baseline MAP effective grade used by advancement.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on working grade; it feeds documented calculations or reports but does not identify another object.
- example
- 6.80
- invalidWhen
- Invalid when baseline_effective_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be null before a MAP baseline exists..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "May be null before a MAP baseline exists." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}sy_start_working_grade
- anchor
- field-alpha-working-grade-sy-start-working-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Working grade at school-year start used by advancement.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on working grade; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when sy_start_working_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be null before school-year-start state exists..
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Advancement is a Results-owned formula output over working-grade and MAP evidence.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "May be null before school-year-start state exists." ]
allowedValues
[]
provenance
{
"label": "Advancement output",
"changeType": "EXTEND",
"basis": "Advancement is a Results-owned formula output over working-grade and MAP evidence.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]
}evidence_priority
- anchor
- field-alpha-working-grade-evidence-priority
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Plain explanation of which evidence won and why.
- range
- Text within documented constraints.
- relationship
- Attribute on working grade; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for evidence_priority.
- example
- mastery_test_results_won_over_summary
- invalidWhen
- Invalid when evidence_priority is missing, violates its documented constraints: Must say actual mastery-test results win when they exist.; Must name fallback use when evidence_source is summary_table_fallback or course_placement_fallback.; Must name the HMG+1 tiebreak when it resolves an enrollment disagreement..
- edgeCases
- evidence_priority follows the working grade lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must say actual mastery-test results win when they exist.", "Must name fallback use when evidence_source is summary_table_fallback or course_placement_fallback.", "Must name the HMG+1 tiebreak when it resolves an enrollment disagreement." ]
allowedValues
[]
provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}source_evidence_refs
- anchor
- field-alpha-working-grade-source-evidence-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to HMG, mastery ledger, MAP, report-card, or fallback evidence used.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on working grade; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- [{"type":"highest_mastered_grade","student_id":"stu_timeback_10017","as_of_date":"2026-06-05"}]
- invalidWhen
- Invalid when source_evidence_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a JSON array of typed references.", "Must not include raw source payloads." ]
allowedValues
[]
provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}formula_version
- anchor
- field-alpha-working-grade-formula-version
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Named formula/config version used.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one working grade row within a tenant; downstream Results rows reference this value by its named id field.
- example
- working_grade_v2026_06
- invalidWhen
- Invalid when formula_version is missing, violates its documented constraints: Must reference alpha.policy_config..
- edgeCases
- formula_version follows the working grade lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference alpha.policy_config." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}null_reason
- anchor
- field-alpha-working-grade-null-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Why working_grade is null.
- range
- One documented enum value.
- relationship
- Governed value on working grade; no free-text relationship, and consumers must use the documented enum values.
- example
- not_enough_history
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before working grade is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Required when working_grade is null." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.advancement · Named grade movement metrics
- kind
- Derived extension read model
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- TimeBack 2026.07.17.11 MG-10 over Results-owned working-grade, school-year-start, MAP placement, and evidence references.
- purpose
- Returns gradesMasteredSytd = max(0, currentWorkingGrade - syStartWorkingGrade) as the default mastery-pure grades-mastered answer and separately returns mapBaselineGradeDelta_notGradesMastered = max(0, currentWorkingGrade - max(mapBaselinePlacementGrade, syStartWorkingGrade)) for placement/reporting context only.
- lifecycle
- Every import, finalization, migration, and repair path materializes both named metrics for the requested asOfDate. Existing rows are deterministically rematerialized. advancement_value is a deprecated alias fixed to grades_mastered_sytd.
- primaryKey
- (tenant_id, student_id, subject_id, as_of_date)
- storage
- Derived extension output; stores formula result and input references, not copied source rows.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-advancement
- fieldCount
- 16
itds
[
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Named Grade Movement Metrics Are Surface-Owned",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]relationships
[ "Belongs to one tenant-scoped student and subject.", "References working-grade, school-year-start, MAP placement, and source evidence without copying upstream rows.", "References two independently named alpha.policy_config formula versions." ]
constraints
[ "grades_mastered_sytd must equal max(0, current_working_grade - sy_start_working_grade).", "map_baseline_grade_delta_not_grades_mastered must equal max(0, current_working_grade - max(map_baseline_placement_grade, sy_start_working_grade)).", "advancement_value and formula_version are deprecated aliases fixed to grades_mastered_sytd and grades_mastered_sytd_formula_version.", "Consumers must use /grades-mastered and must never label the MAP-baseline delta grades mastered.", "Tenant id, as-of date, source evidence, and both formula versions are returned with the metrics." ]
invalidExamples
[ "Calling map_baseline_grade_delta_not_grades_mastered grades mastered.", "Returning advancement_value from different formulas on different write paths.", "Computing either metric from RIT growth in a dashboard.", "Returning a negative metric instead of max(0, ...)." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"student_id": "stu_timeback_10018",
"subject_id": "science",
"as_of_date": "2026-07-17",
"current_working_grade": 8,
"sy_start_working_grade": 6,
"map_baseline_placement_grade": 7,
"grades_mastered_sytd": 2,
"map_baseline_grade_delta_not_grades_mastered": 1,
"advancement_value": 2,
"grades_mastered_sytd_formula_version": "alpha.policy.grades_mastered_sytd_formula:2026.07.17.11",
"map_baseline_grade_delta_not_grades_mastered_formula_version": "alpha.policy.map_baseline_grade_delta_not_grades_mastered_formula:2026.07.17.11",
"source_evidence_refs": [
{
"source_rule": "TimeBack 2026.07.17.11 MG-10"
}
]
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (16)
tenant_id
- anchor
- field-alpha-advancement-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-advancement-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-advancement-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before advancement is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}as_of_date
- anchor
- field-alpha-advancement-as-of-date
- type
- DATE
- nullability
- Required.
- key
- Primary key part
- meaning
- Point-in-time date for advancement.
- range
- ISO 8601 calendar date.
- relationship
- Primary identifier for one advancement row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 2026-06-03
- invalidWhen
- Invalid when as_of_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "ISO 8601 date." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}current_working_grade
- anchor
- field-alpha-advancement-current-working-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Working grade now.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on advancement; it feeds documented calculations or reports but does not identify another object.
- example
- 7.40
- invalidWhen
- Invalid when current_working_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be null only with null_reason..
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Advancement is a Results-owned formula output over working-grade and MAP evidence.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "May be null only with null_reason." ]
allowedValues
[]
provenance
{
"label": "Advancement output",
"changeType": "EXTEND",
"basis": "Advancement is a Results-owned formula output over working-grade and MAP evidence.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]
}map_baseline_placement_grade
- anchor
- field-alpha-advancement-map-baseline-placement-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- MAP-baseline placement grade input used only by mapBaselineGradeDelta_notGradesMastered.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on advancement; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when map_baseline_placement_grade disagrees with the named TimeBack 2026.07.17.11 formula or is locally recomputed by a consumer instead of read from Results.
- edgeCases
- The metric is nonnegative. A missing required input produces null rather than a consumer-side fallback.
- upstreamSource
- Results working-grade, school-year-start, and MAP placement evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack 2026.07.17.11 MG-10, implemented and versioned by Results.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must equal baseline_effective_grade while that deprecated input alias remains public.", "Must not affect gradesMasteredSytd." ]
allowedValues
[]
provenance
{
"label": "Named grade movement output",
"changeType": "EXTEND",
"basis": "TimeBack 2026.07.17.11 MG-10, implemented and versioned by Results.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Named Grade Movement Metrics Are Surface-Owned",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]
}baseline_effective_grade
- anchor
- field-alpha-advancement-baseline-effective-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Deprecated alias of map_baseline_placement_grade retained for compatibility only.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on advancement; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when baseline_effective_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be null before baseline exists..
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Advancement is a Results-owned formula output over working-grade and MAP evidence.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must equal map_baseline_placement_grade.", "Must not affect grades_mastered_sytd." ]
allowedValues
[]
provenance
{
"label": "Advancement output",
"changeType": "EXTEND",
"basis": "Advancement is a Results-owned formula output over working-grade and MAP evidence.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]
}sy_start_working_grade
- anchor
- field-alpha-advancement-sy-start-working-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- School-year-start working grade.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on advancement; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when sy_start_working_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be null before start state exists..
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Advancement is a Results-owned formula output over working-grade and MAP evidence.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "May be null before start state exists." ]
allowedValues
[]
provenance
{
"label": "Advancement output",
"changeType": "EXTEND",
"basis": "Advancement is a Results-owned formula output over working-grade and MAP evidence.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]
}grades_mastered_sytd
- anchor
- field-alpha-advancement-grades-mastered-sytd
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Governed wire field for gradesMasteredSytd, the default mastery-pure grades-mastered answer.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on advancement; it feeds documented calculations or reports but does not identify another object.
- example
- 2.00
- invalidWhen
- Invalid when grades_mastered_sytd disagrees with the named TimeBack 2026.07.17.11 formula or is locally recomputed by a consumer instead of read from Results.
- edgeCases
- The metric is nonnegative. A missing required input produces null rather than a consumer-side fallback.
- upstreamSource
- Results working-grade, school-year-start, and MAP placement evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack 2026.07.17.11 MG-10, implemented and versioned by Results.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must equal max(0, current_working_grade - sy_start_working_grade).", "Must be >= 0 when present.", "This is the only metric returned as grades mastered." ]
allowedValues
[]
provenance
{
"label": "Named grade movement output",
"changeType": "EXTEND",
"basis": "TimeBack 2026.07.17.11 MG-10, implemented and versioned by Results.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Named Grade Movement Metrics Are Surface-Owned",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]
}map_baseline_grade_delta_not_grades_mastered
- anchor
- field-alpha-advancement-map-baseline-grade-delta-not-grades-mastered
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Governed wire field for mapBaselineGradeDelta_notGradesMastered; placement/reporting context only, never grades mastered.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on advancement; it feeds documented calculations or reports but does not identify another object.
- example
- 1.00
- invalidWhen
- Invalid when map_baseline_grade_delta_not_grades_mastered disagrees with the named TimeBack 2026.07.17.11 formula or is locally recomputed by a consumer instead of read from Results.
- edgeCases
- The metric is nonnegative. A missing required input produces null rather than a consumer-side fallback.
- upstreamSource
- Results working-grade, school-year-start, and MAP placement evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack 2026.07.17.11 MG-10, implemented and versioned by Results.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must equal max(0, current_working_grade - max(map_baseline_placement_grade, sy_start_working_grade)).", "Must be >= 0 when present.", "Must never be labeled grades mastered." ]
allowedValues
[]
provenance
{
"label": "Named grade movement output",
"changeType": "EXTEND",
"basis": "TimeBack 2026.07.17.11 MG-10, implemented and versioned by Results.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Named Grade Movement Metrics Are Surface-Owned",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]
}advancement_value
- anchor
- field-alpha-advancement-advancement-value
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Deprecated alias fixed to grades_mastered_sytd.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on advancement; it feeds documented calculations or reports but does not identify another object.
- example
- 2.00
- invalidWhen
- Invalid when advancement_value differs from grades_mastered_sytd or varies by write path.
- edgeCases
- New consumers use grades_mastered_sytd; this alias exists only for compatibility.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Advancement is a Results-owned formula output over working-grade and MAP evidence.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must equal grades_mastered_sytd.", "Must never contain map_baseline_grade_delta_not_grades_mastered." ]
allowedValues
[]
provenance
{
"label": "Advancement output",
"changeType": "EXTEND",
"basis": "Advancement is a Results-owned formula output over working-grade and MAP evidence.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]
}grades_mastered_sytd_formula_version
- anchor
- field-alpha-advancement-grades-mastered-sytd-formula-version
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Policy reference for the mastery-pure gradesMasteredSytd formula.
- range
- Text within documented constraints.
- relationship
- Attribute on advancement; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for formula_version.
- example
- alpha.policy.grades_mastered_sytd_formula:2026.07.17.11
- invalidWhen
- Invalid when grades_mastered_sytd_formula_version is missing or does not name the policy version used for the corresponding metric.
- edgeCases
- Formula versions remain explicit even when the metric is null, so the intended calculation is reproducible.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must equal the named alpha.policy_config reference used to compute the corresponding metric." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}map_baseline_grade_delta_not_grades_mastered_formula_version
- anchor
- field-alpha-advancement-map-baseline-grade-delta-not-grades-mastered-formula-version
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Policy reference for the explicitly non-grades-mastered MAP-baseline delta formula.
- range
- Text within documented constraints.
- relationship
- Attribute on advancement; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for formula_version.
- example
- alpha.policy.map_baseline_grade_delta_not_grades_mastered_formula:2026.07.17.11
- invalidWhen
- Invalid when map_baseline_grade_delta_not_grades_mastered_formula_version is missing or does not name the policy version used for the corresponding metric.
- edgeCases
- Formula versions remain explicit even when the metric is null, so the intended calculation is reproducible.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must equal the named alpha.policy_config reference used to compute the corresponding metric." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}formula_version
- anchor
- field-alpha-advancement-formula-version
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Deprecated alias fixed to grades_mastered_sytd_formula_version.
- range
- Text within documented constraints.
- relationship
- Attribute on advancement; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for formula_version.
- example
- alpha.policy.grades_mastered_sytd_formula:2026.07.17.11
- invalidWhen
- Invalid when formula_version is missing, violates its documented constraints: Must reference alpha.policy_config..
- edgeCases
- formula_version follows the advancement lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must equal grades_mastered_sytd_formula_version." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}source_evidence_refs
- anchor
- field-alpha-advancement-source-evidence-refs
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Typed references to working-grade, mastery-ledger, MAP placement, import, or repair evidence used for both named metrics.
- range
- JSON value matching documented schema.
- relationship
- Audit evidence for the named grade movement row; references remain tenant-scoped and do not embed raw source payloads.
- example
- [{"type":"highest_mastered_grade","student_id":"stu_timeback_10017","as_of_date":"2026-06-05"}]
- invalidWhen
- Invalid when source_evidence_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived read over alpha.mastery_ledger plus fallback source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must be a JSON array of typed references.", "Must not include raw source payloads." ]
allowedValues
[]
provenance
{
"label": "Highest mastered grade",
"changeType": "DERIVED READ",
"basis": "Highest-mastered-grade is a point-in-time Results answer over the mastery ledger; summaries and placements are fallback only.",
"upstream": "Derived read over alpha.mastery_ledger plus fallback source references",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}null_reason
- anchor
- field-alpha-advancement-null-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Why advancement_value is null.
- range
- One documented enum value.
- relationship
- Governed value on advancement; no free-text relationship, and consumers must use the documented enum values.
- example
- not_enough_history
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before advancement is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Required when advancement_value is null." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.student_course_progress · Student course progress
- kind
- Derived extension read model
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Analytics completion/XP rollup evidence, Curriculum course expected-XP refs, Events app-reported progress evidence, and People & Orgs enrollment context.
- purpose
- Student-facing answer for how much of one course is complete, how much XP remains, and which evidence source produced the answer.
- lifecycle
- Materialized by Results when app-reported Caliper progress, Analytics XP/completion rollups, Curriculum expected-XP refs, or relevant student state changes. Missing evidence returns null fields with null_reason instead of a client-side formula.
- primaryKey
- (tenant_id, student_id, subject_id, course_id, as_of_date)
- storage
- Derived extension read model; stores Results-owned answer fields plus evidence refs, not copied Analytics/Curriculum/Event/P&O rows.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-student-course-progress
- fieldCount
- 17
itds
[
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
},
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]relationships
[ "Belongs to one student.", "References one Curriculum course by course_id.", "References Analytics rollup evidence by source_analytics_rollup_refs.", "References Curriculum denominator evidence by source_curriculum_refs." ]
constraints
[ "XP remaining is the canonical work-left answer for app-facing progress reads.", "App-reported XP remaining wins when present.", "If direct XP remaining is absent, app-reported Caliper percent_complete is converted to XP remaining.", "If XP remaining is absent, Results may use a completed-XP estimate and must label that evidence kind.", "Consumers must not walk Curriculum course trees, count Results rows, or call Analytics completion-rollups as the final app-facing contract." ]
invalidExamples
[ "A GOALS app joins Analytics completion_rollup and Curriculum course_component rows to compute percent_complete.", "A client treats MAP/RIT/R90 grade-band percent as course progress.", "A course progress row where percent_complete is stored as an independent answer that disagrees with xp_remaining and total_xp." ]
example
{
"student_id": "stu_timeback_10017",
"course_id": "course_math_grade_7_main",
"xp_remaining": 120,
"total_xp": 400,
"percent_complete": 70
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (17)
tenant_id
- anchor
- field-alpha-student-course-progress-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-student-course-progress-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-student-course-progress-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student course progress is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}course_id
- anchor
- field-alpha-student-course-progress-course-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Curriculum course id whose progress is being answered.
- range
- Text within documented constraints.
- relationship
- Many course-progress rows can reference one Curriculum course across students and dates.
- example
- course_math_grade_7_main
- invalidWhen
- Invalid when course_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference the course in Curriculum.", "The course tree and components stay in Curriculum.", "Used as a typed filter on the course-progress endpoint." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}course_title
- anchor
- field-alpha-student-course-progress-course-title
- type
- TEXT
- nullability
- Nullable display field.
- key
- Not a key
- meaning
- Course display title copied only as a display snapshot for this progress answer.
- range
- Text within documented constraints.
- relationship
- Display label for the referenced Curriculum course; course_id remains the relationship key.
- example
- Math Grade 7 Main Sequence
- invalidWhen
- Invalid when used as a join key or parsed for grade/subject instead of course_id and typed fields.
- edgeCases
- course_title follows the student course progress lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "May be null when not authorized or unavailable.", "Not a join key; course_id is the relationship.", "Must not be used to infer subject or grade." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}grade_level
- anchor
- field-alpha-student-course-progress-grade-level
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Aggregate/filter key
- meaning
- Working grade level associated with this course progress row.
- range
- Decimal number within documented constraints.
- relationship
- Groups course-progress rows into the Results grade-level progress read for the same student, subject, grade, and as_of_date.
- example
- 7.00
- invalidWhen
- Invalid when grade_level is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be null for ungraded courses.; Comes from Curriculum/track metadata, not MAP/RIT/R90.; Used to aggregate grade-level progress..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "May be null for ungraded courses.", "Comes from Curriculum/track metadata, not MAP/RIT/R90.", "Used to aggregate grade-level progress." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}as_of_date
- anchor
- field-alpha-student-course-progress-as-of-date
- type
- DATE
- nullability
- Required.
- key
- Primary key part
- meaning
- Date the progress answer is valid for.
- range
- ISO 8601 calendar date.
- relationship
- Point-in-time key for progress; one course can have many dated progress answers.
- example
- 2026-06-03
- invalidWhen
- Invalid when as_of_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "ISO 8601 date.", "Current progress reads are represented as as-of reads.", "Used with student_id, subject_id, and course_id as the answer key." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}xp_remaining
- anchor
- field-alpha-student-course-progress-xp-remaining
- type
- NUMERIC(14,3)
- nullability
- Nullable when evidence is missing.
- key
- Answer value
- meaning
- Expected XP remaining in this course after applying the selected progress evidence.
- range
- Decimal number within documented constraints.
- relationship
- Derived from app/Analytics evidence and Curriculum expected-XP refs under policy_ref; consumers read it directly.
- example
- 120.000
- invalidWhen
- Invalid when xp_remaining is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be nonnegative when present.; This is the canonical work-left answer; app-reported percent_complete is evidence used to resolve it when direct remaining XP is absent.; Null requires null_reason..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be nonnegative when present.", "This is the canonical work-left answer; app-reported percent_complete is evidence used to resolve it when direct remaining XP is absent.", "Null requires null_reason." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}total_xp
- anchor
- field-alpha-student-course-progress-total-xp
- type
- NUMERIC(14,3)
- nullability
- Nullable when Curriculum denominator evidence is missing.
- key
- Answer denominator
- meaning
- Total expected XP for the course denominator.
- range
- Decimal number within documented constraints.
- relationship
- References Curriculum expected-XP denominator evidence through source_curriculum_refs.
- example
- 400.000
- invalidWhen
- Invalid when total_xp is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be positive when present.; Comes from Curriculum expected-XP refs.; Must not double-count container and leaf expected_xp..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be positive when present.", "Comes from Curriculum expected-XP refs.", "Must not double-count container and leaf expected_xp." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}percent_complete
- anchor
- field-alpha-student-course-progress-percent-complete
- type
- NUMERIC(7,3)
- nullability
- Nullable when progress cannot be answered.
- key
- Answer value
- meaning
- Course percent complete shown to apps and reports.
- range
- 0.000 through 100.000
- relationship
- Derived by Results from xp_remaining and total_xp; consumers must not recompute it from other modules.
- example
- 70.000
- invalidWhen
- Invalid when percent_complete is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 100 inclusive when present.; Derived after xp_remaining and total_xp are resolved.; Formula: percent_complete = 100 * (1 - xp_remaining / total_xp)..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "0 through 100 inclusive when present.", "Derived after xp_remaining and total_xp are resolved.", "Formula: percent_complete = 100 * (1 - xp_remaining / total_xp)." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}progress_source_kind
- anchor
- field-alpha-student-course-progress-progress-source-kind
- type
- TEXT enum
- nullability
- Required for populated rows.
- key
- Not a key
- meaning
- Which precedence branch resolved XP remaining.
- range
- One documented enum value.
- relationship
- Governed value on student course progress; no free-text relationship, and consumers must use the documented enum values.
- example
- app_reported_percent
- invalidWhen
- Invalid when progress_source_kind is not one of app_reported_percent, xp_remaining, completed_xp_estimate, unknown, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student course progress is written; adding a new progress_source_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be one documented value.", "xp_remaining wins over app_reported_percent, which wins over completed_xp_estimate.", "unknown is allowed only with null_reason." ]
allowedValues
[
{
"value": "app_reported_percent",
"meaning": "The delivering app reported percent complete, which Results converted to XP remaining.",
"useWhen": "The delivering app reported percent complete, which Results converted to XP remaining.",
"invalidWhen": "Invalid when app_reported_percent does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "xp_remaining",
"meaning": "The source supplied remaining XP and Curriculum supplied total XP.",
"useWhen": "The source supplied remaining XP and Curriculum supplied total XP.",
"invalidWhen": "Invalid when xp_remaining does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "completed_xp_estimate",
"meaning": "Results estimated remaining XP from completed XP when stronger evidence was missing.",
"useWhen": "Results estimated remaining XP from completed XP when stronger evidence was missing.",
"invalidWhen": "Invalid when completed_xp_estimate does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "unknown",
"meaning": "Required evidence is missing; null_reason explains the gap.",
"useWhen": "Required evidence is missing; null_reason explains the gap.",
"invalidWhen": "Invalid when unknown does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}evidence_kind
- anchor
- field-alpha-student-course-progress-evidence-kind
- type
- TEXT enum
- nullability
- Required for populated rows.
- key
- Not a key
- meaning
- More specific evidence family behind progress_source_kind.
- range
- One documented enum value.
- relationship
- Governed value on student course progress; no free-text relationship, and consumers must use the documented enum values.
- example
- caliper_course_progress_percent
- invalidWhen
- Invalid when evidence_kind is not one of caliper_course_progress_percent, analytics_xp_remaining_rollup, analytics_completed_xp_rollup, unknown, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student course progress is written; adding a new evidence_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must name the source family instead of leaving clients to inspect refs.", "Examples include Caliper course progress percent or Analytics XP remaining rollup.", "unknown is allowed only with null_reason." ]
allowedValues
[
{
"value": "caliper_course_progress_percent",
"meaning": "Events preserved an app-reported course progress percent.",
"useWhen": "Events preserved an app-reported course progress percent.",
"invalidWhen": "Invalid when caliper_course_progress_percent does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "analytics_xp_remaining_rollup",
"meaning": "Analytics supplied XP remaining evidence.",
"useWhen": "Analytics supplied XP remaining evidence.",
"invalidWhen": "Invalid when analytics_xp_remaining_rollup does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "analytics_completed_xp_rollup",
"meaning": "Analytics supplied completed XP evidence used as a fallback estimate.",
"useWhen": "Analytics supplied completed XP evidence used as a fallback estimate.",
"invalidWhen": "Invalid when analytics_completed_xp_rollup does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "unknown",
"meaning": "No acceptable evidence is available.",
"useWhen": "No acceptable evidence is available.",
"invalidWhen": "Invalid when unknown does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}source_analytics_rollup_refs
- anchor
- field-alpha-student-course-progress-source-analytics-rollup-refs
- type
- JSONB array
- nullability
- Required; empty only when no Analytics evidence applies.
- key
- Not a key
- meaning
- Structured references to Analytics rollup rows used as evidence.
- range
- JSON value matching documented schema.
- relationship
- References zero or more Analytics completion/XP rollup evidence rows by typed ref.
- example
- ["alpha.analytics_completion_rollup:completion_rollup_demo_student_01ht7g3yzv7qb5n4ykq1k0z9a9"]
- invalidWhen
- Invalid when source_analytics_rollup_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a JSON array.", "Refs only; do not copy Analytics rows.", "Must stay empty rather than inventing evidence." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}source_curriculum_refs
- anchor
- field-alpha-student-course-progress-source-curriculum-refs
- type
- JSONB array
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to Curriculum course/expected-XP denominator evidence.
- range
- JSON value matching documented schema.
- relationship
- References Curriculum course and expected-XP denominator rows by typed ref.
- example
- ["alpha.curriculum_course:course_math_grade_7_main"]
- invalidWhen
- Invalid when source_curriculum_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a JSON array.", "Refs only; do not copy Curriculum trees.", "Required even when no direct Analytics evidence applies." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}policy_ref
- anchor
- field-alpha-student-course-progress-policy-ref
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Named Results progress policy used for evidence precedence, denominator handling, and percent derivation.
- range
- Text within documented constraints.
- relationship
- References the active Results progress policy config.
- example
- alpha.policy.results.progress.v2026-06-16
- invalidWhen
- Invalid when policy_ref is missing, violates its documented constraints: Must reference a versioned alpha.policy.* progress policy.; Changing the policy changes computed_at/versioned answer behavior.; Consumers do not embed this logic..
- edgeCases
- policy_ref follows the student course progress lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference a versioned alpha.policy.* progress policy.", "Changing the policy changes computed_at/versioned answer behavior.", "Consumers do not embed this logic." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}null_reason
- anchor
- field-alpha-student-course-progress-null-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Why progress fields are null or unknown.
- range
- One documented enum value.
- relationship
- Governed value on student course progress; no free-text relationship, and consumers must use the documented enum values.
- example
- source_missing
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student course progress is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required when xp_remaining, total_xp, or percent_complete is unavailable.", "Must be none/null for a complete answer.", "Consumers surface the gap instead of filling locally." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}computed_at
- anchor
- field-alpha-student-course-progress-computed-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- UTC time Results produced this progress answer.
- range
- UTC timestamp.
- relationship
- Audit timestamp for this Results materialization; not a source relationship.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when computed_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be UTC.", "Used for freshness and evidence audits.", "Does not replace as_of_date." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}alpha.student_grade_level_progress · Student grade-level progress
- kind
- Derived extension read model
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- alpha.student_course_progress plus Analytics completion/XP evidence, Curriculum main-course expected-XP refs, and People & Orgs school-calendar context.
- purpose
- Student-facing answer for grade-level work remaining, percent complete across the main sequence, and pace versus the school calendar.
- lifecycle
- Materialized by Results from course progress answers and active-path state. Recomputed when course progress, working grade, track state, Curriculum main-course totals, or calendar elapsed-year evidence changes.
- primaryKey
- (tenant_id, student_id, subject_id, grade_level, as_of_date)
- storage
- Derived extension read model; stores Results-owned answer fields plus evidence refs, not copied Analytics/Curriculum/Event/P&O rows.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-student-grade-level-progress
- fieldCount
- 18
itds
[
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
},
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]relationships
[ "Belongs to one student.", "Aggregates student_course_progress rows for main courses.", "References Analytics evidence rows and calendar refs through source arrays.", "Reads Curriculum main-sequence expected-XP structure by reference." ]
constraints
[ "grade_level_xp_remaining is the canonical active-path remaining-work answer.", "Direct main-course percent_complete evidence is aggregated when available.", "main_sequence_total_xp is always the denominator for grade-level fallback percent and weighted direct-course aggregation.", "Hole-filling/remediation can affect active_path_state and remaining XP, but does not expand main_sequence_total_xp.", "Pacing compares percent_complete to elapsed_school_year_percent under policy_ref.", "Consumers do not compute grade progress from MAP/RIT/R90, Analytics rollups, Curriculum trees, or local school calendars." ]
invalidExamples
[ "A GOALS app averages course percentages from Curriculum course lists.", "A report includes hole-filling XP in main_sequence_total_xp.", "A client uses RIT90 grade-band percent as within-grade progress." ]
example
{
"student_id": "stu_timeback_10017",
"subject_id": "math",
"grade_level": 7,
"grade_level_xp_remaining": 160,
"main_sequence_total_xp": 500,
"percent_complete": 68,
"pacing_status": "behind_pace"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (18)
tenant_id
- anchor
- field-alpha-student-grade-level-progress-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-student-grade-level-progress-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-student-grade-level-progress-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student grade level progress is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}grade_level
- anchor
- field-alpha-student-grade-level-progress-grade-level
- type
- NUMERIC(5,2)
- nullability
- Required.
- key
- Primary key part
- meaning
- Grade level whose main-sequence progress is being answered.
- range
- Decimal number within documented constraints.
- relationship
- Groups course progress rows for this student, subject, grade, and as_of_date.
- example
- 7.00
- invalidWhen
- Invalid when grade_level is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be a comparable numeric grade value.; Comes from Curriculum/track metadata, not MAP/RIT/R90.; Part of the primary key..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a comparable numeric grade value.", "Comes from Curriculum/track metadata, not MAP/RIT/R90.", "Part of the primary key." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}working_grade
- anchor
- field-alpha-student-grade-level-progress-working-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Working grade input used to identify the active grade path.
- range
- Decimal number within documented constraints.
- relationship
- References the Results working_grade answer for the same student, subject, and as_of_date.
- example
- 7.40
- invalidWhen
- Invalid when working_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be null only when null_reason explains missing state.; Read from Results working_grade.; Not the same as age_grade or highest_mastered_grade..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "May be null only when null_reason explains missing state.", "Read from Results working_grade.", "Not the same as age_grade or highest_mastered_grade." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}as_of_date
- anchor
- field-alpha-student-grade-level-progress-as-of-date
- type
- DATE
- nullability
- Required.
- key
- Primary key part
- meaning
- Date the grade-level progress answer is valid for.
- range
- ISO 8601 calendar date.
- relationship
- Point-in-time key for grade progress; one grade can have many dated answers.
- example
- 2026-06-03
- invalidWhen
- Invalid when as_of_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "ISO 8601 date.", "Current progress reads are represented as as-of reads.", "Part of the primary key." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}active_path_state
- anchor
- field-alpha-student-grade-level-progress-active-path-state
- type
- TEXT enum
- nullability
- Required.
- key
- Policy branch
- meaning
- Where the student is relative to the grade-level main sequence.
- range
- One documented enum value.
- relationship
- Governed value on student grade level progress; no free-text relationship, and consumers must use the documented enum values.
- example
- in_main_sequence
- invalidWhen
- Invalid when active_path_state is not one of not_started, in_main_sequence, in_hole_filling, finished, unknown, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student grade level progress is written; adding a new active_path_state value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be one documented value.", "Determines which XP remains in grade_level_xp_remaining.", "finished requires grade_level_xp_remaining=0 when denominator exists." ]
allowedValues
[
{
"value": "not_started",
"meaning": "The student has not started the grade's main sequence; remaining XP equals the main-sequence total.",
"useWhen": "The student has not started the grade's main sequence; remaining XP equals the main-sequence total.",
"invalidWhen": "Invalid when not_started does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "in_main_sequence",
"meaning": "The student is in the main sequence; remaining XP is current main-course remaining plus later main-course XP.",
"useWhen": "The student is in the main sequence; remaining XP is current main-course remaining plus later main-course XP.",
"invalidWhen": "Invalid when in_main_sequence does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "in_hole_filling",
"meaning": "The student is temporarily in hole-filling/remediation; remaining XP is the active hole-filling remaining work.",
"useWhen": "The student is temporarily in hole-filling/remediation; remaining XP is the active hole-filling remaining work.",
"invalidWhen": "Invalid when in_hole_filling does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "finished",
"meaning": "The grade-level main sequence is finished; remaining XP is zero.",
"useWhen": "The grade-level main sequence is finished; remaining XP is zero.",
"invalidWhen": "Invalid when finished does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "unknown",
"meaning": "Required state is missing; null_reason explains the gap.",
"useWhen": "Required state is missing; null_reason explains the gap.",
"invalidWhen": "Invalid when unknown does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}grade_level_xp_remaining
- anchor
- field-alpha-student-grade-level-progress-grade-level-xp-remaining
- type
- NUMERIC(14,3)
- nullability
- Nullable when evidence is missing.
- key
- Answer value
- meaning
- Active-path XP remaining for this grade-level answer.
- range
- Decimal number within documented constraints.
- relationship
- Derived by Results from course progress, track state, and Curriculum expected-XP refs under policy_ref.
- example
- 160.000
- invalidWhen
- Invalid when grade_level_xp_remaining is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be nonnegative when present.; not_started equals main_sequence_total_xp.; finished equals zero.; in_main_sequence equals current main-course remaining plus later main-course expected XP.; in_hole_filling equals active hole-filling remaining..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be nonnegative when present.", "not_started equals main_sequence_total_xp.", "finished equals zero.", "in_main_sequence equals current main-course remaining plus later main-course expected XP.", "in_hole_filling equals active hole-filling remaining." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}main_sequence_total_xp
- anchor
- field-alpha-student-grade-level-progress-main-sequence-total-xp
- type
- NUMERIC(14,3)
- nullability
- Nullable when Curriculum denominator evidence is missing.
- key
- Answer denominator
- meaning
- Total expected XP for the grade's main-course sequence.
- range
- Decimal number within documented constraints.
- relationship
- References Curriculum main-course expected-XP denominator evidence.
- example
- 500.000
- invalidWhen
- Invalid when main_sequence_total_xp is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be positive when present.; This is always the denominator for grade percent_complete.; Hole-filling/remediation/catalog courses do not expand this denominator..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be positive when present.", "This is always the denominator for grade percent_complete.", "Hole-filling/remediation/catalog courses do not expand this denominator." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}percent_complete
- anchor
- field-alpha-student-grade-level-progress-percent-complete
- type
- NUMERIC(7,3)
- nullability
- Nullable when progress cannot be answered.
- key
- Answer value
- meaning
- Grade-level percent complete over the main sequence denominator.
- range
- 0.000 through 100.000
- relationship
- Derived by Results from active-path remaining XP and the main-sequence denominator.
- example
- 68.000
- invalidWhen
- Invalid when percent_complete is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 100 inclusive when present.; Derived after grade_level_xp_remaining and main_sequence_total_xp are resolved.; Formula: percent_complete = 100 * (1 - grade_level_xp_remaining / main_sequence_total_xp).; Consumers render this field instead of recomputing it..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "0 through 100 inclusive when present.", "Derived after grade_level_xp_remaining and main_sequence_total_xp are resolved.", "Formula: percent_complete = 100 * (1 - grade_level_xp_remaining / main_sequence_total_xp).", "Consumers render this field instead of recomputing it." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}elapsed_school_year_percent
- anchor
- field-alpha-student-grade-level-progress-elapsed-school-year-percent
- type
- NUMERIC(7,3)
- nullability
- Nullable when calendar evidence is missing.
- key
- Pacing input
- meaning
- Percent of the relevant school-year calendar elapsed as of as_of_date.
- range
- 0.000 through 100.000
- relationship
- References People & Orgs calendar/enrollment evidence through source_calendar_refs.
- example
- 82.000
- invalidWhen
- Invalid when elapsed_school_year_percent is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0 through 100 inclusive when present.; Comes from People & Orgs calendar/enrollment context.; Used only for pacing comparison..
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "0 through 100 inclusive when present.", "Comes from People & Orgs calendar/enrollment context.", "Used only for pacing comparison." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}pacing_status
- anchor
- field-alpha-student-grade-level-progress-pacing-status
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Pace of actual grade-level progress relative to elapsed school-year percent.
- range
- One documented enum value.
- relationship
- Governed value on student grade level progress; no free-text relationship, and consumers must use the documented enum values.
- example
- behind_pace
- invalidWhen
- Invalid when pacing_status is not one of behind_pace, on_pace, ahead_of_pace, unknown, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student grade level progress is written; adding a new pacing_status value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be one documented value.", "Computed under policy_ref thresholds.", "unknown is used when progress or calendar evidence is missing." ]
allowedValues
[
{
"value": "behind_pace",
"meaning": "percent_complete is below the elapsed-calendar threshold under policy.",
"useWhen": "percent_complete is below the elapsed-calendar threshold under policy.",
"invalidWhen": "Invalid when behind_pace does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "on_pace",
"meaning": "percent_complete is within the policy band for elapsed school year.",
"useWhen": "percent_complete is within the policy band for elapsed school year.",
"invalidWhen": "Invalid when on_pace does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "ahead_of_pace",
"meaning": "percent_complete is above the elapsed-calendar threshold under policy.",
"useWhen": "percent_complete is above the elapsed-calendar threshold under policy.",
"invalidWhen": "Invalid when ahead_of_pace does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "unknown",
"meaning": "Progress or calendar evidence is missing.",
"useWhen": "Progress or calendar evidence is missing.",
"invalidWhen": "Invalid when unknown does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}source_course_progress_refs
- anchor
- field-alpha-student-grade-level-progress-source-course-progress-refs
- type
- JSONB array
- nullability
- Required.
- key
- Not a key
- meaning
- Structured references to course-progress rows aggregated into this grade answer.
- range
- JSON value matching documented schema.
- relationship
- References zero or more alpha.student_course_progress rows by typed ref.
- example
- ["alpha.student_course_progress:stu_timeback_10017|math|course_math_grade_7_main|2026-06-03"]
- invalidWhen
- Invalid when source_course_progress_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a JSON array.", "Refs only; do not copy course-progress rows.", "Required for populated grade progress." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}source_analytics_rollup_refs
- anchor
- field-alpha-student-grade-level-progress-source-analytics-rollup-refs
- type
- JSONB array
- nullability
- Required; empty only when no Analytics evidence applies.
- key
- Not a key
- meaning
- Structured references to Analytics rollup rows used by contributing course-progress rows.
- range
- JSON value matching documented schema.
- relationship
- References Analytics completion/XP evidence rows by typed ref.
- example
- ["alpha.analytics_completion_rollup:completion_rollup_demo_student_01ht7g3yzv7qb5n4ykq1k0z9a9"]
- invalidWhen
- Invalid when source_analytics_rollup_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a JSON array.", "Refs only; do not copy Analytics rows.", "Useful for authorized audits and convergence checks." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}source_calendar_refs
- anchor
- field-alpha-student-grade-level-progress-source-calendar-refs
- type
- JSONB array
- nullability
- Required; empty only when pacing is unknown.
- key
- Not a key
- meaning
- Structured references to calendar/enrollment rows used for elapsed_school_year_percent.
- range
- JSON value matching documented schema.
- relationship
- References People & Orgs calendar/enrollment evidence by typed ref.
- example
- ["alpha.school_calendar:school_north_valley:2026-06-03"]
- invalidWhen
- Invalid when source_calendar_refs is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be a JSON array.", "Refs only; do not copy calendar tables.", "Empty array requires pacing_status=unknown or null_reason." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}policy_ref
- anchor
- field-alpha-student-grade-level-progress-policy-ref
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Named Results progress policy used for active-path remaining XP, denominator choice, and pacing thresholds.
- range
- Text within documented constraints.
- relationship
- References the active Results progress policy config.
- example
- alpha.policy.results.progress.v2026-06-16
- invalidWhen
- Invalid when policy_ref is missing, violates its documented constraints: Must reference a versioned alpha.policy.* progress policy.; Consumers do not embed this logic.; Changing policy can produce a new computed answer..
- edgeCases
- policy_ref follows the student grade level progress lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Must reference a versioned alpha.policy.* progress policy.", "Consumers do not embed this logic.", "Changing policy can produce a new computed answer." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}null_reason
- anchor
- field-alpha-student-grade-level-progress-null-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Why progress or pacing fields are null or unknown.
- range
- One documented enum value.
- relationship
- Governed value on student grade level progress; no free-text relationship, and consumers must use the documented enum values.
- example
- source_missing
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before student grade level progress is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required when grade_level_xp_remaining, main_sequence_total_xp, percent_complete, or pacing evidence is unavailable.", "Consumers surface the gap instead of filling locally.", "none/null means the answer is populated." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}computed_at
- anchor
- field-alpha-student-grade-level-progress-computed-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- UTC time Results produced this grade-level progress answer.
- range
- UTC timestamp.
- relationship
- Audit timestamp for this Results materialization; not a source relationship.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when computed_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Derived Results read over Analytics/Curriculum/Events/People & Orgs source references
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be UTC.", "Used for freshness and evidence audits.", "Does not replace as_of_date." ]
allowedValues
[]
provenance
{
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
}alpha.map_score · MAP score
- kind
- Public view + extension storage
- moduleHome
- Results
- changeType
- CUT + RENAME + EXTEND
- upstream
- nweamap.assessment_result_projection
- purpose
- Plain term-scoped MAP result keyed by TimeBack student, subject, canonical term, and norms set. Defaults to the NWEAMap highest-RIT test_of_record for report/test-of-record workflows.
- lifecycle
- Updated by NWEAMap projection after CDF import or real-time result observation. One row per student/subject/term/norms set for ordinary reads.
- primaryKey
- (tenant_id, student_id, subject_id, canonical_term_id, norms_set)
- storage
- Public view over NWEAMap projection joined to extension fields; no copied NWEA columns.
- writePath
- Read through the public Alpha view; source-backed writes route to OneRoster/NWEAMap and Alpha-only facts write extension storage.
- anchor
- table-alpha-map-score
- fieldCount
- 22
itds
[
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]relationships
[ "Belongs to one student.", "References one NWEAMap assessment_result_projection row as source evidence." ]
constraints
[ "Default read is test_of_record.", "NWEA StudentID is not public identity.", "NWEA account comes through People & Orgs org tree, not a Results-owned account table.", "Use alpha.map_current_score for the GOALS/student-facing current MAP context; do not overload alpha.map_score with latest-growth-first semantics." ]
invalidExamples
[ "A report keyed by raw NWEA StudentID.", "A MAP score chosen by GrowthMeasureYN instead of highest-RIT test_of_record.", "A GOALS app using map_score as the latest Growth MAP current context." ]
example
{
"student_id": "stu_timeback_10017",
"subject_id": "math",
"canonical_term_id": "term_2025_26_spring",
"rit": 238,
"percentile": 94
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (22)
map_score_id
- anchor
- field-alpha-map-score-map-score-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this public MAP score row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one map score row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000701
- invalidWhen
- Invalid when map_score_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}tenant_id
- anchor
- field-alpha-map-score-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-map-score-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}student_email
- anchor
- field-alpha-map-score-student-email
- type
- CITEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Student email shown for teacher/parent lookup convenience. It is not a stable key and cannot replace student_id.
- range
- Case-insensitive text within documented constraints.
- relationship
- Joined from People & Orgs for display and lookup; not a Results-owned foreign key.
- example
- alex.rivera@example.edu
- invalidWhen
- Invalid when student_email is used as the sole reconciliation key, returned without authorization, or stored where the row requires stable student_id.
- edgeCases
- Email can change and may be hidden by scope; join it for lookup/display, but never use it as the durable key.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Contact
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Nullable because not every authorized read returns email.", "Case-insensitive email format when present.", "Must never be used as the sole reconciliation key." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-map-score-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map score is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-map-score-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}term_season
- anchor
- field-alpha-map-score-term-season
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Canonical term season derived at write time.
- range
- One documented enum value.
- relationship
- Governed value on map score; no free-text relationship, and consumers must use the documented enum values.
- example
- spring
- invalidWhen
- Invalid when term_season is not one of fall, winter, spring, summer, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map score is written; adding a new term_season value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must be one documented value.", "Never parse from TermName at read time." ]
allowedValues
[
{
"value": "fall",
"meaning": "Fall term.",
"useWhen": "Fall term.",
"invalidWhen": "Invalid when fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter",
"meaning": "Winter term.",
"useWhen": "Winter term.",
"invalidWhen": "Invalid when winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring",
"meaning": "Spring term.",
"useWhen": "Spring term.",
"invalidWhen": "Invalid when spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "summer",
"meaning": "Summer term.",
"useWhen": "Summer term.",
"invalidWhen": "Invalid when summer does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}school_year
- anchor
- field-alpha-map-score-school-year
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Canonical school year for the MAP score.
- range
- Text within documented constraints.
- relationship
- Attribute on map score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for school_year.
- example
- 2025-26
- invalidWhen
- Invalid when school_year is missing, violates its documented constraints: Format YYYY-YY.; Set by term resolver, not regex in consumers..
- edgeCases
- school_year follows the map score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Format YYYY-YY.", "Set by term resolver, not regex in consumers." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}nwea_account_id
- anchor
- field-alpha-map-score-nwea-account-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- NWEA district/account id read through the People & Orgs district org boundary.
- range
- Text within documented constraints.
- relationship
- References the OneRoster org tree through People & Orgs.
- example
- NWEA-ALPHA-PHYSICAL
- invalidWhen
- Invalid when nwea_account_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must come from parent org alpha.org.nwea_district_id.", "Results must not create another NWEA account source of truth." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}brand
- anchor
- field-alpha-map-score-brand
- type
- TEXT
- nullability
- Required joined read field.
- key
- Not a key
- meaning
- Brand cohort tag joined from People & Orgs for reports.
- range
- Text within documented constraints.
- relationship
- Attribute on map score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for brand.
- example
- Alpha
- invalidWhen
- Invalid when brand is missing, violates its documented constraints: Locked registry tag at nwea_account grain.; Do not duplicate as Results-owned source of truth..
- edgeCases
- brand follows the map score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Locked registry tag at nwea_account grain.", "Do not duplicate as Results-owned source of truth." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}modality
- anchor
- field-alpha-map-score-modality
- type
- TEXT enum
- nullability
- Required joined read field.
- key
- Not a key
- meaning
- Physical or virtual NWEA account boundary.
- range
- One documented enum value.
- relationship
- Governed value on map score; no free-text relationship, and consumers must use the documented enum values.
- example
- physical
- invalidWhen
- Invalid when modality is not one of physical, virtual, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map score is written; adding a new modality value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must be physical or virtual.", "No hybrid value." ]
allowedValues
[
{
"value": "physical",
"meaning": "Student belongs to the physical-school NWEA account boundary.",
"useWhen": "Student belongs to the physical-school NWEA account boundary.",
"invalidWhen": "Invalid when physical does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "virtual",
"meaning": "Student belongs to the virtual-school NWEA account boundary.",
"useWhen": "Student belongs to the virtual-school NWEA account boundary.",
"invalidWhen": "Invalid when virtual does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}school_level
- anchor
- field-alpha-map-score-school-level
- type
- TEXT enum
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Locked school-level tag joined from People & Orgs for reports.
- range
- One documented enum value.
- relationship
- Governed value on map score; no free-text relationship, and consumers must use the documented enum values.
- example
- MS
- invalidWhen
- Invalid when school_level is not one of WL, LL, L1, L2, MS, HS, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map score is written; adding a new school_level value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Allowed values are WL, LL, L1, L2, MS, HS.", "Governed People & Orgs value.", "Not a Results-owned tag.", "Every report filtering by school level uses this field and value set instead of inventing another list." ]
allowedValues
[
{
"value": "WL",
"meaning": "Wonder Level, the governed Alpha school-level tag used for early learners.",
"useWhen": "Wonder Level, the governed Alpha school-level tag used for early learners.",
"invalidWhen": "Invalid when WL does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "LL",
"meaning": "Lower Level, the governed Alpha school-level tag used for lower elementary reporting.",
"useWhen": "Lower Level, the governed Alpha school-level tag used for lower elementary reporting.",
"invalidWhen": "Invalid when LL does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "L1",
"meaning": "Level 1, the governed Alpha school-level tag used for the first Alpha level band.",
"useWhen": "Level 1, the governed Alpha school-level tag used for the first Alpha level band.",
"invalidWhen": "Invalid when L1 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "L2",
"meaning": "Level 2, the governed Alpha school-level tag used for the second Alpha level band.",
"useWhen": "Level 2, the governed Alpha school-level tag used for the second Alpha level band.",
"invalidWhen": "Invalid when L2 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "MS",
"meaning": "Middle School, the governed Alpha school-level tag.",
"useWhen": "Middle School, the governed Alpha school-level tag.",
"invalidWhen": "Invalid when MS does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "HS",
"meaning": "High School, the governed Alpha school-level tag.",
"useWhen": "High School, the governed Alpha school-level tag.",
"invalidWhen": "Invalid when HS does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}age_grade
- anchor
- field-alpha-map-score-age-grade
- type
- TEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Age-grade cohort dimension joined for reports.
- range
- Text within documented constraints.
- relationship
- Attribute on map score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for age_grade.
- example
- grade_6
- invalidWhen
- Invalid when age_grade violates its documented constraints: Governed People & Orgs value.; Not parsed from MAP test name..
- edgeCases
- age_grade follows the map score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Governed People & Orgs value.", "Not parsed from MAP test name." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}tenure_bucket
- anchor
- field-alpha-map-score-tenure-bucket
- type
- TEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Student tenure bucket computed from admission_date and alpha.policy.tenure_buckets.
- range
- Text within documented constraints.
- relationship
- Attribute on map score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for tenure_bucket.
- example
- 1-2_years
- invalidWhen
- Invalid when tenure_bucket violates its documented constraints: Must be computed by the surface.; No dashboard hardcoding of band edges..
- edgeCases
- tenure_bucket follows the map score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must be computed by the surface.", "No dashboard hardcoding of band edges." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}norms_set
- anchor
- field-alpha-map-score-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map score is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}rit
- anchor
- field-alpha-map-score-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Selected MAP RIT score.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map score; it feeds documented calculations or reports but does not identify another object.
- example
- 238
- invalidWhen
- Invalid when rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- nweamap.assessment_result_projection.test_rit_score
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "100 through 350 when present.", "Selected by NWEAMap highest-RIT test_of_record rule." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}standard_error
- anchor
- field-alpha-map-score-standard-error
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- MAP test standard error.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map score; it feeds documented calculations or reports but does not identify another object.
- example
- 3.20
- invalidWhen
- Invalid when standard_error is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Non-negative when present..
- upstreamSource
- AssessmentResults.TestStandardError
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Non-negative when present." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}percentile
- anchor
- field-alpha-map-score-percentile
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- MAP percentile for the selected norms set.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map score; it feeds documented calculations or reports but does not identify another object.
- example
- 94
- invalidWhen
- Invalid when percentile is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Percentile 99 is a ceiling; use alpha.map_99_level fields for above-ceiling growth instead of treating 99 as fully discriminating.
- upstreamSource
- AssessmentResults.TestPercentile
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "0 through 99 when present.", "Ceiling students use alpha.map_99_level for additional signal." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}achievement_quintile
- anchor
- field-alpha-map-score-achievement-quintile
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- NWEA achievement quintile when available.
- range
- Text within documented constraints.
- relationship
- Attribute on map score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for achievement_quintile.
- example
- High
- invalidWhen
- Invalid when achievement_quintile violates its documented constraints: Preserve exported value within NWEA constraints.; Not a substitute for Growth X or effective grade..
- edgeCases
- achievement_quintile follows the map score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- AssessmentResults.AchievementQuintile
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Preserve exported value within NWEA constraints.", "Not a substitute for Growth X or effective grade." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}test_start_at
- anchor
- field-alpha-map-score-test-start-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Parsed timestamp for the selected sitting.
- range
- UTC timestamp.
- relationship
- Time value on map score; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-05-04T14:00:00Z
- invalidWhen
- Invalid when test_start_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- AssessmentResults.TestStartDate + TestStartTime
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "UTC when parseable.", "Raw date/time stays in source evidence when parsing fails." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}source_projection_id
- anchor
- field-alpha-map-score-source-projection-id
- type
- UUID
- nullability
- Required.
- key
- Not a key
- meaning
- NWEAMap assessment_result_projection row that produced this public score.
- range
- PostgreSQL UUID.
- relationship
- References one NWEAMap projection row.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000001
- invalidWhen
- Invalid when source_projection_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must reference NWEAMap projection evidence." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}modified_at
- anchor
- field-alpha-map-score-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on map score; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- Public view field. Source-backed values are projected from the base surface; Alpha-only values come from extension storage, with no copied source columns.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.map_current_score · Current MAP context
- kind
- SQL view
- moduleHome
- Results
- changeType
- CUT + RENAME + EXTEND
- upstream
- nweamap.assessment_result_projection
- purpose
- Student-facing current MAP context for GOALS and similar apps: latest active Growth MAP by test date, with latest active screener/non-growth fallback only when no Growth MAP exists.
- lifecycle
- View refreshed by the same NWEAMap import/projection facts as map_score. Selection policy is latest-growth-first and versioned in policy_ref.
- primaryKey
- (tenant_id, student_id, subject_id, norms_set)
- storage
- SQL view over NWEAMap projection rows for the GOALS/student-facing current MAP context: latest active Growth MAP by test date, with latest active screener/non-growth fallback only when no Growth MAP exists. It is not a copied Alpha table and it does not replace alpha.map_score's term-scoped highest-RIT test-of-record report read.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-map-current-score
- fieldCount
- 26
itds
[
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]relationships
[ "Belongs to one student.", "References one NWEAMap assessment_result_projection row as source evidence.", "Does not replace alpha.map_score's per-term highest-RIT test_of_record report row." ]
constraints
[ "Select GrowthMeasureYN=Y rows before non-growth rows.", "Within the selected Growth/screener family choose latest test_start_at, then highest RIT as a deterministic tiebreaker.", "Exclude deleted/superseded MAP rows.", "Consumers call current-map; they do not locally branch on GrowthMeasureYN or sort NWEA sittings." ]
invalidExamples
[ "A GOALS app choosing between MAP rows locally.", "Using alpha.map_score highest-RIT term test_of_record where the product asks for latest active Growth MAP.", "Returning a deleted or superseded screener as current MAP when an active Growth MAP exists." ]
example
{
"student_id": "stu_timeback_10017",
"subject_id": "math",
"rit": 210,
"percentile": 74,
"growth_measure_yn": "Y",
"current_map_reason": "latest_growth"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (26)
map_current_score_id
- anchor
- field-alpha-map-current-score-map-current-score-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this current-MAP view row.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one map current score row within a tenant; downstream Results rows reference this value by its named id field.
- example
- map_10017_math_spring_current_2025
- invalidWhen
- Invalid when map_current_score_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Unique within tenant.", "Includes the selected source row and norms set." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}tenant_id
- anchor
- field-alpha-map-current-score-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-map-current-score-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}student_email
- anchor
- field-alpha-map-current-score-student-email
- type
- CITEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Student email shown for teacher/parent lookup convenience. It is not a stable key and cannot replace student_id.
- range
- Case-insensitive text within documented constraints.
- relationship
- Joined from People & Orgs for display and lookup; not a Results-owned foreign key.
- example
- alex.rivera@example.edu
- invalidWhen
- Invalid when student_email is used as the sole reconciliation key, returned without authorization, or stored where the row requires stable student_id.
- edgeCases
- Email can change and may be hidden by scope; join it for lookup/display, but never use it as the durable key.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Contact
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Nullable because not every authorized read returns email.", "Case-insensitive email format when present.", "Must never be used as the sole reconciliation key." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-map-current-score-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map current score is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-map-current-score-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}term_season
- anchor
- field-alpha-map-current-score-term-season
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Canonical term season for the selected current MAP row.
- range
- One documented enum value.
- relationship
- Governed value on map current score; no free-text relationship, and consumers must use the documented enum values.
- example
- spring
- invalidWhen
- Invalid when term_season is not one of fall, winter, spring, summer, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map current score is written; adding a new term_season value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be one documented value.", "Resolved at import/projection time." ]
allowedValues
[
{
"value": "fall",
"meaning": "Fall term.",
"useWhen": "Fall term.",
"invalidWhen": "Invalid when fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter",
"meaning": "Winter term.",
"useWhen": "Winter term.",
"invalidWhen": "Invalid when winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring",
"meaning": "Spring term.",
"useWhen": "Spring term.",
"invalidWhen": "Invalid when spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "summer",
"meaning": "Summer term.",
"useWhen": "Summer term.",
"invalidWhen": "Invalid when summer does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}school_year
- anchor
- field-alpha-map-current-score-school-year
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Canonical school year for the selected current MAP row.
- range
- Text within documented constraints.
- relationship
- Attribute on map current score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for school_year.
- example
- 2025-26
- invalidWhen
- Invalid when school_year is missing, violates its documented constraints: Format YYYY-YY or the tenant's canonical school-year format.; Set by term resolver, not regex in consumers..
- edgeCases
- school_year follows the map current score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Format YYYY-YY or the tenant's canonical school-year format.", "Set by term resolver, not regex in consumers." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}nwea_account_id
- anchor
- field-alpha-map-current-score-nwea-account-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- NWEA district/account id read through the People & Orgs district org boundary.
- range
- Text within documented constraints.
- relationship
- References the OneRoster org tree through People & Orgs.
- example
- NWEA-ALPHA-PHYSICAL
- invalidWhen
- Invalid when nwea_account_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must come from parent org alpha.org.nwea_district_id.", "Results must not create another NWEA account source of truth." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}brand
- anchor
- field-alpha-map-current-score-brand
- type
- TEXT
- nullability
- Required joined read field.
- key
- Not a key
- meaning
- Brand cohort tag joined from People & Orgs for reports.
- range
- Text within documented constraints.
- relationship
- Attribute on map current score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for brand.
- example
- Alpha
- invalidWhen
- Invalid when brand is missing, violates its documented constraints: Locked registry tag at nwea_account grain.; Do not duplicate as Results-owned source of truth..
- edgeCases
- brand follows the map current score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Locked registry tag at nwea_account grain.", "Do not duplicate as Results-owned source of truth." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}modality
- anchor
- field-alpha-map-current-score-modality
- type
- TEXT enum
- nullability
- Required joined read field.
- key
- Not a key
- meaning
- Physical or virtual NWEA account boundary.
- range
- One documented enum value.
- relationship
- Governed value on map current score; no free-text relationship, and consumers must use the documented enum values.
- example
- physical
- invalidWhen
- Invalid when modality is not one of physical, virtual, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map current score is written; adding a new modality value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be physical or virtual.", "No hybrid value." ]
allowedValues
[
{
"value": "physical",
"meaning": "Student belongs to the physical-school NWEA account boundary.",
"useWhen": "Student belongs to the physical-school NWEA account boundary.",
"invalidWhen": "Invalid when physical does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "virtual",
"meaning": "Student belongs to the virtual-school NWEA account boundary.",
"useWhen": "Student belongs to the virtual-school NWEA account boundary.",
"invalidWhen": "Invalid when virtual does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}level
- anchor
- field-alpha-map-current-score-level
- type
- TEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- School-level/cohort label joined from People & Orgs for GOALS context.
- range
- Text within documented constraints.
- relationship
- Attribute on map current score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for level.
- example
- middle
- invalidWhen
- Invalid when level violates its documented constraints: Governed People & Orgs value.; Not a Results-owned tag..
- edgeCases
- level follows the map current score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Governed People & Orgs value.", "Not a Results-owned tag." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}age_grade
- anchor
- field-alpha-map-current-score-age-grade
- type
- TEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Age-grade cohort dimension joined for context.
- range
- Text within documented constraints.
- relationship
- Attribute on map current score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for age_grade.
- example
- 06
- invalidWhen
- Invalid when age_grade violates its documented constraints: Governed People & Orgs value.; Not parsed from MAP test name..
- edgeCases
- age_grade follows the map current score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Governed People & Orgs value.", "Not parsed from MAP test name." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}tenure_bucket
- anchor
- field-alpha-map-current-score-tenure-bucket
- type
- TEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Student tenure bucket computed from admission_date and alpha.policy.tenure_buckets.
- range
- Text within documented constraints.
- relationship
- Attribute on map current score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for tenure_bucket.
- example
- 1-2
- invalidWhen
- Invalid when tenure_bucket violates its documented constraints: Must be computed by the surface.; No dashboard hardcoding of band edges..
- edgeCases
- tenure_bucket follows the map current score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be computed by the surface.", "No dashboard hardcoding of band edges." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}norms_set
- anchor
- field-alpha-map-current-score-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map current score is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}rit
- anchor
- field-alpha-map-current-score-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Selected current MAP RIT score.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map current score; it feeds documented calculations or reports but does not identify another object.
- example
- 210
- invalidWhen
- Invalid when rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- nweamap.assessment_result_projection.test_rit_score
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "100 through 350 when present.", "Selected by latest-growth-first policy, not highest-RIT test_of_record." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}standard_error
- anchor
- field-alpha-map-current-score-standard-error
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- MAP test standard error for the selected row.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map current score; it feeds documented calculations or reports but does not identify another object.
- example
- 3.20
- invalidWhen
- Invalid when standard_error is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Non-negative when present..
- upstreamSource
- AssessmentResults.TestStandardError
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Non-negative when present." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}percentile
- anchor
- field-alpha-map-current-score-percentile
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- MAP percentile for the selected current MAP row and norms set.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map current score; it feeds documented calculations or reports but does not identify another object.
- example
- 74
- invalidWhen
- Invalid when percentile is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Percentile 99 is a ceiling; use alpha.map_99_level fields for above-ceiling growth instead of treating 99 as fully discriminating.
- upstreamSource
- AssessmentResults.TestPercentile
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 through 99 when present.", "Norms set is explicit on the row." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}achievement_quintile
- anchor
- field-alpha-map-current-score-achievement-quintile
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- NWEA achievement quintile when available.
- range
- Text within documented constraints.
- relationship
- Attribute on map current score; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for achievement_quintile.
- example
- High
- invalidWhen
- Invalid when achievement_quintile violates its documented constraints: Preserve exported value within NWEA constraints..
- edgeCases
- achievement_quintile follows the map current score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- AssessmentResults.AchievementQuintile
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Preserve exported value within NWEA constraints." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}growth_measure_yn
- anchor
- field-alpha-map-current-score-growth-measure-yn
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Whether the selected MAP row is a Growth MAP measurement.
- range
- One documented enum value.
- relationship
- Governed value on map current score; no free-text relationship, and consumers must use the documented enum values.
- example
- Y
- invalidWhen
- Invalid when growth_measure_yn is not one of Y, N, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map current score is written; adding a new growth_measure_yn value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Y rows win over non-Y rows.", "N or null is allowed only as screener/non-growth fallback when no active Growth MAP exists." ]
allowedValues
[
{
"value": "Y",
"meaning": "Growth MAP row; preferred for current MAP.",
"useWhen": "Growth MAP row; preferred for current MAP.",
"invalidWhen": "Invalid when Y does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "N",
"meaning": "Non-growth or screener row; fallback only.",
"useWhen": "Non-growth or screener row; fallback only.",
"invalidWhen": "Invalid when N does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}current_map_reason
- anchor
- field-alpha-map-current-score-current-map-reason
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Why this row is the current MAP context.
- range
- One documented enum value.
- relationship
- Governed value on map current score; no free-text relationship, and consumers must use the documented enum values.
- example
- latest_growth
- invalidWhen
- Invalid when current_map_reason is not one of latest_growth, latest_screener_fallback, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map current score is written; adding a new current_map_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be one documented value.", "latest_growth wins over latest_screener_fallback." ]
allowedValues
[
{
"value": "latest_growth",
"meaning": "Selected because it is the latest active Growth MAP row.",
"useWhen": "Selected because it is the latest active Growth MAP row.",
"invalidWhen": "Invalid when latest_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "latest_screener_fallback",
"meaning": "Selected because no active Growth MAP row exists, so the latest active non-growth/screener row is used.",
"useWhen": "Selected because no active Growth MAP row exists, so the latest active non-growth/screener row is used.",
"invalidWhen": "Invalid when latest_screener_fallback does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}test_id
- anchor
- field-alpha-map-current-score-test-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Source test id for the selected current MAP row.
- range
- Text within documented constraints.
- relationship
- References test in the same tenant when present; many map current score rows may point to one referenced test.
- example
- nwea_math_6plus
- invalidWhen
- Invalid when test_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Audit/context field only.", "Do not parse it for subject, grade, or current-map selection." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}test_start_at
- anchor
- field-alpha-map-current-score-test-start-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Parsed timestamp for the selected current MAP sitting.
- range
- UTC timestamp.
- relationship
- Time value on map current score; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-05-28T13:00:00Z
- invalidWhen
- Invalid when test_start_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- AssessmentResults.TestStartDate + TestStartTime
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "UTC when parseable.", "Used by the surface policy to pick the latest row." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}source_projection_id
- anchor
- field-alpha-map-current-score-source-projection-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- NWEAMap assessment_result_projection row that produced this current MAP context.
- range
- Text within documented constraints.
- relationship
- References one NWEAMap projection row.
- example
- projection_map_10017_math_spring
- invalidWhen
- Invalid when source_projection_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference NWEAMap projection evidence." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}policy_ref
- anchor
- field-alpha-map-current-score-policy-ref
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Named current-MAP selection policy.
- range
- Text within documented constraints.
- relationship
- References the Results current-map policy.
- example
- alpha.policy.results.current_map.v2026-06-17.latest-growth-first
- invalidWhen
- Invalid when policy_ref is missing, violates its documented constraints: Must equal a versioned latest-growth-first policy.; Changing this policy creates a new documented selection rule..
- edgeCases
- policy_ref follows the map current score lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must equal a versioned latest-growth-first policy.", "Changing this policy creates a new documented selection rule." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}modified_at
- anchor
- field-alpha-map-current-score-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on map current score; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.map_sitting · MAP sitting
- kind
- SQL view
- moduleHome
- Results
- changeType
- RENAME + RESTRICT
- upstream
- nweamap.raw_assessment_results with sittingScope=all
- purpose
- Authorized audit view of all MAP sittings, including retakes and soft-deleted rows. Ordinary consumers use map_score.
- lifecycle
- Created by NWEAMap import/projection. Soft-deleted when later exports stop sending a row; never hard-deleted in normal retention.
- primaryKey
- (tenant_id, map_sitting_id)
- storage
- Authorized SQL view over NWEAMap base rows; no Alpha storage.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-map-sitting
- fieldCount
- 16
itds
[
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]relationships
[ "Belongs to one student.", "References raw NWEAMap row evidence." ]
constraints
[ "sittingScope=all is explicit.", "Deleted rows are excluded from map_score test_of_record.", "Raw NWEA columns remain source evidence, not public report fields." ]
invalidExamples
[ "A client dedupes all sittings to choose current MAP score.", "A soft-deleted sitting returned in ordinary map_score reads." ]
example
{
"map_sitting_id": "sit_1110000001",
"rit": 238,
"is_test_of_record": true,
"test_of_record_reason": "highest_rit"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (16)
map_sitting_id
- anchor
- field-alpha-map-sitting-map-sitting-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for one MAP sitting audit row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one map sitting row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000801
- invalidWhen
- Invalid when map_sitting_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- nweamap.raw_assessment_results
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}tenant_id
- anchor
- field-alpha-map-sitting-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-map-sitting-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-map-sitting-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map sitting is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-map-sitting-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}test_id
- anchor
- field-alpha-map-sitting-test-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- NWEA TestID for this sitting.
- range
- Text within documented constraints.
- relationship
- References test in the same tenant when present; many map sitting rows may point to one referenced test.
- example
- 1110000001
- invalidWhen
- Invalid when test_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- AssessmentResults.TestID
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for deterministic tie-break and audit." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}test_start_at
- anchor
- field-alpha-map-sitting-test-start-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Parsed sitting start timestamp.
- range
- UTC timestamp.
- relationship
- Time value on map sitting; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-05-04T14:00:00Z
- invalidWhen
- Invalid when test_start_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- AssessmentResults.TestStartDate + TestStartTime
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "UTC when parseable." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}rit
- anchor
- field-alpha-map-sitting-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- MAP RIT score for this sitting.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map sitting; it feeds documented calculations or reports but does not identify another object.
- example
- 238
- invalidWhen
- Invalid when rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- AssessmentResults.TestRITScore
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Eligible for test_of_record only when numeric 100 through 350." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}percentile
- anchor
- field-alpha-map-sitting-percentile
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- MAP percentile for this sitting.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map sitting; it feeds documented calculations or reports but does not identify another object.
- example
- 94
- invalidWhen
- Invalid when percentile is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Percentile 99 is a ceiling; use alpha.map_99_level fields for above-ceiling growth instead of treating 99 as fully discriminating.
- upstreamSource
- AssessmentResults.TestPercentile
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 through 99 when present." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}growth_measure_yn
- anchor
- field-alpha-map-sitting-growth-measure-yn
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- NWEA GrowthMeasureYN flag retained for comparison and audit.
- range
- Text within documented constraints.
- relationship
- Attribute on map sitting; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for growth_measure_yn.
- example
- TRUE
- invalidWhen
- Invalid when growth_measure_yn violates its documented constraints: Preserve TRUE/FALSE/blank.; Does not override highest-RIT test_of_record..
- edgeCases
- growth_measure_yn follows the map sitting lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- AssessmentResults.GrowthMeasureYN
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Preserve TRUE/FALSE/blank.", "Does not override highest-RIT test_of_record." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}is_test_of_record
- anchor
- field-alpha-map-sitting-is-test-of-record
- type
- BOOLEAN
- nullability
- Required.
- key
- Not a key
- meaning
- Whether this sitting is the selected test_of_record.
- range
- true or false.
- relationship
- Boolean row state on map sitting; scoped to this row and not a join target.
- example
- true
- invalidWhen
- Invalid when is_test_of_record is null, is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- is_test_of_record follows the map sitting lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- nweamap.raw_assessment_results
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "At most one true row per tenant/account/student/subject/term.", "False when deleted or invalid RIT." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}test_of_record_reason
- anchor
- field-alpha-map-sitting-test-of-record-reason
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Reason this sitting was selected or excluded.
- range
- One documented enum value.
- relationship
- Governed value on map sitting; no free-text relationship, and consumers must use the documented enum values.
- example
- highest_rit
- invalidWhen
- Invalid when test_of_record_reason is not one of highest_rit, latest_start_time_tiebreak, test_id_tiebreak, ineligible_invalid_rit, ineligible_deleted, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map sitting is written; adding a new test_of_record_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- nweamap.raw_assessment_results
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "highest_rit",
"meaning": "Selected because it has the highest valid RIT in the student/subject/term group.",
"useWhen": "Selected because it has the highest valid RIT in the student/subject/term group.",
"invalidWhen": "Invalid when highest_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "latest_start_time_tiebreak",
"meaning": "Selected after a RIT tie by later test start time.",
"useWhen": "Selected after a RIT tie by later test start time.",
"invalidWhen": "Invalid when latest_start_time_tiebreak does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "test_id_tiebreak",
"meaning": "Selected after a start-time tie by deterministic TestID ordering.",
"useWhen": "Selected after a start-time tie by deterministic TestID ordering.",
"invalidWhen": "Invalid when test_id_tiebreak does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "ineligible_invalid_rit",
"meaning": "Excluded because RIT is missing, nonnumeric, or outside 100 through 350.",
"useWhen": "Excluded because RIT is missing, nonnumeric, or outside 100 through 350.",
"invalidWhen": "Invalid when ineligible_invalid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "ineligible_deleted",
"meaning": "Excluded because the sitting is soft-deleted.",
"useWhen": "Excluded because the sitting is soft-deleted.",
"invalidWhen": "Invalid when ineligible_deleted does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}source_evidence
- anchor
- field-alpha-map-sitting-source-evidence
- type
- JSONB
- nullability
- Returned only for sittingScope=all with ordinary read authority plus the exact results:audit scope.
- key
- Not a key
- meaning
- Structured NWEA source references limited to string-or-null nwea_row_hash and nweamap_raw_row_id keys.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on map sitting; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"nweamap_raw_row_id":"018f..."}
- invalidWhen
- Invalid when source_evidence is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- nweamap.raw_assessment_results
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be a JSON object containing only nwea_row_hash and nweamap_raw_row_id string-or-null keys.", "Must not include secrets.", "Other raw NWEA fields remain in the NWEAMap 1EdTech surface and are not projected by Results." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}deleted_at
- anchor
- field-alpha-map-sitting-deleted-at
- type
- TIMESTAMPTZ
- nullability
- Nullable in the backing view; returned only for sittingScope=all with ordinary read authority plus the exact results:audit scope.
- key
- Not a key
- meaning
- Soft-delete timestamp. Null means active; non-null rows stay available for authorized audit reads and are excluded from ordinary current reports.
- range
- UTC timestamp.
- relationship
- Time value on map sitting; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when deleted_at is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- nweamap.assessment_result_projection.deleted_at
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Never hard-delete audit-significant Results rows.", "Non-null values must be UTC.", "Legal erasure flows are separate privacy workflows." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}delete_reason
- anchor
- field-alpha-map-sitting-delete-reason
- type
- TEXT enum
- nullability
- Nullable in the backing view; returned only for sittingScope=all with ordinary read authority plus the exact results:audit scope.
- key
- Not a key
- meaning
- Why a sitting was soft-deleted.
- range
- One documented enum value.
- relationship
- Governed value on map sitting; no free-text relationship, and consumers must use the documented enum values.
- example
- retake_superseded
- invalidWhen
- Invalid when delete_reason is not one of missing_from_replacement_export, retake_superseded, invalidated_or_suppressed_by_nwea, unknown, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map sitting is written; adding a new delete_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- nweamap.raw_assessment_results
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required when deleted_at is non-null when inferable." ]
allowedValues
[
{
"value": "missing_from_replacement_export",
"meaning": "A later authoritative export stopped sending the row.",
"useWhen": "A later authoritative export stopped sending the row.",
"invalidWhen": "Invalid when missing_from_replacement_export does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "retake_superseded",
"meaning": "Import evidence indicates the row was replaced by a retake.",
"useWhen": "Import evidence indicates the row was replaced by a retake.",
"invalidWhen": "Invalid when retake_superseded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "invalidated_or_suppressed_by_nwea",
"meaning": "Import evidence indicates NWEA invalidated or suppressed the sitting.",
"useWhen": "Import evidence indicates NWEA invalidated or suppressed the sitting.",
"invalidWhen": "Invalid when invalidated_or_suppressed_by_nwea does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "unknown",
"meaning": "The row disappeared but the surface cannot infer the specific reason.",
"useWhen": "The row disappeared but the surface cannot infer the specific reason.",
"invalidWhen": "Invalid when unknown does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}modified_at
- anchor
- field-alpha-map-sitting-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Sort/filter key
- meaning
- UTC timestamp when this Results row or projection last changed. Powers modifiedSince polling.
- range
- UTC timestamp.
- relationship
- Time value on map sitting; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when modified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Results API axis
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Query model and poll-only eventing require modifiedSince fields.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must be UTC.", "Must be monotonic for a row version.", "Used by poll-based eventing because webhooks are deferred." ]
allowedValues
[]
provenance
{
"label": "API axis",
"changeType": "EXTEND",
"basis": "Query model and poll-only eventing require modifiedSince fields.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}alpha.map_goal_strand · MAP goal strand
- kind
- SQL view
- moduleHome
- Results
- changeType
- RENAME + RESTRICT + EXTEND
- upstream
- NWEA Goal1Name..Goal5Adjective fields; Goal6..Goal8 remain audit evidence until a later ITD expands the public contract.
- purpose
- One row per student, subject, term, and goal strand with strand RIT, standard error, range, adjective, and goal_gap.
- lifecycle
- Generated from the selected MAP score/projection when goal slots are present.
- primaryKey
- (tenant_id, student_id, subject_id, canonical_term_id, norms_set, goal_strand)
- storage
- SQL view-derived row shape; goal_gap is view-derived, and no Alpha table stores GoalN fields.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-map-goal-strand
- fieldCount
- 14
itds
[
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
}
]relationships
[ "Belongs to one student and one MAP score." ]
constraints
[ "Public Alpha exposes slots 1 through 5 per approved architecture.", "goal_gap equals strand_rit - overall_rit and is surface-computed." ]
invalidExamples
[ "Client unpivots Goal1..Goal5 columns itself.", "Goal6..Goal8 silently added to public Alpha without a new ITD." ]
example
{
"goal_strand": "Algebraic Thinking",
"strand_rit": 242,
"overall_rit": 238,
"goal_gap": 4
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (14)
map_goal_strand_id
- anchor
- field-alpha-map-goal-strand-map-goal-strand-id
- type
- UUID
- nullability
- Required.
- key
- Primary key
- meaning
- Stable id for this goal-strand row.
- range
- PostgreSQL UUID.
- relationship
- Primary identifier for one map goal strand row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000901
- invalidWhen
- Invalid when map_goal_strand_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- NWEA GoalN fields plus Results view-derived goal_gap
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Unique within tenant." ]
allowedValues
[]
provenance
{
"label": "MAP goal-strand view",
"changeType": "RENAME + RESTRICT + EXTEND",
"basis": "NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.",
"upstream": "NWEA GoalN fields plus Results view-derived goal_gap",
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}tenant_id
- anchor
- field-alpha-map-goal-strand-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-map-goal-strand-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-map-goal-strand-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map goal strand is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-map-goal-strand-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-map-goal-strand-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map goal strand is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}goal_slot
- anchor
- field-alpha-map-goal-strand-goal-slot
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Original NWEA goal slot number represented by this row.
- range
- 1 through 5
- relationship
- Numeric value on map goal strand; it feeds documented calculations or reports but does not identify another object.
- example
- 1
- invalidWhen
- Invalid when goal_slot is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 1 through 5 inclusive for public Alpha.; 6 through 8 remain audit-only until architecture changes..
- upstreamSource
- AssessmentResults.Goal1..Goal5 fields
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "1 through 5 inclusive for public Alpha.", "6 through 8 remain audit-only until architecture changes." ]
allowedValues
[]
provenance
{
"label": "MAP goal-strand view",
"changeType": "RENAME + RESTRICT + EXTEND",
"basis": "NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.",
"upstream": "NWEA GoalN fields plus Results view-derived goal_gap",
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}goal_strand
- anchor
- field-alpha-map-goal-strand-goal-strand
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Plain strand name from NWEA goal name.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one map goal strand row within a tenant; downstream Results rows reference this value by its named id field.
- example
- Algebraic Thinking
- invalidWhen
- Invalid when goal_strand is missing, violates its documented constraints: 1 to 255 visible characters.; Do not parse it for subject or grade..
- edgeCases
- goal_strand follows the map goal strand lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- AssessmentResults.GoalNName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "1 to 255 visible characters.", "Do not parse it for subject or grade." ]
allowedValues
[]
provenance
{
"label": "MAP goal-strand view",
"changeType": "RENAME + RESTRICT + EXTEND",
"basis": "NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.",
"upstream": "NWEA GoalN fields plus Results view-derived goal_gap",
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}strand_rit
- anchor
- field-alpha-map-goal-strand-strand-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- RIT score for this goal strand.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map goal strand; it feeds documented calculations or reports but does not identify another object.
- example
- 242
- invalidWhen
- Invalid when strand_rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- AssessmentResults.GoalNRitScore
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "100 through 350 when present." ]
allowedValues
[]
provenance
{
"label": "MAP goal-strand view",
"changeType": "RENAME + RESTRICT + EXTEND",
"basis": "NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.",
"upstream": "NWEA GoalN fields plus Results view-derived goal_gap",
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}strand_standard_error
- anchor
- field-alpha-map-goal-strand-strand-standard-error
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Standard error for the strand RIT.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map goal strand; it feeds documented calculations or reports but does not identify another object.
- example
- 4.10
- invalidWhen
- Invalid when strand_standard_error is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Non-negative when present..
- upstreamSource
- AssessmentResults.GoalNStdErr
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Non-negative when present." ]
allowedValues
[]
provenance
{
"label": "MAP goal-strand view",
"changeType": "RENAME + RESTRICT + EXTEND",
"basis": "NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.",
"upstream": "NWEA GoalN fields plus Results view-derived goal_gap",
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}strand_range
- anchor
- field-alpha-map-goal-strand-strand-range
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- NWEA range text for this strand.
- range
- Text within documented constraints.
- relationship
- Attribute on map goal strand; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for strand_range.
- example
- 238-246
- invalidWhen
- Invalid when strand_range violates its documented constraints: Preserve NWEA text.; Do not parse for calculations..
- edgeCases
- strand_range follows the map goal strand lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- AssessmentResults.GoalNRange
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Preserve NWEA text.", "Do not parse for calculations." ]
allowedValues
[]
provenance
{
"label": "MAP goal-strand view",
"changeType": "RENAME + RESTRICT + EXTEND",
"basis": "NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.",
"upstream": "NWEA GoalN fields plus Results view-derived goal_gap",
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}strand_adjective
- anchor
- field-alpha-map-goal-strand-strand-adjective
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- NWEA adjective describing strand performance.
- range
- Text within documented constraints.
- relationship
- Attribute on map goal strand; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for strand_adjective.
- example
- High
- invalidWhen
- Invalid when strand_adjective violates its documented constraints: Preserve exported value; do not use as numeric score..
- edgeCases
- strand_adjective follows the map goal strand lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- AssessmentResults.GoalNAdjective
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Preserve exported value; do not use as numeric score." ]
allowedValues
[]
provenance
{
"label": "MAP goal-strand view",
"changeType": "RENAME + RESTRICT + EXTEND",
"basis": "NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.",
"upstream": "NWEA GoalN fields plus Results view-derived goal_gap",
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}overall_rit
- anchor
- field-alpha-map-goal-strand-overall-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Overall test RIT used to compute goal_gap.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map goal strand; it feeds documented calculations or reports but does not identify another object.
- example
- 238
- invalidWhen
- Invalid when overall_rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- alpha.map_score.rit view column
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must equal selected MAP score rit for the same row." ]
allowedValues
[]
provenance
{
"label": "MAP goal-strand view",
"changeType": "RENAME + RESTRICT + EXTEND",
"basis": "NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.",
"upstream": "NWEA GoalN fields plus Results view-derived goal_gap",
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}goal_gap
- anchor
- field-alpha-map-goal-strand-goal-gap
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Surface-computed strand_rit minus overall_rit.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map goal strand; it feeds documented calculations or reports but does not identify another object.
- example
- 4
- invalidWhen
- Invalid when goal_gap is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Computed by Results.; Null when either input is null..
- upstreamSource
- Results SQL view expression
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Computed by Results.", "Null when either input is null." ]
allowedValues
[]
provenance
{
"label": "MAP goal-strand view",
"changeType": "RENAME + RESTRICT + EXTEND",
"basis": "NWEA positional goal fields are unpivoted into clean strand rows with view-derived goal_gap.",
"upstream": "NWEA GoalN fields plus Results view-derived goal_gap",
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}alpha.map_growth_window · MAP growth window
- kind
- Public view + extension storage
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- NWEA observed/projected/typical growth-window fields plus Alpha Growth X.
- purpose
- One typed growth-window row carrying observed growth, projected/typical growth, Growth X, 2X target, and target flags.
- lifecycle
- Generated whenever MAP scores and NWEA growth fields are available for a term/window/norms set.
- primaryKey
- (tenant_id, student_id, subject_id, canonical_term_id, growth_window, norms_set)
- storage
- Extension table stores Growth X/target/null reason/config version only; projected/observed source values remain base view columns.
- writePath
- Read through the public Alpha view; base scalar values stay projected from the approved source view, and only Alpha-owned calculator fields write extension storage.
- anchor
- table-alpha-map-growth-window
- fieldCount
- 14
itds
[
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]relationships
[ "Belongs to one student.", "Usually references current and prior MAP score rows." ]
constraints
[ "growth_x equals observed_growth / projected_growth when projected_growth is nonzero.", "Consumers never switch over NWEA growth column names." ]
invalidExamples
[ "A skill pack with FallToSpring column switch statements.", "A Growth X row with no norms_set." ]
example
{
"growth_window": "fall_to_spring",
"observed_growth": 14,
"projected_growth": 7,
"growth_x": 2
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (14)
tenant_id
- anchor
- field-alpha-map-growth-window-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-map-growth-window-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-map-growth-window-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map growth window is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-map-growth-window-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-map-growth-window-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map growth window is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}growth_window
- anchor
- field-alpha-map-growth-window-growth-window
- type
- TEXT enum
- nullability
- Required.
- key
- Primary key part
- meaning
- Typed growth window.
- range
- One documented enum value.
- relationship
- Governed growth-window selector for this row. It replaces NWEA positional growth columns.
- example
- fall_to_spring
- invalidWhen
- Invalid when growth_window is not one of fall_to_fall, fall_to_winter, fall_to_spring, winter_to_winter, winter_to_spring, spring_to_spring, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map growth window is written; adding a new growth_window value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be one documented value.", "Not derived by client column switching." ]
allowedValues
[
{
"value": "fall_to_fall",
"meaning": "Growth measured from Fall to next Fall.",
"useWhen": "Growth measured from Fall to next Fall.",
"invalidWhen": "Invalid when fall_to_fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_winter",
"meaning": "Growth measured from Fall to Winter.",
"useWhen": "Growth measured from Fall to Winter.",
"invalidWhen": "Invalid when fall_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_spring",
"meaning": "Growth measured from Fall to Spring.",
"useWhen": "Growth measured from Fall to Spring.",
"invalidWhen": "Invalid when fall_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_winter",
"meaning": "Growth measured from Winter to next Winter.",
"useWhen": "Growth measured from Winter to next Winter.",
"invalidWhen": "Invalid when winter_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_spring",
"meaning": "Growth measured from Winter to Spring.",
"useWhen": "Growth measured from Winter to Spring.",
"invalidWhen": "Invalid when winter_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring_to_spring",
"meaning": "Growth measured from Spring to next Spring.",
"useWhen": "Growth measured from Spring to next Spring.",
"invalidWhen": "Invalid when spring_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}observed_growth
- anchor
- field-alpha-map-growth-window-observed-growth
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- NWEA observed growth for the window.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map growth window; it feeds documented calculations or reports but does not identify another object.
- example
- 14.00
- invalidWhen
- Invalid when observed_growth is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be null when no prior/future score exists..
- upstreamSource
- AssessmentResults.*ObservedGrowth
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Public view scalar projected from the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "May be null when no prior/future score exists." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}projected_growth
- anchor
- field-alpha-map-growth-window-projected-growth
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- NWEA projected growth for the window under norms_set.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map growth window; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when projected_growth is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must not mix 2020 and 2025 norms.; May be null if NWEA does not publish the projection..
- upstreamSource
- AssessmentResults.*ProjectedGrowth
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Public view scalar projected from the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must not mix 2020 and 2025 norms.", "May be null if NWEA does not publish the projection." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}typical_growth
- anchor
- field-alpha-map-growth-window-typical-growth
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Typical growth value for the window and norms set.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map growth window; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when typical_growth is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must carry norms_set.; May be null when not published..
- upstreamSource
- AssessmentResults.Typical*Growth
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Public view scalar projected from the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must carry norms_set.", "May be null when not published." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}growth_x
- anchor
- field-alpha-map-growth-window-growth-x
- type
- NUMERIC(8,4)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Observed growth divided by projected growth.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map growth window; it feeds documented calculations or reports but does not identify another object.
- example
- 2.0000
- invalidWhen
- Invalid when growth_x is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Computed by Results.", "Null when projected_growth is null or zero." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}growth_x_target
- anchor
- field-alpha-map-growth-window-growth-x-target
- type
- NUMERIC(8,4)
- nullability
- Required.
- key
- Not a key
- meaning
- Configured Growth X target for this row.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map growth window; it feeds documented calculations or reports but does not identify another object.
- example
- 2.0000
- invalidWhen
- Invalid when growth_x_target is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Default comes from alpha.policy.growth_x_target, currently 2.0.", "Policy changes require config version change." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}on_track_for_growth_x_target
- anchor
- field-alpha-map-growth-window-on-track-for-growth-x-target
- type
- BOOLEAN
- nullability
- Nullable.
- key
- Not a key
- meaning
- Whether current/projected evidence is on track for target Growth X.
- range
- true or false.
- relationship
- Boolean row state on map growth window; scoped to this row and not a join target.
- example
- true
- invalidWhen
- Invalid when on_track_for_growth_x_target is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Computed by Results.", "Null when required inputs are missing." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}projected_gap
- anchor
- field-alpha-map-growth-window-projected-gap
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Projected growth points above or below the Growth X target.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map growth window; it feeds documented calculations or reports but does not identify another object.
- example
- 0.00
- invalidWhen
- Invalid when projected_gap is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Computed by Results.; Positive means above target..
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Computed by Results.", "Positive means above target." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}null_reason
- anchor
- field-alpha-map-growth-window-null-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Why growth_x or target fields are null.
- range
- One documented enum value.
- relationship
- Governed value on map growth window; no free-text relationship, and consumers must use the documented enum values.
- example
- no_projected_growth
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map growth window is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Required when growth_x is null." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}alpha.map_normed_result · Normed MAP result
- kind
- SQL view
- moduleHome
- Results
- changeType
- RESTRICT
- upstream
- NWEA NormsReferenceData and growth fields.
- purpose
- One MAP observation or calculator output bound to exactly one norms set so reports can flip 2020/2025 safely.
- lifecycle
- Generated with MAP score/calculator outputs; never mixes norms inside a row.
- primaryKey
- (tenant_id, map_score_id, norms_set)
- storage
- SQL view/restriction; approved norms_set values are typed and not copied as source storage.
- writePath
- Read from an Alpha SQL view over the approved 1EdTech base; writes route to the source surface.
- anchor
- table-alpha-map-normed-result
- fieldCount
- 7
itds
[
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]relationships
[ "Belongs to one map_score." ]
constraints
[ "norms_set is required.", "No norms lookup tables in clients or skill packs." ]
invalidExamples
[ "A row with 2020 percentile and 2025 projected growth.", "A skill pack carrying norms tables." ]
example
{
"norms_set": "2025",
"percentile": 94,
"achievement_quintile": "High"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (7)
tenant_id
- anchor
- field-alpha-map-normed-result-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}map_score_id
- anchor
- field-alpha-map-normed-result-map-score-id
- type
- UUID
- nullability
- Required.
- key
- Primary key part
- meaning
- MAP score this normed output belongs to.
- range
- PostgreSQL UUID.
- relationship
- Many normed outputs can belong to one MAP score.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000701
- invalidWhen
- Invalid when map_score_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must reference alpha.map_score." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}norms_set
- anchor
- field-alpha-map-normed-result-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map normed result is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}percentile
- anchor
- field-alpha-map-normed-result-percentile
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Percentile under this norms set.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map normed result; it feeds documented calculations or reports but does not identify another object.
- example
- 94
- invalidWhen
- Invalid when percentile is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Percentile 99 is a ceiling; use alpha.map_99_level fields for above-ceiling growth instead of treating 99 as fully discriminating.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "0 through 99 when present." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}achievement_quintile
- anchor
- field-alpha-map-normed-result-achievement-quintile
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Achievement quintile under this norms set.
- range
- Text within documented constraints.
- relationship
- Attribute on map normed result; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for achievement_quintile.
- example
- High
- invalidWhen
- Invalid when achievement_quintile violates its documented constraints: Preserve NWEA value when supplied.; Do not use for 99-level calculation..
- edgeCases
- achievement_quintile follows the map normed result lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Preserve NWEA value when supplied.", "Do not use for 99-level calculation." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}norms_source
- anchor
- field-alpha-map-normed-result-norms-source
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Source family for this normed output.
- range
- Text within documented constraints.
- relationship
- Attribute on map normed result; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for norms_source.
- example
- nwea_cdf
- invalidWhen
- Invalid when norms_source is missing, violates its documented constraints: Must state whether the value came from NWEA export or Alpha calculator..
- edgeCases
- norms_source follows the map normed result lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Must state whether the value came from NWEA export or Alpha calculator." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}calculator_version
- anchor
- field-alpha-map-normed-result-calculator-version
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Calculator version when the value is computed by Alpha.
- range
- Text within documented constraints.
- relationship
- Attribute on map normed result; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for calculator_version.
- example
- norms_calc_2026_06
- invalidWhen
- Invalid when calculator_version violates its documented constraints: Required for Alpha-calculated outputs..
- edgeCases
- calculator_version follows the map normed result lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- SQL view field over the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Required for Alpha-calculated outputs." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.map_percentile_translation · Percentile/RIT translation
- kind
- Derived read model
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- NWEA published norms plus Alpha calculator config.
- purpose
- Surface-owned translation from percentile to RIT, or RIT to percentile, under one subject, grade, term season, and norms set. GOALS and report apps call this read model instead of carrying NWEA norms tables.
- lifecycle
- Generated from the active published-norms version and calculator_version. Recomputed when norms_set or calculator config changes; historical rows remain reproducible by version.
- primaryKey
- (tenant_id, subject_id, grade_level, term_season, norms_set, translation_direction, input_percentile, input_rit, calculator_version)
- storage
- Surface-owned calculator read model; no app-local norms table.
- writePath
- Follow the object storage rule and ITD trace before writing.
- anchor
- table-alpha-map-percentile-translation
- fieldCount
- 13
itds
[
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]relationships
[ "Reads the single surface norms/calculator registry.", "Can be joined to MAP score and GOALS inputs by subject_id, grade_level, term_season, and norms_set." ]
constraints
[ "norms_set is required.", "Exactly one of input_percentile or input_rit is populated.", "No app, dashboard, or skill pack may ship a percentile/RIT norms table.", "RIT outputs must carry source_point_kind and calculator_version." ]
invalidExamples
[ "GOALS app stores a percentile-to-RIT lookup table.", "A translation row with both input_percentile and input_rit populated.", "A calculator output with no norms_set." ]
example
{
"subject_id": "math",
"grade_level": "7",
"norms_set": "2025",
"translation_direction": "percentile_to_rit",
"input_percentile": 99,
"output_rit": 252
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (13)
tenant_id
- anchor
- field-alpha-map-percentile-translation-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}subject_id
- anchor
- field-alpha-map-percentile-translation-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map percentile translation is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}grade_level
- anchor
- field-alpha-map-percentile-translation-grade-level
- type
- NUMERIC(4,1)
- nullability
- Required.
- key
- Primary key part
- meaning
- Grade level used for the norms translation.
- range
- Decimal number within documented constraints.
- relationship
- Primary identifier for one map percentile translation row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 7.0
- invalidWhen
- Invalid when grade_level is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0.0 through 12.9 when present.; Must be the grade level expected by the active norms table/config..
- upstreamSource
- NWEA published norms plus Alpha calculator output
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "0.0 through 12.9 when present.", "Must be the grade level expected by the active norms table/config." ]
allowedValues
[]
provenance
{
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}term_season
- anchor
- field-alpha-map-percentile-translation-term-season
- type
- TEXT enum
- nullability
- Required.
- key
- Primary key part
- meaning
- MAP season used for the norms translation.
- range
- One documented enum value.
- relationship
- Primary identifier for one map percentile translation row within a tenant; downstream Results rows reference this value by its named id field.
- example
- spring
- invalidWhen
- Invalid when term_season is not one of fall, winter, spring, summer, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map percentile translation is written; adding a new term_season value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be fall, winter, spring, or summer.", "Resolved by the surface, not by app parsing." ]
allowedValues
[
{
"value": "fall",
"meaning": "Fall MAP season.",
"useWhen": "Fall MAP season.",
"invalidWhen": "Invalid when fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter",
"meaning": "Winter MAP season.",
"useWhen": "Winter MAP season.",
"invalidWhen": "Invalid when winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring",
"meaning": "Spring MAP season.",
"useWhen": "Spring MAP season.",
"invalidWhen": "Invalid when spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "summer",
"meaning": "Summer MAP season.",
"useWhen": "Summer MAP season.",
"invalidWhen": "Invalid when summer does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-map-percentile-translation-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map percentile translation is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}translation_direction
- anchor
- field-alpha-map-percentile-translation-translation-direction
- type
- TEXT enum
- nullability
- Required.
- key
- Primary key part
- meaning
- Direction of the requested surface translation.
- range
- One documented enum value.
- relationship
- Primary identifier for one map percentile translation row within a tenant; downstream Results rows reference this value by its named id field.
- example
- percentile_to_rit
- invalidWhen
- Invalid when translation_direction is not one of percentile_to_rit, rit_to_percentile, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map percentile translation is written; adding a new translation_direction value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA published norms plus Alpha calculator output
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value.", "Determines which input/output fields are required." ]
allowedValues
[
{
"value": "percentile_to_rit",
"meaning": "Input is a percentile; the surface returns the corresponding RIT under the selected norms set.",
"useWhen": "Input is a percentile; the surface returns the corresponding RIT under the selected norms set.",
"invalidWhen": "Invalid when percentile_to_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "rit_to_percentile",
"meaning": "Input is a RIT score; the surface returns the corresponding percentile under the selected norms set.",
"useWhen": "Input is a RIT score; the surface returns the corresponding percentile under the selected norms set.",
"invalidWhen": "Invalid when rit_to_percentile does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}input_percentile
- anchor
- field-alpha-map-percentile-translation-input-percentile
- type
- INTEGER
- nullability
- Nullable; required for percentile_to_rit.
- key
- Primary key part
- meaning
- Requested percentile.
- range
- Integer within documented constraints.
- relationship
- Primary identifier for one map percentile translation row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 99
- invalidWhen
- Invalid when input_percentile is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 1 through 99.; Must be null when translation_direction is rit_to_percentile..
- upstreamSource
- NWEA published norms plus Alpha calculator output
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "1 through 99.", "Must be null when translation_direction is rit_to_percentile." ]
allowedValues
[]
provenance
{
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}input_rit
- anchor
- field-alpha-map-percentile-translation-input-rit
- type
- INTEGER
- nullability
- Nullable; required for rit_to_percentile.
- key
- Primary key part
- meaning
- Requested RIT score.
- range
- Integer within documented constraints.
- relationship
- Primary identifier for one map percentile translation row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 252
- invalidWhen
- Invalid when input_rit is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- NWEA published norms plus Alpha calculator output
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "100 through 350.", "Must be null when translation_direction is percentile_to_rit." ]
allowedValues
[]
provenance
{
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}output_rit
- anchor
- field-alpha-map-percentile-translation-output-rit
- type
- INTEGER
- nullability
- Nullable; required for percentile_to_rit.
- key
- Not a key
- meaning
- Surface-returned RIT score for the requested percentile.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map percentile translation; it feeds documented calculations or reports but does not identify another object.
- example
- 252
- invalidWhen
- Invalid when output_rit is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- NWEA published norms plus Alpha calculator output
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "100 through 350.", "Computed by the surface from NWEA published norms and documented interpolation/extrapolation rules." ]
allowedValues
[]
provenance
{
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}output_percentile
- anchor
- field-alpha-map-percentile-translation-output-percentile
- type
- INTEGER
- nullability
- Nullable; required for rit_to_percentile.
- key
- Not a key
- meaning
- Surface-returned percentile for the requested RIT.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map percentile translation; it feeds documented calculations or reports but does not identify another object.
- example
- 99
- invalidWhen
- Invalid when output_percentile is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 1 through 99.; 99 remains a ceiling; use alpha.map_99_level for above-ceiling growth..
- upstreamSource
- NWEA published norms plus Alpha calculator output
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "1 through 99.", "99 remains a ceiling; use alpha.map_99_level for above-ceiling growth." ]
allowedValues
[]
provenance
{
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}source_point_kind
- anchor
- field-alpha-map-percentile-translation-source-point-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Whether this translation point is published, interpolated, extrapolated, or policy-derived.
- range
- One documented enum value.
- relationship
- Governed value on map percentile translation; no free-text relationship, and consumers must use the documented enum values.
- example
- nwea_published
- invalidWhen
- Invalid when source_point_kind is not one of nwea_published, interpolated, alpha_extrapolated, policy_derived, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map percentile translation is written; adding a new source_point_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA published norms plus Alpha calculator output
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Must be one documented value.", "NWEA-published points are preserved exactly." ]
allowedValues
[
{
"value": "nwea_published",
"meaning": "The point is directly reproduced from NWEA-published data.",
"useWhen": "The point is directly reproduced from NWEA-published data.",
"invalidWhen": "Invalid when nwea_published does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "interpolated",
"meaning": "The point is interpolated between published NWEA points.",
"useWhen": "The point is interpolated between published NWEA points.",
"invalidWhen": "Invalid when interpolated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha_extrapolated",
"meaning": "The point is an Alpha extrapolation, such as RIT90 or 99-level thresholds.",
"useWhen": "The point is an Alpha extrapolation, such as RIT90 or 99-level thresholds.",
"invalidWhen": "Invalid when alpha_extrapolated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "policy_derived",
"meaning": "The point is derived from named alpha.policy.* configuration.",
"useWhen": "The point is derived from named alpha.policy.* configuration.",
"invalidWhen": "Invalid when policy_derived does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}calculator_version
- anchor
- field-alpha-map-percentile-translation-calculator-version
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Version of the norms/calculator used.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one map percentile translation row within a tenant; downstream Results rows reference this value by its named id field.
- example
- percentile_rit_2026_06
- invalidWhen
- Invalid when calculator_version is missing, violates its documented constraints: Must reference alpha.policy_config.; Changing the norms/calculator creates a new answer version..
- edgeCases
- calculator_version follows the map percentile translation lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Must reference alpha.policy_config.", "Changing the norms/calculator creates a new answer version." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}null_reason
- anchor
- field-alpha-map-percentile-translation-null-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Why a translation output is null.
- range
- One documented enum value.
- relationship
- Governed value on map percentile translation; no free-text relationship, and consumers must use the documented enum values.
- example
- missing_policy_config
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map percentile translation is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Required when output_rit or output_percentile is null." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.map_r90_norm_point · Legacy R90 norm-point fixture
- kind
- Stored config/read table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Alpha R90/RIT90 extrapolation over NWEA-published RIT50 norms.
- purpose
- A legacy Results report fixture used for Results MAP report compatibility. It is not the GOALS grade2RIT/R90 source; GOALS RIT->grade uses the skill-seeded NWEAMAP master directly or through the Analytics mirror. Consumers never keep a local copy.
- lifecycle
- Kept for Results report compatibility while the R90 master lives in NWEAMAP. Superseded fixture versions remain readable only for historical Results answers.
- primaryKey
- (tenant_id, subject_id, grade_level, term_season, norms_set, calculator_version)
- storage
- Legacy Results MAP report fixture rows, not the GOALS grade2RIT/R90 source.
- writePath
- Follow the object storage rule and ITD trace before writing.
- anchor
- table-alpha-map-r90-norm-point
- fieldCount
- 11
itds
[
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]relationships
[ "Legacy Results report fixtures may be read beside alpha.map_percentile_translation; GOALS grade2RIT/R90 relationships point to NWEAMAP or the Analytics mirror instead." ]
constraints
[ "Do not use this table as the GOALS RIT->grade oracle.", "RIT90/R90 fixture points are Alpha extrapolations unless source_point_kind says otherwise.", "Apps and skill packs must not keep a copied R90 table." ]
invalidExamples
[ "A skill pack ships r90.json.", "A GOALS app uses alpha.map_r90_norm_point instead of NWEAMAP/Analytics R90.", "A RIT90 value presented as NWEA-published without source_point_kind evidence." ]
example
{
"subject_id": "math",
"grade_level": 7,
"norms_set": "2025",
"rit90_grade": 6.4,
"r90_rit": 231
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (11)
tenant_id
- anchor
- field-alpha-map-r90-norm-point-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}subject_id
- anchor
- field-alpha-map-r90-norm-point-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map r90 norm point is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}grade_level
- anchor
- field-alpha-map-r90-norm-point-grade-level
- type
- NUMERIC(4,1)
- nullability
- Required.
- key
- Primary key part
- meaning
- Grade level this R90 row describes.
- range
- Decimal number within documented constraints.
- relationship
- Primary identifier for one map r90 norm point row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 7.0
- invalidWhen
- Invalid when grade_level is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: 0.0 through 12.9 when present..
- upstreamSource
- Legacy Results R90 fixture rows; no app-local copy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results map_r90_norm_point rows are legacy report fixtures. GOALS grade2RIT/R90 lives in the skill-seeded NWEAMAP master and may be mirrored by Analytics.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "0.0 through 12.9 when present." ]
allowedValues
[]
provenance
{
"label": "Legacy Results R90 fixture",
"changeType": "EXTEND",
"basis": "Results map_r90_norm_point rows are legacy report fixtures. GOALS grade2RIT/R90 lives in the skill-seeded NWEAMAP master and may be mirrored by Analytics.",
"upstream": "Legacy Results R90 fixture rows; no app-local copy",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}term_season
- anchor
- field-alpha-map-r90-norm-point-term-season
- type
- TEXT enum
- nullability
- Required.
- key
- Primary key part
- meaning
- MAP season for this R90 point.
- range
- One documented enum value.
- relationship
- Primary identifier for one map r90 norm point row within a tenant; downstream Results rows reference this value by its named id field.
- example
- spring
- invalidWhen
- Invalid when term_season is not one of fall, winter, spring, summer, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map r90 norm point is written; adding a new term_season value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be fall, winter, spring, or summer." ]
allowedValues
[
{
"value": "fall",
"meaning": "Fall MAP season.",
"useWhen": "Fall MAP season.",
"invalidWhen": "Invalid when fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter",
"meaning": "Winter MAP season.",
"useWhen": "Winter MAP season.",
"invalidWhen": "Invalid when winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring",
"meaning": "Spring MAP season.",
"useWhen": "Spring MAP season.",
"invalidWhen": "Invalid when spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "summer",
"meaning": "Summer MAP season.",
"useWhen": "Summer MAP season.",
"invalidWhen": "Invalid when summer does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-map-r90-norm-point-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map r90 norm point is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}rit50_grade
- anchor
- field-alpha-map-r90-norm-point-rit50-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- RIT50 grade point reproduced from NWEA-published data where available.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map r90 norm point; it feeds documented calculations or reports but does not identify another object.
- example
- 7.10
- invalidWhen
- Invalid when rit50_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: NWEA-published points are preserved exactly.; Interpolation must carry source_point_kind..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "NWEA-published points are preserved exactly.", "Interpolation must carry source_point_kind." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}rit90_grade
- anchor
- field-alpha-map-r90-norm-point-rit90-grade
- type
- NUMERIC(5,2)
- nullability
- Required.
- key
- Not a key
- meaning
- Legacy Results fixture RIT90/R90 grade point for this subject/grade/season/norms row.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map r90 norm point; it feeds documented calculations or reports but does not identify another object.
- example
- 6.40
- invalidWhen
- Invalid when rit90_grade is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: This is Alpha extrapolation unless source_point_kind says nwea_published.; Do not use as the GOALS grade2RIT/R90 oracle; use NWEAMAP/Analytics..
- upstreamSource
- Legacy Results R90 fixture rows; no app-local copy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results map_r90_norm_point rows are legacy report fixtures. GOALS grade2RIT/R90 lives in the skill-seeded NWEAMAP master and may be mirrored by Analytics.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "This is Alpha extrapolation unless source_point_kind says nwea_published.", "Do not use as the GOALS grade2RIT/R90 oracle; use NWEAMAP/Analytics." ]
allowedValues
[]
provenance
{
"label": "Legacy Results R90 fixture",
"changeType": "EXTEND",
"basis": "Results map_r90_norm_point rows are legacy report fixtures. GOALS grade2RIT/R90 lives in the skill-seeded NWEAMAP master and may be mirrored by Analytics.",
"upstream": "Legacy Results R90 fixture rows; no app-local copy",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}r90_rit
- anchor
- field-alpha-map-r90-norm-point-r90-rit
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- RIT value for the legacy R90 fixture point.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map r90 norm point; it feeds documented calculations or reports but does not identify another object.
- example
- 231
- invalidWhen
- Invalid when r90_rit is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- Legacy Results R90 fixture rows; no app-local copy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results map_r90_norm_point rows are legacy report fixtures. GOALS grade2RIT/R90 lives in the skill-seeded NWEAMAP master and may be mirrored by Analytics.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "100 through 350.", "GOALS RIT->grade must come from the skill-seeded NWEAMAP master or Analytics mirror." ]
allowedValues
[]
provenance
{
"label": "Legacy Results R90 fixture",
"changeType": "EXTEND",
"basis": "Results map_r90_norm_point rows are legacy report fixtures. GOALS grade2RIT/R90 lives in the skill-seeded NWEAMAP master and may be mirrored by Analytics.",
"upstream": "Legacy Results R90 fixture rows; no app-local copy",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}source_point_kind
- anchor
- field-alpha-map-r90-norm-point-source-point-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Provenance class for the R90 point.
- range
- One documented enum value.
- relationship
- Governed value on map r90 norm point; no free-text relationship, and consumers must use the documented enum values.
- example
- alpha_extrapolated
- invalidWhen
- Invalid when source_point_kind is not one of nwea_published, interpolated, alpha_extrapolated, policy_derived, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map r90 norm point is written; adding a new source_point_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Legacy Results R90 fixture rows; no app-local copy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Results map_r90_norm_point rows are legacy report fixtures. GOALS grade2RIT/R90 lives in the skill-seeded NWEAMAP master and may be mirrored by Analytics.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Must be one documented value.", "Usually alpha_extrapolated for R90." ]
allowedValues
[
{
"value": "nwea_published",
"meaning": "The point is directly reproduced from NWEA-published data.",
"useWhen": "The point is directly reproduced from NWEA-published data.",
"invalidWhen": "Invalid when nwea_published does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "interpolated",
"meaning": "The point is interpolated between published NWEA points.",
"useWhen": "The point is interpolated between published NWEA points.",
"invalidWhen": "Invalid when interpolated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha_extrapolated",
"meaning": "The point is an Alpha extrapolation, such as RIT90 or 99-level thresholds.",
"useWhen": "The point is an Alpha extrapolation, such as RIT90 or 99-level thresholds.",
"invalidWhen": "Invalid when alpha_extrapolated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "policy_derived",
"meaning": "The point is derived from named alpha.policy.* configuration.",
"useWhen": "The point is derived from named alpha.policy.* configuration.",
"invalidWhen": "Invalid when policy_derived does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Legacy Results R90 fixture",
"changeType": "EXTEND",
"basis": "Results map_r90_norm_point rows are legacy report fixtures. GOALS grade2RIT/R90 lives in the skill-seeded NWEAMAP master and may be mirrored by Analytics.",
"upstream": "Legacy Results R90 fixture rows; no app-local copy",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}calculator_version
- anchor
- field-alpha-map-r90-norm-point-calculator-version
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Version of the legacy Results fixture calculator.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one map r90 norm point row within a tenant; downstream Results rows reference this value by its named id field.
- example
- rit_calc_2026_06
- invalidWhen
- Invalid when calculator_version is missing, violates its documented constraints: Must reference alpha.policy_config.; Not an owner/version marker for the NWEAMAP grade2RIT/R90 master..
- edgeCases
- calculator_version follows the map r90 norm point lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Must reference alpha.policy_config.", "Not an owner/version marker for the NWEAMAP grade2RIT/R90 master." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}status
- anchor
- field-alpha-map-r90-norm-point-status
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Lifecycle state of this R90 row.
- range
- One documented enum value.
- relationship
- Governed value on map r90 norm point; no free-text relationship, and consumers must use the documented enum values.
- example
- active
- invalidWhen
- Invalid when status is not one of draft, active, superseded, deprecated, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map r90 norm point is written; adding a new status value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Only active rows drive current calculators." ]
allowedValues
[
{
"value": "draft",
"meaning": "Config is being prepared and is not used by surface computations.",
"useWhen": "Config is being prepared and is not used by surface computations.",
"invalidWhen": "Invalid when draft does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "active",
"meaning": "Config is the current value read by the surface for its effective window.",
"useWhen": "Config is the current value read by the surface for its effective window.",
"invalidWhen": "Invalid when active does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "superseded",
"meaning": "Config has been replaced but remains available for historical answers.",
"useWhen": "Config has been replaced but remains available for historical answers.",
"invalidWhen": "Invalid when superseded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "deprecated",
"meaning": "Config should not be used for new calculations and remains only for audit.",
"useWhen": "Config should not be used for new calculations and remains only for audit.",
"invalidWhen": "Invalid when deprecated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.map_effective_grade · Effective grade
- kind
- Public view + extension storage
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- NWEA RIT observations plus Alpha RIT50/RIT90 calculators.
- purpose
- RIT50 grade, RIT90 grade, effective grade, Alpha minimum RIT, and predicted RIT with provenance for published vs interpolated/extrapolated points.
- lifecycle
- Generated for MAP score rows when calculator config is active.
- primaryKey
- (tenant_id, student_id, subject_id, canonical_term_id, norms_set, calculator_version)
- storage
- Extension table stores Alpha calculator outputs/provenance; RIT source remains NWEAMap view.
- writePath
- Read through the public Alpha view; base scalar values stay projected from the approved source view, and only Alpha-owned calculator fields write extension storage.
- anchor
- table-alpha-map-effective-grade
- fieldCount
- 14
itds
[
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]relationships
[ "Belongs to one MAP score and one student." ]
constraints
[ "RIT90 is an Alpha extrapolation, not a NWEA-published field.", "Every output records source_point_kind and calculator_version." ]
invalidExamples
[ "A RIT90 value labeled as NWEA-published.", "Effective grade computed in a report script." ]
example
{
"rit": 238,
"rit50_grade": 7.1,
"rit90_grade": 6.4,
"effective_grade": 6.4
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (14)
tenant_id
- anchor
- field-alpha-map-effective-grade-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-map-effective-grade-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-map-effective-grade-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map effective grade is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-map-effective-grade-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-map-effective-grade-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map effective grade is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}rit
- anchor
- field-alpha-map-effective-grade-rit
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- MAP RIT input for the calculator.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map effective grade; it feeds documented calculations or reports but does not identify another object.
- example
- 238
- invalidWhen
- Invalid when rit is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Public view scalar projected from the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "100 through 350." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}rit50_grade
- anchor
- field-alpha-map-effective-grade-rit50-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Grade level where students at this RIT get about 50 percent correct, grounded in NWEA-published data where available.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map effective grade; it feeds documented calculations or reports but does not identify another object.
- example
- 7.10
- invalidWhen
- Invalid when rit50_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: May be interpolated only where NWEA has no direct point..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "May be interpolated only where NWEA has no direct point." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}rit90_grade
- anchor
- field-alpha-map-effective-grade-rit90-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Alpha extrapolated grade level for about 90 percent correctness.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map effective grade; it feeds documented calculations or reports but does not identify another object.
- example
- 6.40
- invalidWhen
- Invalid when rit90_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: This is not NWEA-published.; Must carry source_point_kind alpha_extrapolated when extrapolated..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "This is not NWEA-published.", "Must carry source_point_kind alpha_extrapolated when extrapolated." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}effective_grade
- anchor
- field-alpha-map-effective-grade-effective-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Lowest grade a student can master and still move MAP growth under Alpha policy.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map effective grade; it feeds documented calculations or reports but does not identify another object.
- example
- 6.40
- invalidWhen
- Invalid when effective_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Computed by Results calculator.; May be null only with null_reason..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Computed by Results calculator.", "May be null only with null_reason." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}alpha_minimum_rit
- anchor
- field-alpha-map-effective-grade-alpha-minimum-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Minimum RIT Alpha expects for the effective grade target.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map effective grade; it feeds documented calculations or reports but does not identify another object.
- example
- 231
- invalidWhen
- Invalid when alpha_minimum_rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Alpha extrapolation/config output.", "Must carry calculator_version." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}alpha_predicted_rit
- anchor
- field-alpha-map-effective-grade-alpha-predicted-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Predicted future RIT under Alpha growth assumptions.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map effective grade; it feeds documented calculations or reports but does not identify another object.
- example
- 252
- invalidWhen
- Invalid when alpha_predicted_rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Computed by Results.", "Must not be computed in skill packs." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}source_point_kind
- anchor
- field-alpha-map-effective-grade-source-point-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Whether the calculator point is published, interpolated, extrapolated, or policy-derived.
- range
- One documented enum value.
- relationship
- Governed value on map effective grade; no free-text relationship, and consumers must use the documented enum values.
- example
- alpha_extrapolated
- invalidWhen
- Invalid when source_point_kind is not one of nwea_published, interpolated, alpha_extrapolated, policy_derived, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map effective grade is written; adding a new source_point_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "nwea_published",
"meaning": "The point is directly reproduced from NWEA-published data.",
"useWhen": "The point is directly reproduced from NWEA-published data.",
"invalidWhen": "Invalid when nwea_published does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "interpolated",
"meaning": "The point is interpolated between published NWEA points.",
"useWhen": "The point is interpolated between published NWEA points.",
"invalidWhen": "Invalid when interpolated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha_extrapolated",
"meaning": "The point is an Alpha extrapolation, such as RIT90 or 99-level thresholds.",
"useWhen": "The point is an Alpha extrapolation, such as RIT90 or 99-level thresholds.",
"invalidWhen": "Invalid when alpha_extrapolated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "policy_derived",
"meaning": "The point is derived from named alpha.policy.* configuration.",
"useWhen": "The point is derived from named alpha.policy.* configuration.",
"invalidWhen": "Invalid when policy_derived does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}calculator_version
- anchor
- field-alpha-map-effective-grade-calculator-version
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Version of the RIT calculator used.
- range
- Text within documented constraints.
- relationship
- Attribute on map effective grade; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for calculator_version.
- example
- rit_calc_2026_06
- invalidWhen
- Invalid when calculator_version is missing, violates its documented constraints: Must reference alpha.policy_config..
- edgeCases
- calculator_version follows the map effective grade lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Must reference alpha.policy_config." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}null_reason
- anchor
- field-alpha-map-effective-grade-null-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Why a calculator output is null.
- range
- One documented enum value.
- relationship
- Governed value on map effective grade; no free-text relationship, and consumers must use the documented enum values.
- example
- missing_policy_config
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map effective grade is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Required when effective_grade is null." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.map_longitudinal_point · MAP growth point
- kind
- Read model
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- NWEA term observations plus Alpha derived growth fields.
- purpose
- Ordered per-student, per-subject time series point with RIT, observed vs typical growth, Growth X, norms set, and TimeBack-era flag.
- lifecycle
- Generated across MAP terms for growth-over-time reports.
- primaryKey
- (tenant_id, student_id, subject_id, term_order, norms_set)
- storage
- Extension/read view stores derived growth fields and references source terms, not copied NWEA rows.
- writePath
- Write only new Alpha fields and foreign-key/source references owned by Results; never copy 1EdTech source columns.
- anchor
- table-alpha-map-longitudinal-point
- fieldCount
- 13
itds
[
{
"id": "ritd-012-longitudinal-series",
"title": "Growth Over Time Is A Results-Owned Series",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-012-longitudinal-series"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]relationships
[ "Belongs to one student.", "References one map_score per point when present." ]
constraints
[ "term_order is typed by the surface.", "timeback_era is policy-owned and defaults to 2025-26 and later." ]
invalidExamples
[ "A client sorts TermName strings.", "A report computes Growth X locally from raw rows." ]
example
{
"term_order": 6,
"canonical_term_id": "term_2025_26_spring",
"rit": 238,
"timeback_era": "timeback"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (13)
tenant_id
- anchor
- field-alpha-map-longitudinal-point-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-map-longitudinal-point-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-map-longitudinal-point-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map longitudinal point is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-map-longitudinal-point-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-map-longitudinal-point-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map longitudinal point is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}term_order
- anchor
- field-alpha-map-longitudinal-point-term-order
- type
- INTEGER
- nullability
- Required.
- key
- Primary key part
- meaning
- Surface-owned chronological order for this student's subject timeline.
- range
- Integer within documented constraints.
- relationship
- Primary identifier for one map longitudinal point row within a tenant; downstream Results rows reference this value by its named id field.
- example
- 6
- invalidWhen
- Invalid when term_order is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 1.; Never parse term strings in clients..
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must be >= 1.", "Never parse term strings in clients." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}rit
- anchor
- field-alpha-map-longitudinal-point-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Selected MAP RIT at this point.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map longitudinal point; it feeds documented calculations or reports but does not identify another object.
- example
- 238
- invalidWhen
- Invalid when rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "100 through 350 when present." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}observed_growth
- anchor
- field-alpha-map-longitudinal-point-observed-growth
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Observed growth since the prior comparable point/window.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map longitudinal point; it feeds documented calculations or reports but does not identify another object.
- example
- 14.00
- invalidWhen
- Invalid when observed_growth is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Computed by Results or copied from NWEA where applicable..
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Computed by Results or copied from NWEA where applicable." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}typical_growth
- anchor
- field-alpha-map-longitudinal-point-typical-growth
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Typical growth under norms_set.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map longitudinal point; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when typical_growth is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must not mix norms sets..
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must not mix norms sets." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}growth_x
- anchor
- field-alpha-map-longitudinal-point-growth-x
- type
- NUMERIC(8,4)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Growth X for this timeline segment.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map longitudinal point; it feeds documented calculations or reports but does not identify another object.
- example
- 2.0000
- invalidWhen
- Invalid when growth_x is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Computed by Results.", "Null with documented null_reason." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}timeback_era
- anchor
- field-alpha-map-longitudinal-point-timeback-era
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Whether this point is before or during TimeBack era.
- range
- One documented enum value.
- relationship
- Governed value on map longitudinal point; no free-text relationship, and consumers must use the documented enum values.
- example
- timeback
- invalidWhen
- Invalid when timeback_era is not one of pre_timeback, timeback, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map longitudinal point is written; adding a new timeback_era value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension field owned by Results; may be stored only as new Alpha data or a foreign-key/reference column.
constraints
[ "Computed by alpha.policy.school_year_boundaries.", "Default split: 2025-26 and later is timeback." ]
allowedValues
[
{
"value": "pre_timeback",
"meaning": "School year is 2024-25 or earlier under current policy.",
"useWhen": "School year is 2024-25 or earlier under current policy.",
"invalidWhen": "Invalid when pre_timeback does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "timeback",
"meaning": "School year is 2025-26 or later under current policy.",
"useWhen": "School year is 2025-26 or later under current policy.",
"invalidWhen": "Invalid when timeback does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}previous_map_score_id
- anchor
- field-alpha-map-longitudinal-point-previous-map-score-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Prior MAP score used for observed growth.
- range
- PostgreSQL UUID.
- relationship
- References the previous map_score in the series.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000650
- invalidWhen
- Invalid when previous_map_score_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference alpha.map_score when present." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}null_reason
- anchor
- field-alpha-map-longitudinal-point-null-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Why growth fields are null.
- range
- One documented enum value.
- relationship
- Governed value on map longitudinal point; no free-text relationship, and consumers must use the documented enum values.
- example
- not_enough_history
- invalidWhen
- Invalid when null_reason is not one of not_enough_history, no_projected_growth, no_valid_rit, missing_policy_config, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map longitudinal point is written; adding a new null_reason value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required when growth_x is null." ]
allowedValues
[
{
"value": "not_enough_history",
"meaning": "Required prior-term or baseline input does not exist yet.",
"useWhen": "Required prior-term or baseline input does not exist yet.",
"invalidWhen": "Invalid when not_enough_history does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_projected_growth",
"meaning": "NWEA did not publish projected growth for the requested window.",
"useWhen": "NWEA did not publish projected growth for the requested window.",
"invalidWhen": "Invalid when no_projected_growth does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "no_valid_rit",
"meaning": "The sitting has no valid RIT for calculation.",
"useWhen": "The sitting has no valid RIT for calculation.",
"invalidWhen": "Invalid when no_valid_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_policy_config",
"meaning": "The surface lacks active policy/config for this calculation.",
"useWhen": "The surface lacks active policy/config for this calculation.",
"invalidWhen": "Invalid when missing_policy_config does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The field does not apply to this row by design.",
"useWhen": "The field does not apply to this row by design.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}alpha.map_99_level · 99-level
- kind
- Public view + extension storage
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- NWEA percentile/RIT plus Alpha percentile-ceiling thresholds.
- purpose
- Counts how many grade levels above the 99th-percentile threshold a student's RIT sits, so ceiling growth remains visible.
- lifecycle
- Generated for normed MAP scores with percentile/RIT inputs and active 99-level threshold config.
- primaryKey
- (tenant_id, student_id, subject_id, canonical_term_id, norms_set)
- storage
- Extension table stores ceiling metric/provenance; percentile/RIT source remains base view.
- writePath
- Read through the public Alpha view; base scalar values stay projected from the approved source view, and only Alpha-owned calculator fields write extension storage.
- anchor
- table-alpha-map-99-level
- fieldCount
- 11
itds
[
{
"id": "ritd-013-ninety-nine-levels",
"title": "99-Levels Preserve Growth Above Percentile Ceilings",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-013-ninety-nine-levels"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]relationships
[ "Belongs to one MAP score." ]
constraints
[ "This is an Alpha field, not NWEA-published.", "Threshold provenance and norms_set are required." ]
invalidExamples
[ "Treating percentile 99 as fully discriminating.", "Computing 99-levels in student_progress_animation." ]
example
{
"percentile": 99,
"rit": 268,
"threshold_99_rit": 252,
"levels_above_99": 1.6
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (11)
tenant_id
- anchor
- field-alpha-map-99-level-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-map-99-level-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-map-99-level-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map 99 level is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-map-99-level-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-map-99-level-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map 99 level is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Extension foreign key or evidence reference to another surface; allowed because it points at source rows, but it must not copy source field values.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}percentile
- anchor
- field-alpha-map-99-level-percentile
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- NWEA percentile for the selected score.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map 99 level; it feeds documented calculations or reports but does not identify another object.
- example
- 99
- invalidWhen
- Invalid when percentile is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Percentile 99 is a ceiling; use alpha.map_99_level fields for above-ceiling growth instead of treating 99 as fully discriminating.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Public view scalar projected from the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "Usually 99 for rows where levels_above_99 is positive.", "0 through 99." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}rit
- anchor
- field-alpha-map-99-level-rit
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- MAP RIT score.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map 99 level; it feeds documented calculations or reports but does not identify another object.
- example
- 268
- invalidWhen
- Invalid when rit is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Public view scalar projected from the approved base surface; do not create an Alpha table column for this source value.
constraints
[ "100 through 350." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}threshold_99_rit
- anchor
- field-alpha-map-99-level-threshold-99-rit
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- RIT threshold for 99th percentile under this subject/grade/norms set.
- range
- Integer within documented constraints.
- relationship
- Numeric value on map 99 level; it feeds documented calculations or reports but does not identify another object.
- example
- 252
- invalidWhen
- Invalid when threshold_99_rit is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Must come from published/interpolated/extrapolated threshold config.", "Must carry threshold_source_kind." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}levels_above_99
- anchor
- field-alpha-map-99-level-levels-above-99
- type
- NUMERIC(6,2)
- nullability
- Required.
- key
- Not a key
- meaning
- Grade levels above the 99th percentile threshold.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on map 99 level; it feeds documented calculations or reports but does not identify another object.
- example
- 1.60
- invalidWhen
- Invalid when levels_above_99 is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Computed by Results.; 0 when RIT is at or below threshold..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Computed by Results.", "0 when RIT is at or below threshold." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}threshold_source_kind
- anchor
- field-alpha-map-99-level-threshold-source-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Provenance class for the threshold point.
- range
- One documented enum value.
- relationship
- Governed value on map 99 level; no free-text relationship, and consumers must use the documented enum values.
- example
- alpha_extrapolated
- invalidWhen
- Invalid when threshold_source_kind is not one of nwea_published, interpolated, alpha_extrapolated, policy_derived, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before map 99 level is written; adding a new threshold_source_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "nwea_published",
"meaning": "The point is directly reproduced from NWEA-published data.",
"useWhen": "The point is directly reproduced from NWEA-published data.",
"invalidWhen": "Invalid when nwea_published does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "interpolated",
"meaning": "The point is interpolated between published NWEA points.",
"useWhen": "The point is interpolated between published NWEA points.",
"invalidWhen": "Invalid when interpolated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "alpha_extrapolated",
"meaning": "The point is an Alpha extrapolation, such as RIT90 or 99-level thresholds.",
"useWhen": "The point is an Alpha extrapolation, such as RIT90 or 99-level thresholds.",
"invalidWhen": "Invalid when alpha_extrapolated does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "policy_derived",
"meaning": "The point is derived from named alpha.policy.* configuration.",
"useWhen": "The point is derived from named alpha.policy.* configuration.",
"invalidWhen": "Invalid when policy_derived does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}calculator_version
- anchor
- field-alpha-map-99-level-calculator-version
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Calculator/config version used for threshold and levels.
- range
- Text within documented constraints.
- relationship
- Attribute on map 99 level; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for calculator_version.
- example
- rit_calc_2026_06
- invalidWhen
- Invalid when calculator_version is missing, violates its documented constraints: Must reference alpha.policy_config..
- edgeCases
- calculator_version follows the map 99 level lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Alpha extension output field in sidecar storage; may store only new Results-owned calculation/config values, never copied base values.
constraints
[ "Must reference alpha.policy_config." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.report_map_quadrants · MAP quadrants report
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from Results owned tables and approved upstream surfaces.
- purpose
- Classifies one student/subject/term into a growth x achievement quadrant without client calculations.
- lifecycle
- Read-only report view generated by the Results surface. Consumers and skill packs call it; they do not reproduce its calculations.
- primaryKey
- (tenant_id, student_id, subject_id, canonical_term_id, growth_window, norms_set)
- storage
- Report-ready read view; the surface owns the calculation, and clients do not store or recompute report rows.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-report-map-quadrants
- fieldCount
- 11
itds
[
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Reads from Results-owned source objects and authorized joined cohort fields." ]
constraints
[ "No client-side norms tables, dedupe, term parsing, growth-window switches, mastery math, or report calculators are required." ]
invalidExamples
[ "Skill pack includes a norms table.", "Client computes this report from raw NWEA rows." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"student_id": "stu_timeback_10017",
"student_email": "alex.rivera@example.edu",
"subject_id": "math",
"canonical_term_id": "term_2025_26_spring"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (11)
tenant_id
- anchor
- field-alpha-report-map-quadrants-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-report-map-quadrants-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}student_email
- anchor
- field-alpha-report-map-quadrants-student-email
- type
- CITEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Student email shown for teacher/parent lookup convenience. It is not a stable key and cannot replace student_id.
- range
- Case-insensitive text within documented constraints.
- relationship
- Joined from People & Orgs for display and lookup; not a Results-owned foreign key.
- example
- alex.rivera@example.edu
- invalidWhen
- Invalid when student_email is used as the sole reconciliation key, returned without authorization, or stored where the row requires stable student_id.
- edgeCases
- Email can change and may be hidden by scope; join it for lookup/display, but never use it as the durable key.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Contact
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Nullable because not every authorized read returns email.", "Case-insensitive email format when present.", "Must never be used as the sole reconciliation key." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-report-map-quadrants-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report map quadrants is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-report-map-quadrants-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-report-map-quadrants-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report map quadrants is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}growth_window
- anchor
- field-alpha-report-map-quadrants-growth-window
- type
- TEXT enum
- nullability
- Required.
- key
- Primary key part
- meaning
- Typed growth window used for the Growth X value in this quadrant row.
- range
- One documented enum value.
- relationship
- Governed growth-window selector for this row. It replaces NWEA positional growth columns.
- example
- fall_to_spring
- invalidWhen
- Invalid when growth_window is not one of fall_to_fall, fall_to_winter, fall_to_spring, winter_to_winter, winter_to_spring, spring_to_spring, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report map quadrants is written; adding a new growth_window value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value.", "Endpoint defaults may choose the school report window, but the row still carries the resolved window." ]
allowedValues
[
{
"value": "fall_to_fall",
"meaning": "Growth measured from Fall to next Fall.",
"useWhen": "Growth measured from Fall to next Fall.",
"invalidWhen": "Invalid when fall_to_fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_winter",
"meaning": "Growth measured from Fall to Winter.",
"useWhen": "Growth measured from Fall to Winter.",
"invalidWhen": "Invalid when fall_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_spring",
"meaning": "Growth measured from Fall to Spring.",
"useWhen": "Growth measured from Fall to Spring.",
"invalidWhen": "Invalid when fall_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_winter",
"meaning": "Growth measured from Winter to next Winter.",
"useWhen": "Growth measured from Winter to next Winter.",
"invalidWhen": "Invalid when winter_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_spring",
"meaning": "Growth measured from Winter to Spring.",
"useWhen": "Growth measured from Winter to Spring.",
"invalidWhen": "Invalid when winter_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring_to_spring",
"meaning": "Growth measured from Spring to next Spring.",
"useWhen": "Growth measured from Spring to next Spring.",
"invalidWhen": "Invalid when spring_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}rit
- anchor
- field-alpha-report-map-quadrants-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Selected test-of-record RIT for the report row.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report map quadrants; it feeds documented calculations or reports but does not identify another object.
- example
- 238
- invalidWhen
- Invalid when rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_score." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}growth_x
- anchor
- field-alpha-report-map-quadrants-growth-x
- type
- NUMERIC(8,4)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Surface-owned Growth X for the selected window.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report map quadrants; it feeds documented calculations or reports but does not identify another object.
- example
- 2.0000
- invalidWhen
- Invalid when growth_x is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_growth_window.", "No client calculation." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}quadrant
- anchor
- field-alpha-report-map-quadrants-quadrant
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- Report quadrant under active threshold policy.
- range
- One documented enum value.
- relationship
- Governed value on report map quadrants; no free-text relationship, and consumers must use the documented enum values.
- example
- high_growth_high_achievement
- invalidWhen
- Invalid when quadrant is not one of high_growth_high_achievement, high_growth_low_achievement, low_growth_high_achievement, low_growth_low_achievement, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report map quadrants is written; adding a new quadrant value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value when inputs exist." ]
allowedValues
[
{
"value": "high_growth_high_achievement",
"meaning": "Growth X and achievement are both at or above the configured report threshold.",
"useWhen": "Growth X and achievement are both at or above the configured report threshold.",
"invalidWhen": "Invalid when high_growth_high_achievement does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "high_growth_low_achievement",
"meaning": "Growth X is high while achievement is below the configured threshold.",
"useWhen": "Growth X is high while achievement is below the configured threshold.",
"invalidWhen": "Invalid when high_growth_low_achievement does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "low_growth_high_achievement",
"meaning": "Achievement is high while Growth X is below the configured threshold.",
"useWhen": "Achievement is high while Growth X is below the configured threshold.",
"invalidWhen": "Invalid when low_growth_high_achievement does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "low_growth_low_achievement",
"meaning": "Both Growth X and achievement are below the configured thresholds.",
"useWhen": "Both Growth X and achievement are below the configured thresholds.",
"invalidWhen": "Invalid when low_growth_low_achievement does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}intervention_flag
- anchor
- field-alpha-report-map-quadrants-intervention-flag
- type
- BOOLEAN
- nullability
- Required.
- key
- Not a key
- meaning
- Whether this row meets policy for intervention or celebration workflow.
- range
- true or false.
- relationship
- Boolean row state on report map quadrants; scoped to this row and not a join target.
- example
- false
- invalidWhen
- Invalid when intervention_flag is null, is encoded as text/number, or contradicts the row state described by the constraints.
- edgeCases
- intervention_flag follows the report map quadrants lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Computed by Results report policy." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.report_retake_audit · MAP retake audit report
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from Results owned tables and approved upstream surfaces.
- purpose
- Summarizes sittings, soft deletes, and selected highest-RIT test of record for one student/subject/term.
- lifecycle
- Read-only report view generated by the Results surface. Consumers and skill packs call it; they do not reproduce its calculations.
- primaryKey
- (tenant_id, student_id, subject_id, canonical_term_id)
- storage
- Report-ready read view over MAP sitting/test-of-record evidence; no copied all-sittings Alpha table.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-report-retake-audit
- fieldCount
- 8
itds
[
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Reads from Results-owned source objects and authorized joined cohort fields." ]
constraints
[ "No client-side norms tables, dedupe, term parsing, growth-window switches, mastery math, or report calculators are required." ]
invalidExamples
[ "Skill pack includes a norms table.", "Client computes this report from raw NWEA rows." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"student_id": "stu_timeback_10017",
"subject_id": "math",
"canonical_term_id": "term_2025_26_spring",
"sitting_count": "3"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (8)
tenant_id
- anchor
- field-alpha-report-retake-audit-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-report-retake-audit-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-report-retake-audit-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report retake audit is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-report-retake-audit-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}sitting_count
- anchor
- field-alpha-report-retake-audit-sitting-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Number of all-sittings rows in the group.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report retake audit; it feeds documented calculations or reports but does not identify another object.
- example
- 3
- invalidWhen
- Invalid when sitting_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0.; Computed by the surface..
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be >= 0.", "Computed by the surface." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}highest_rit_sitting_id
- anchor
- field-alpha-report-retake-audit-highest-rit-sitting-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- MAP sitting selected as test_of_record.
- range
- PostgreSQL UUID.
- relationship
- References one map_sitting.
- example
- 018f4b4e-9c7a-7d3d-8b2f-2f673a000801
- invalidWhen
- Invalid when highest_rit_sitting_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- nweamap.raw_assessment_results
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "References alpha.map_sitting when present." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}deleted_sitting_count
- anchor
- field-alpha-report-retake-audit-deleted-sitting-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Number of soft-deleted sittings in the group.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report retake audit; it feeds documented calculations or reports but does not identify another object.
- example
- 1
- invalidWhen
- Invalid when deleted_sitting_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0..
- upstreamSource
- nweamap.raw_assessment_results
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be >= 0." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}selection_explanation
- anchor
- field-alpha-report-retake-audit-selection-explanation
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Plain explanation of why the selected sitting is test_of_record.
- range
- Text within documented constraints.
- relationship
- Attribute on report retake audit; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for selection_explanation.
- example
- Selected highest valid RIT; later lower retake remains audit evidence.
- invalidWhen
- Invalid when selection_explanation is missing, violates its documented constraints: Must mention highest-RIT rule or null reason.; Do not expose client dedupe instructions..
- edgeCases
- selection_explanation follows the report retake audit lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- nweamap.raw_assessment_results
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- All-sittings audit view exposes retakes and soft-deleted rows only when requested.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must mention highest-RIT rule or null reason.", "Do not expose client dedupe instructions." ]
allowedValues
[]
provenance
{
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
}alpha.report_growth_over_time · Growth-over-time report
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from Results owned tables and approved upstream surfaces.
- purpose
- Report-ready ordered growth timeline; same facts as map_longitudinal_point with cohort fields added.
- lifecycle
- Read-only report view generated by the Results surface. Consumers and skill packs call it; they do not reproduce its calculations.
- primaryKey
- (tenant_id, student_id, subject_id, term_order, norms_set)
- storage
- Report-ready read view over longitudinal MAP/Results outputs; no client-side term parsing or growth math.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-report-growth-over-time
- fieldCount
- 11
itds
[
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Reads from Results-owned source objects and authorized joined cohort fields." ]
constraints
[ "No client-side norms tables, dedupe, term parsing, growth-window switches, mastery math, or report calculators are required." ]
invalidExamples
[ "Skill pack includes a norms table.", "Client computes this report from raw NWEA rows." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"student_id": "stu_timeback_10017",
"student_email": "alex.rivera@example.edu",
"subject_id": "math",
"norms_set": "2025"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (11)
tenant_id
- anchor
- field-alpha-report-growth-over-time-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-report-growth-over-time-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}student_email
- anchor
- field-alpha-report-growth-over-time-student-email
- type
- CITEXT
- nullability
- Nullable joined read field.
- key
- Not a key
- meaning
- Student email shown for teacher/parent lookup convenience. It is not a stable key and cannot replace student_id.
- range
- Case-insensitive text within documented constraints.
- relationship
- Joined from People & Orgs for display and lookup; not a Results-owned foreign key.
- example
- alex.rivera@example.edu
- invalidWhen
- Invalid when student_email is used as the sole reconciliation key, returned without authorization, or stored where the row requires stable student_id.
- edgeCases
- Email can change and may be hidden by scope; join it for lookup/display, but never use it as the durable key.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Contact
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Nullable because not every authorized read returns email.", "Case-insensitive email format when present.", "Must never be used as the sole reconciliation key." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-report-growth-over-time-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report growth over time is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}norms_set
- anchor
- field-alpha-report-growth-over-time-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report growth over time is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}term_order
- anchor
- field-alpha-report-growth-over-time-term-order
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Surface-owned chronological order.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report growth over time; it feeds documented calculations or reports but does not identify another object.
- example
- 6
- invalidWhen
- Invalid when term_order is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 1..
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be >= 1." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}canonical_term_id
- anchor
- field-alpha-report-growth-over-time-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}rit
- anchor
- field-alpha-report-growth-over-time-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- RIT at this timeline point.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report growth over time; it feeds documented calculations or reports but does not identify another object.
- example
- 238
- invalidWhen
- Invalid when rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_longitudinal_point." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}observed_growth
- anchor
- field-alpha-report-growth-over-time-observed-growth
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Observed growth for this segment.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report growth over time; it feeds documented calculations or reports but does not identify another object.
- example
- 14.00
- invalidWhen
- Invalid when observed_growth is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Computed by Results..
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Computed by Results." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}growth_x
- anchor
- field-alpha-report-growth-over-time-growth-x
- type
- NUMERIC(8,4)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Growth X for this segment.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report growth over time; it feeds documented calculations or reports but does not identify another object.
- example
- 2.0000
- invalidWhen
- Invalid when growth_x is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Computed by Results." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}timeback_era
- anchor
- field-alpha-report-growth-over-time-timeback-era
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Pre-TimeBack vs TimeBack classification.
- range
- One documented enum value.
- relationship
- Governed value on report growth over time; no free-text relationship, and consumers must use the documented enum values.
- example
- timeback
- invalidWhen
- Invalid when timeback_era is not one of pre_timeback, timeback, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report growth over time is written; adding a new timeback_era value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Computed by policy." ]
allowedValues
[
{
"value": "pre_timeback",
"meaning": "School year is 2024-25 or earlier under current policy.",
"useWhen": "School year is 2024-25 or earlier under current policy.",
"invalidWhen": "Invalid when pre_timeback does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "timeback",
"meaning": "School year is 2025-26 or later under current policy.",
"useWhen": "School year is 2025-26 or later under current policy.",
"invalidWhen": "Invalid when timeback does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.report_norms_isolation · Norms-isolation report
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from Results owned tables and approved upstream surfaces.
- purpose
- Lets reports regenerate under 2020 or 2025 norms by changing normsSet, with no local norms tables.
- lifecycle
- Read-only report view generated by the Results surface. Consumers and skill packs call it; they do not reproduce its calculations.
- primaryKey
- (tenant_id, student_id, subject_id, canonical_term_id, norms_set)
- storage
- Report-ready read view parameterized by norms_set; no client-owned norms tables.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-report-norms-isolation
- fieldCount
- 9
itds
[
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Reads from Results-owned source objects and authorized joined cohort fields." ]
constraints
[ "No client-side norms tables, dedupe, term parsing, growth-window switches, mastery math, or report calculators are required." ]
invalidExamples
[ "Skill pack includes a norms table.", "Client computes this report from raw NWEA rows." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"student_id": "stu_timeback_10017",
"subject_id": "math",
"canonical_term_id": "term_2025_26_spring",
"norms_set": "2025"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (9)
tenant_id
- anchor
- field-alpha-report-norms-isolation-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-report-norms-isolation-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-report-norms-isolation-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report norms isolation is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-report-norms-isolation-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-report-norms-isolation-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report norms isolation is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}rit
- anchor
- field-alpha-report-norms-isolation-rit
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- RIT held constant while norms-dependent fields change.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report norms isolation; it feeds documented calculations or reports but does not identify another object.
- example
- 238
- invalidWhen
- Invalid when rit is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- RIT values outside the documented NWEA range are audit evidence only and cannot become test-of-record calculation inputs.
- upstreamSource
- nweamap.assessment_result_projection
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_score." ]
allowedValues
[]
provenance
{
"label": "MAP Alpha view",
"changeType": "CUT + RENAME + EXTEND",
"basis": "NWEA projection is cut to teacher/student fields and keyed by TimeBack identity.",
"upstream": "nweamap.assessment_result_projection",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
}
]
}percentile
- anchor
- field-alpha-report-norms-isolation-percentile
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Percentile under norms_set.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report norms isolation; it feeds documented calculations or reports but does not identify another object.
- example
- 94
- invalidWhen
- Invalid when percentile is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Percentile 99 is a ceiling; use alpha.map_99_level fields for above-ceiling growth instead of treating 99 as fully discriminating.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "0 through 99 when present." ]
allowedValues
[]
provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}effective_grade
- anchor
- field-alpha-report-norms-isolation-effective-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Effective grade under norms_set/calculator config.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report norms isolation; it feeds documented calculations or reports but does not identify another object.
- example
- 6.40
- invalidWhen
- Invalid when effective_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Read from alpha.map_effective_grade..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_effective_grade." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}growth_x
- anchor
- field-alpha-report-norms-isolation-growth-x
- type
- NUMERIC(8,4)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Growth X under norms_set.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report norms isolation; it feeds documented calculations or reports but does not identify another object.
- example
- 2.0000
- invalidWhen
- Invalid when growth_x is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_growth_window." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}alpha.report_growth_breakdown · Growth-breakdown report
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from Results owned tables and approved upstream surfaces.
- purpose
- Breaks Growth X into observed, projected, typical, target, and gap fields by typed growth window.
- lifecycle
- Read-only report view generated by the Results surface. Consumers and skill packs call it; they do not reproduce its calculations.
- primaryKey
- (tenant_id, student_id, subject_id, canonical_term_id, growth_window, norms_set)
- storage
- Report-ready read view over Growth X components; no growth-window switch statements in clients.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-report-growth-breakdown
- fieldCount
- 10
itds
[
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Reads from Results-owned source objects and authorized joined cohort fields." ]
constraints
[ "No client-side norms tables, dedupe, term parsing, growth-window switches, mastery math, or report calculators are required." ]
invalidExamples
[ "Skill pack includes a norms table.", "Client computes this report from raw NWEA rows." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"student_id": "stu_timeback_10017",
"subject_id": "math",
"canonical_term_id": "term_2025_26_spring",
"norms_set": "2025"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (10)
tenant_id
- anchor
- field-alpha-report-growth-breakdown-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-report-growth-breakdown-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-report-growth-breakdown-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report growth breakdown is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-report-growth-breakdown-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-report-growth-breakdown-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report growth breakdown is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}growth_window
- anchor
- field-alpha-report-growth-breakdown-growth-window
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Typed growth window.
- range
- One documented enum value.
- relationship
- Governed growth-window selector for this row. It replaces NWEA positional growth columns.
- example
- fall_to_spring
- invalidWhen
- Invalid when growth_window is not one of fall_to_fall, fall_to_winter, fall_to_spring, winter_to_winter, winter_to_spring, spring_to_spring, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report growth breakdown is written; adding a new growth_window value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "fall_to_fall",
"meaning": "Growth measured from Fall to next Fall.",
"useWhen": "Growth measured from Fall to next Fall.",
"invalidWhen": "Invalid when fall_to_fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_winter",
"meaning": "Growth measured from Fall to Winter.",
"useWhen": "Growth measured from Fall to Winter.",
"invalidWhen": "Invalid when fall_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_spring",
"meaning": "Growth measured from Fall to Spring.",
"useWhen": "Growth measured from Fall to Spring.",
"invalidWhen": "Invalid when fall_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_winter",
"meaning": "Growth measured from Winter to next Winter.",
"useWhen": "Growth measured from Winter to next Winter.",
"invalidWhen": "Invalid when winter_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_spring",
"meaning": "Growth measured from Winter to Spring.",
"useWhen": "Growth measured from Winter to Spring.",
"invalidWhen": "Invalid when winter_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring_to_spring",
"meaning": "Growth measured from Spring to next Spring.",
"useWhen": "Growth measured from Spring to next Spring.",
"invalidWhen": "Invalid when spring_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}observed_growth
- anchor
- field-alpha-report-growth-breakdown-observed-growth
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Observed growth points.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report growth breakdown; it feeds documented calculations or reports but does not identify another object.
- example
- 14.00
- invalidWhen
- Invalid when observed_growth is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Read from alpha.map_growth_window..
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_growth_window." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}projected_growth
- anchor
- field-alpha-report-growth-breakdown-projected-growth
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Projected growth points.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report growth breakdown; it feeds documented calculations or reports but does not identify another object.
- example
- 7.00
- invalidWhen
- Invalid when projected_growth is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Read from alpha.map_growth_window..
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_growth_window." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}growth_x
- anchor
- field-alpha-report-growth-breakdown-growth-x
- type
- NUMERIC(8,4)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Observed / projected growth.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report growth breakdown; it feeds documented calculations or reports but does not identify another object.
- example
- 2.0000
- invalidWhen
- Invalid when growth_x is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Computed by Results." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}target_gap
- anchor
- field-alpha-report-growth-breakdown-target-gap
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Difference from configured Growth X target.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report growth breakdown; it feeds documented calculations or reports but does not identify another object.
- example
- 0.00
- invalidWhen
- Invalid when target_gap is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Computed by Results..
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Computed by Results." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}alpha.report_group_growth_x · Group Growth X report
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from Results owned tables and approved upstream surfaces.
- purpose
- Returns the Growth X answer for a cohort by averaging each student's individual Growth X ratio at the documented group grain. It explicitly does not divide total observed growth by total projected growth.
- lifecycle
- Read-only report view generated by the Results surface. Consumers and skill packs call it; they do not reproduce its calculations.
- primaryKey
- (tenant_id, group_dimension, group_key, subject_id, canonical_term_id, growth_window, norms_set)
- storage
- Report-ready read view; stores/returns average of student ratios, not total observed / total projected.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-report-group-growth-x
- fieldCount
- 14
itds
[
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Reads from Results-owned source objects and authorized joined cohort fields." ]
constraints
[ "No client-side norms tables, dedupe, term parsing, growth-window switches, mastery math, or report calculators are required." ]
invalidExamples
[ "Skill pack includes a norms table.", "Client computes this report from raw NWEA rows." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"group_dimension": "school_level",
"group_key": "MS",
"subject_id": "math",
"canonical_term_id": "term_2025_26_spring"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (14)
tenant_id
- anchor
- field-alpha-report-group-growth-x-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}group_dimension
- anchor
- field-alpha-report-group-growth-x-group-dimension
- type
- TEXT enum
- nullability
- Required.
- key
- Primary key part
- meaning
- Cohort dimension used for the group row.
- range
- One documented enum value.
- relationship
- Primary identifier for one report group growth x row within a tenant; downstream Results rows reference this value by its named id field.
- example
- school_level
- invalidWhen
- Invalid when group_dimension is not one of school_level, tenure_bucket, brand, modality, school, cohort, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report group growth x is written; adding a new group_dimension value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value.", "School-level and tenure filters use locked registries." ]
allowedValues
[
{
"value": "school_level",
"meaning": "Group by the locked WL/LL/L1/L2/MS/HS school-level tag from People & Orgs.",
"useWhen": "Group by the locked WL/LL/L1/L2/MS/HS school-level tag from People & Orgs.",
"invalidWhen": "Invalid when school_level does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "tenure_bucket",
"meaning": "Group by the locked tenure bucket computed by the surface from admission_date and alpha.policy.tenure_buckets.",
"useWhen": "Group by the locked tenure bucket computed by the surface from admission_date and alpha.policy.tenure_buckets.",
"invalidWhen": "Invalid when tenure_bucket does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "brand",
"meaning": "Group by the locked brand tag at the NWEA-account boundary.",
"useWhen": "Group by the locked brand tag at the NWEA-account boundary.",
"invalidWhen": "Invalid when brand does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "modality",
"meaning": "Group by physical or virtual modality at the NWEA-account boundary.",
"useWhen": "Group by physical or virtual modality at the NWEA-account boundary.",
"invalidWhen": "Invalid when modality does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "school",
"meaning": "Group by the enrolled school sourcedId through People & Orgs.",
"useWhen": "Group by the enrolled school sourcedId through People & Orgs.",
"invalidWhen": "Invalid when school does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "cohort",
"meaning": "Group by an authorized named cohort returned by People & Orgs.",
"useWhen": "Group by an authorized named cohort returned by People & Orgs.",
"invalidWhen": "Invalid when cohort does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}group_key
- anchor
- field-alpha-report-group-growth-x-group-key
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Value of the selected group_dimension.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one report group growth x row within a tenant; downstream Results rows reference this value by its named id field.
- example
- MS
- invalidWhen
- Invalid when group_key is missing, violates its documented constraints: For school_level, must be WL, LL, L1, L2, MS, or HS.; For tenure_bucket, must be one alpha.policy.tenure_buckets value.; For brand/modality/school/cohort, must come from People & Orgs authorized joins..
- edgeCases
- group_key follows the report group growth x lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "For school_level, must be WL, LL, L1, L2, MS, or HS.", "For tenure_bucket, must be one alpha.policy.tenure_buckets value.", "For brand/modality/school/cohort, must come from People & Orgs authorized joins." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-report-group-growth-x-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report group growth x is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-report-group-growth-x-canonical-term-id
- type
- TEXT
- nullability
- Required for term-scoped rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}norms_set
- anchor
- field-alpha-report-group-growth-x-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report group growth x is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}growth_window
- anchor
- field-alpha-report-group-growth-x-growth-window
- type
- TEXT enum
- nullability
- Required.
- key
- Primary key part
- meaning
- Typed growth window used for the group Growth X answer.
- range
- One documented enum value.
- relationship
- Governed growth-window selector for this row. It replaces NWEA positional growth columns.
- example
- fall_to_spring
- invalidWhen
- Invalid when growth_window is not one of fall_to_fall, fall_to_winter, fall_to_spring, winter_to_winter, winter_to_spring, spring_to_spring, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report group growth x is written; adding a new growth_window value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "fall_to_fall",
"meaning": "Growth measured from Fall to next Fall.",
"useWhen": "Growth measured from Fall to next Fall.",
"invalidWhen": "Invalid when fall_to_fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_winter",
"meaning": "Growth measured from Fall to Winter.",
"useWhen": "Growth measured from Fall to Winter.",
"invalidWhen": "Invalid when fall_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_spring",
"meaning": "Growth measured from Fall to Spring.",
"useWhen": "Growth measured from Fall to Spring.",
"invalidWhen": "Invalid when fall_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_winter",
"meaning": "Growth measured from Winter to next Winter.",
"useWhen": "Growth measured from Winter to next Winter.",
"invalidWhen": "Invalid when winter_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_spring",
"meaning": "Growth measured from Winter to Spring.",
"useWhen": "Growth measured from Winter to Spring.",
"invalidWhen": "Invalid when winter_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring_to_spring",
"meaning": "Growth measured from Spring to next Spring.",
"useWhen": "Growth measured from Spring to next Spring.",
"invalidWhen": "Invalid when spring_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}student_count
- anchor
- field-alpha-report-group-growth-x-student-count
- type
- INTEGER
- nullability
- Required.
- key
- Aggregate value
- meaning
- Number of students with an eligible individual Growth X ratio in this group.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report group growth x; it feeds documented calculations or reports but does not identify another object.
- example
- 47
- invalidWhen
- Invalid when student_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0.; Students with null individual growth_x are excluded and counted in excluded_student_count..
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be >= 0.", "Students with null individual growth_x are excluded and counted in excluded_student_count." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}excluded_student_count
- anchor
- field-alpha-report-group-growth-x-excluded-student-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Number of otherwise in-scope students excluded because their individual Growth X ratio is null.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report group growth x; it feeds documented calculations or reports but does not identify another object.
- example
- 3
- invalidWhen
- Invalid when excluded_student_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0.; Null reasons remain on alpha.map_growth_window rows..
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be >= 0.", "Null reasons remain on alpha.map_growth_window rows." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}average_growth_x
- anchor
- field-alpha-report-group-growth-x-average-growth-x
- type
- NUMERIC(8,4)
- nullability
- Nullable.
- key
- Aggregate value
- meaning
- Average of each eligible student's individual growth_x ratio.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report group growth x; it feeds documented calculations or reports but does not identify another object.
- example
- 2.1240
- invalidWhen
- Invalid when average_growth_x is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Computed by Results as avg(alpha.map_growth_window.growth_x).", "Never compute as sum(observed_growth) / sum(projected_growth).", "Null when student_count is 0." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}growth_x_target
- anchor
- field-alpha-report-group-growth-x-growth-x-target
- type
- NUMERIC(8,4)
- nullability
- Required.
- key
- Not a key
- meaning
- Configured target used to interpret the group answer.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report group growth x; it feeds documented calculations or reports but does not identify another object.
- example
- 2.0000
- invalidWhen
- Invalid when growth_x_target is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Default is alpha.policy.growth_x_target.", "Policy version must be recorded." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}students_at_or_above_target_count
- anchor
- field-alpha-report-group-growth-x-students-at-or-above-target-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Eligible students whose individual Growth X meets or exceeds target.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report group growth x; it feeds documented calculations or reports but does not identify another object.
- example
- 29
- invalidWhen
- Invalid when students_at_or_above_target_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0.; Computed from individual ratios, not total growth sums..
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be >= 0.", "Computed from individual ratios, not total growth sums." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}policy_version
- anchor
- field-alpha-report-group-growth-x-policy-version
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Policy/config version used for group eligibility and target.
- range
- Text within documented constraints.
- relationship
- Attribute on report group growth x; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for policy_version.
- example
- growth_x_group_v2026_06
- invalidWhen
- Invalid when policy_version is missing, violates its documented constraints: Must reference alpha.policy_config..
- edgeCases
- policy_version follows the report group growth x lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- alpha.policy.*
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Policy numbers and formulas are named config read by the surface.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference alpha.policy_config." ]
allowedValues
[]
provenance
{
"label": "Policy config",
"changeType": "EXTEND + RESTRICT",
"basis": "Policy numbers and formulas are named config read by the surface.",
"upstream": "alpha.policy.*",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
}computed_at
- anchor
- field-alpha-report-group-growth-x-computed-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- UTC timestamp when the surface produced this group row.
- range
- UTC timestamp.
- relationship
- Time value on report group growth x; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-05T14:31:00Z
- invalidWhen
- Invalid when computed_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be UTC." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}alpha.report_student_progress_animation · Student progress animation feed
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from Results owned tables and approved upstream surfaces.
- purpose
- Report-ready frames for student_progress_animation without local 99-level, Growth X, or effective-grade math.
- lifecycle
- Read-only report view generated by the Results surface. Consumers and skill packs call it; they do not reproduce its calculations.
- primaryKey
- (tenant_id, student_id, subject_id, frame_index)
- storage
- Report-ready read view for animation frames; reads 99-level, Growth X, effective grade, and working grade from the surface.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-report-student-progress-animation
- fieldCount
- 9
itds
[
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Reads from Results-owned source objects and authorized joined cohort fields." ]
constraints
[ "No client-side norms tables, dedupe, term parsing, growth-window switches, mastery math, or report calculators are required." ]
invalidExamples
[ "Skill pack includes a norms table.", "Client computes this report from raw NWEA rows." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"student_id": "stu_timeback_10017",
"subject_id": "math",
"frame_index": "12",
"frame_date": "2026-06-03"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (9)
tenant_id
- anchor
- field-alpha-report-student-progress-animation-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-report-student-progress-animation-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-report-student-progress-animation-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report student progress animation is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}frame_index
- anchor
- field-alpha-report-student-progress-animation-frame-index
- type
- INTEGER
- nullability
- Required.
- key
- Sort key
- meaning
- Ordered frame number.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report student progress animation; it feeds documented calculations or reports but does not identify another object.
- example
- 12
- invalidWhen
- Invalid when frame_index is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0..
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be >= 0." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}frame_date
- anchor
- field-alpha-report-student-progress-animation-frame-date
- type
- DATE
- nullability
- Required.
- key
- Not a key
- meaning
- Date represented by the frame.
- range
- ISO 8601 calendar date.
- relationship
- Time value on report student progress animation; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03
- invalidWhen
- Invalid when frame_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "ISO 8601 date." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}working_grade
- anchor
- field-alpha-report-student-progress-animation-working-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Working grade for this frame.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report student progress animation; it feeds documented calculations or reports but does not identify another object.
- example
- 7.40
- invalidWhen
- Invalid when working_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Read from alpha.working_grade..
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Advancement is a Results-owned formula output over working-grade and MAP evidence.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.working_grade." ]
allowedValues
[]
provenance
{
"label": "Advancement output",
"changeType": "EXTEND",
"basis": "Advancement is a Results-owned formula output over working-grade and MAP evidence.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
}
]
}effective_grade
- anchor
- field-alpha-report-student-progress-animation-effective-grade
- type
- NUMERIC(5,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Effective grade for this frame when MAP input exists.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report student progress animation; it feeds documented calculations or reports but does not identify another object.
- example
- 6.40
- invalidWhen
- Invalid when effective_grade is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Read from alpha.map_effective_grade..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_effective_grade." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}growth_x
- anchor
- field-alpha-report-student-progress-animation-growth-x
- type
- NUMERIC(8,4)
- nullability
- Nullable.
- key
- Not a key
- meaning
- Growth X visible at this frame.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report student progress animation; it feeds documented calculations or reports but does not identify another object.
- example
- 2.0000
- invalidWhen
- Invalid when growth_x is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- When projected growth is zero or unavailable, Growth X is null with null_reason; consumers never divide locally.
- upstreamSource
- NWEA observed/projected growth plus Alpha policy
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Growth X and 2X target are first-class stored Results fields.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_growth_window." ]
allowedValues
[]
provenance
{
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
}levels_above_99
- anchor
- field-alpha-report-student-progress-animation-levels-above-99
- type
- NUMERIC(6,2)
- nullability
- Nullable.
- key
- Not a key
- meaning
- 99-level value visible at this frame.
- range
- Decimal number within documented constraints.
- relationship
- Numeric value on report student progress animation; it feeds documented calculations or reports but does not identify another object.
- example
- 1.60
- invalidWhen
- Invalid when levels_above_99 is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Read from alpha.map_99_level..
- upstreamSource
- NWEA RIT observations plus Alpha calculators
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Read from alpha.map_99_level." ]
allowedValues
[]
provenance
{
"label": "Effective grade",
"changeType": "EXTEND",
"basis": "RIT50/RIT90/effective grade outputs are surface-owned and provenance-tagged.",
"upstream": "NWEA RIT observations plus Alpha calculators",
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
}alpha.report_closed_loop_reconciliation · Closed-loop reconciliation report
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from Results owned tables and approved upstream surfaces.
- purpose
- Compares TimeBack Production old answers and Alpha surface answers for RIT, Growth X, HMG, mastery, minutes, and historical result-record XP reconciliation keys. Migration uses studentId as the typed single-student filter for one-student cutover checks; raw NWEA StudentID is not accepted here.
- lifecycle
- Read-only report view generated by the Results surface. Consumers and skill packs call it; they do not reproduce its calculations.
- primaryKey
- (tenant_id, metric_kind, student_id, subject_id, canonical_term_id, kc_id, activity_date, import_id)
- storage
- Report-ready read view for old-vs-Alpha reconciliation keys; the surface returns the comparison answer.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-report-closed-loop-reconciliation
- fieldCount
- 13
itds
[
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Reads from Results-owned source objects and authorized joined cohort fields." ]
constraints
[ "No client-side norms tables, dedupe, term parsing, growth-window switches, mastery math, or report calculators are required." ]
invalidExamples
[ "Skill pack includes a norms table.", "Client computes this report from raw NWEA rows." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"student_id": "stu_timeback_10017",
"subject_id": "math",
"canonical_term_id": "term_2025_26_spring",
"import_id": "import_timeback_prod_results_2026_06_08T15"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (13)
tenant_id
- anchor
- field-alpha-report-closed-loop-reconciliation-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}student_id
- anchor
- field-alpha-report-closed-loop-reconciliation-student-id
- type
- TEXT
- nullability
- Required.
- key
- Join key
- meaning
- TimeBack student id used by teachers, parents, and reports. This replaces NWEA StudentID in public Alpha views and aliases the OneRoster user identity.
- range
- Text within documented constraints.
- relationship
- Belongs to exactly one Alpha student; one student has many Results rows.
- example
- stu_timeback_10017
- invalidWhen
- Invalid when student_id is missing for a per-student row, belongs to another tenant, names a non-student user, or uses raw NWEA StudentID/email instead of the TimeBack id.
- edgeCases
- NWEA StudentID and email may remain in source evidence or joined display fields, but cohort queries key on TimeBack student_id.
- upstreamSource
- OneRoster user plus NWEA StudentID source evidence
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- TimeBack student identity replaces source-specific student identifiers in public Alpha views.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required for every per-student Results fact.", "Must reference the People & Orgs student identity in the same tenant.", "Do not parse or substitute NWEA StudentID for this field." ]
allowedValues
[]
provenance
{
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
}subject_id
- anchor
- field-alpha-report-closed-loop-reconciliation-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Join/filter key
- meaning
- Canonical alpha.subject value used for Results reports and formulas after write-time source alias folding. Consumers filter on this typed field instead of parsing test names, NWEA Subject, or TimeBack metadata strings.
- range
- One documented enum value.
- relationship
- References the governed Alpha subject registry. Many Results rows can share one canonical subject.
- example
- math
- invalidWhen
- Invalid when subject_id is not one of math, reading, language, science, vocabulary, writing, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report closed loop reconciliation is written; adding a new subject_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA Subject and Alpha subject registry
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Subject is a canonical governed id with alias folding at write time.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Closed enum: math, reading, language, science, vocabulary, writing.", "MAP-measured subset is math, reading, language, science.", "Vocabulary and writing proxy to language for MAP RIT/Growth X reads.", "FastMath source aliases proxy to math for MAP/reporting but must never persist as subject_id=fastmath.", "Social Studies, bare ELA groups, blank/None/Other/General/Unknown, and dev/screener junk are excluded or quarantined by the adapter, not emitted as public subjects." ]
allowedValues
[
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}canonical_term_id
- anchor
- field-alpha-report-closed-loop-reconciliation-canonical-term-id
- type
- TEXT
- nullability
- Nullable; required for MAP/RIT/Growth X rows.
- key
- Join/filter key
- meaning
- Typed academic term id. This is the term field clients use instead of parsing NWEA TermName.
- range
- Text within documented constraints.
- relationship
- References the canonical academic session/term from People & Orgs.
- example
- term_2025_26_spring
- invalidWhen
- Invalid when canonical_term_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- OneRoster academicSession and NWEA TermName
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Term is a typed canonical id plus season and school_year, never read-time parsing.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference the canonical academic-session/term registry for the tenant.", "When the source only has NWEA TermName, the ingest adapter resolves it before writes become public Alpha rows." ]
allowedValues
[]
provenance
{
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
}import_id
- anchor
- field-alpha-report-closed-loop-reconciliation-import-id
- type
- TEXT
- nullability
- Nullable.
- key
- Filter key
- meaning
- Import id whose materialized rows are being reconciled, when the comparison follows a raw-ingest batch.
- range
- Text within documented constraints.
- relationship
- Many reconciliation rows may belong to one raw import.
- example
- import_timeback_prod_results_2026_06_08T15
- invalidWhen
- Invalid when import_id points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "When present, must reference source evidence written by POST /alpha/results/v1/imports.", "Used for migration cutover evidence, not as the student key." ]
allowedValues
[]
provenance
{
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}source_shape
- anchor
- field-alpha-report-closed-loop-reconciliation-source-shape
- type
- TEXT enum
- nullability
- Nullable; required when import_id is present.
- key
- Not a key
- meaning
- Source-shaped producer family used by the import being reconciled.
- range
- One documented enum value.
- relationship
- Governed value on report closed loop reconciliation; no free-text relationship, and consumers must use the documented enum values.
- example
- timeback_assessment_result
- invalidWhen
- Invalid when source_shape is not one of timeback_assessment_result, nwea_map_assessment_result, results_next_task_decision, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report closed loop reconciliation is written; adding a new source_shape value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha-only; no upstream
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented raw_import_source_shape value when present.", "Do not infer source shape from producer_batch_id text." ]
allowedValues
[
{
"value": "timeback_assessment_result",
"meaning": "Raw TimeBack Production assessment/result row. The caller sends the source row as-is; Results resolves student, subject, term, content/test family, score evidence, KC evidence, mastery, XP, and report rows server-side.",
"useWhen": "Raw TimeBack Production assessment/result row. The caller sends the source row as-is; Results resolves student, subject, term, content/test family, score evidence, KC evidence, mastery, XP, and report rows server-side.",
"invalidWhen": "Invalid when timeback_assessment_result does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "nwea_map_assessment_result",
"meaning": "Raw NWEA MAP Growth CDF AssessmentResults row. The caller sends NWEA field names such as StudentID, TermName, Subject, TestID, TestRITScore, NormsReferenceData, and GoalN fields; Results routes through the NWEAMap base contract and materializes public MAP reads server-side.",
"useWhen": "Raw NWEA MAP Growth CDF AssessmentResults row. The caller sends NWEA field names such as StudentID, TermName, Subject, TestID, TestRITScore, NormsReferenceData, and GoalN fields; Results routes through the NWEAMap base contract and materializes public MAP reads server-side.",
"invalidWhen": "Invalid when nwea_map_assessment_result does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}metric_kind
- anchor
- field-alpha-report-closed-loop-reconciliation-metric-kind
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Metric being reconciled.
- range
- One documented enum value.
- relationship
- Governed value on report closed loop reconciliation; no free-text relationship, and consumers must use the documented enum values.
- example
- growth_x
- invalidWhen
- Invalid when metric_kind is not one of rit, growth_x, highest_mastered_grade, student_kc_state, minutes, xp_award, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report closed loop reconciliation is written; adding a new metric_kind value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "rit",
"meaning": "RIT per student/subject/term.",
"useWhen": "RIT per student/subject/term.",
"invalidWhen": "Invalid when rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "growth_x",
"meaning": "Growth X per student/subject/term.",
"useWhen": "Growth X per student/subject/term.",
"invalidWhen": "Invalid when growth_x does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "highest_mastered_grade",
"meaning": "Highest mastered grade per student/subject/as-of date.",
"useWhen": "Highest mastered grade per student/subject/as-of date.",
"invalidWhen": "Invalid when highest_mastered_grade does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "student_kc_state",
"meaning": "Four-state KC state per student/KC.",
"useWhen": "Four-state KC state per student/KC.",
"invalidWhen": "Invalid when student_kc_state does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "minutes",
"meaning": "Minutes per student/day, read from Events surface.",
"useWhen": "Minutes per student/day, read from Events surface.",
"invalidWhen": "Invalid when minutes does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "xp_award",
"meaning": "Typed reconciliation result for a historical public result-record XP award or non-award.",
"useWhen": "Repairing accepted public result records that predate atomic XP materialization.",
"invalidWhen": "Invalid when the row does not name a typed XP non-award reason or matching ledger evidence.",
"provenance": {
"label": "Results-owned XP reconciliation",
"basis": "alpha.policy.xp_award_formula public result-record trigger.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}kc_id
- anchor
- field-alpha-report-closed-loop-reconciliation-kc-id
- type
- TEXT
- nullability
- Nullable; required for student_kc_state metric.
- key
- Not a key
- meaning
- Curriculum KC id for KC-state reconciliation.
- range
- Text within documented constraints.
- relationship
- References one Curriculum KC.
- example
- kc_linear_equations
- invalidWhen
- Invalid when kc_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha extension over Curriculum KC ids
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Per-student knowledge state lives in Results, not People & Orgs or Curriculum.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must reference Curriculum KC when metric_kind is student_kc_state." ]
allowedValues
[]
provenance
{
"label": "Student KC overlay",
"changeType": "EXTEND",
"basis": "Per-student knowledge state lives in Results, not People & Orgs or Curriculum.",
"upstream": "Alpha extension over Curriculum KC ids",
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
}activity_date
- anchor
- field-alpha-report-closed-loop-reconciliation-activity-date
- type
- DATE
- nullability
- Nullable; required for minutes metric.
- key
- Not a key
- meaning
- Date for Events minutes reconciliation.
- range
- ISO 8601 calendar date.
- relationship
- Time value on report closed loop reconciliation; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03
- invalidWhen
- Invalid when activity_date is missing, is not an ISO calendar date or violates the documented begin/end/term constraint.
- edgeCases
- Dates are calendar dates, not instants; timezone conversion must happen before this field is written.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Minutes belong to Events, but reconciliation reports show the comparison key." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}old_value
- anchor
- field-alpha-report-closed-loop-reconciliation-old-value
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Value returned by old TimeBack Production for this key.
- range
- Text within documented constraints.
- relationship
- Attribute on report closed loop reconciliation; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for old_value.
- example
- 2.0000
- invalidWhen
- Invalid when old_value violates its documented constraints: Stored as text for cross-metric comparison display.; Do not use as canonical Results value..
- edgeCases
- old_value follows the report closed loop reconciliation lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Stored as text for cross-metric comparison display.", "Do not use as canonical Results value." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}alpha_value
- anchor
- field-alpha-report-closed-loop-reconciliation-alpha-value
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Value returned by the Alpha surface for this key.
- range
- Text within documented constraints.
- relationship
- Attribute on report closed loop reconciliation; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for alpha_value.
- example
- 2.0000
- invalidWhen
- Invalid when alpha_value violates its documented constraints: Stored as text for comparison display.; Canonical value remains in the source Alpha object..
- edgeCases
- alpha_value follows the report closed loop reconciliation lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Stored as text for comparison display.", "Canonical value remains in the source Alpha object." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}reconcile_status
- anchor
- field-alpha-report-closed-loop-reconciliation-reconcile-status
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Whether old and Alpha answers match for this key.
- range
- One documented enum value.
- relationship
- Governed value on report closed loop reconciliation; no free-text relationship, and consumers must use the documented enum values.
- example
- match
- invalidWhen
- Invalid when reconcile_status is not one of match, mismatch, missing_old, missing_alpha, not_applicable, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report closed loop reconciliation is written; adding a new reconcile_status value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented value." ]
allowedValues
[
{
"value": "match",
"meaning": "Old production and Alpha surface answers are identical for the reconciliation key.",
"useWhen": "Old production and Alpha surface answers are identical for the reconciliation key.",
"invalidWhen": "Invalid when match does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "mismatch",
"meaning": "Both sides returned values but they differ.",
"useWhen": "Both sides returned values but they differ.",
"invalidWhen": "Invalid when mismatch does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_old",
"meaning": "The Alpha surface has a value that old production did not return.",
"useWhen": "The Alpha surface has a value that old production did not return.",
"invalidWhen": "Invalid when missing_old does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "missing_alpha",
"meaning": "Old production has a value the Alpha surface did not return.",
"useWhen": "Old production has a value the Alpha surface did not return.",
"invalidWhen": "Invalid when missing_alpha does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "not_applicable",
"meaning": "The metric is not expected for this key.",
"useWhen": "The metric is not expected for this key.",
"invalidWhen": "Invalid when not_applicable does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}mismatch_detail
- anchor
- field-alpha-report-closed-loop-reconciliation-mismatch-detail
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Human-readable explanation when values differ.
- range
- Text within documented constraints.
- relationship
- Attribute on report closed loop reconciliation; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for mismatch_detail.
- example
- Old value used local dedupe; Alpha used highest-RIT test_of_record.
- invalidWhen
- Invalid when mismatch_detail violates its documented constraints: Required when reconcile_status is mismatch.; Should name the earliest source artifact or adapter evidence if known..
- edgeCases
- mismatch_detail follows the report closed loop reconciliation lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required when reconcile_status is mismatch.", "Should name the earliest source artifact or adapter evidence if known." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}alpha.report_answer_key · Report answer key
- kind
- Report-ready read view
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Derived from Results owned tables and approved upstream surfaces.
- purpose
- Golden rows and hashes used by the skill pack to prove it asks the surface correctly without carrying logic.
- lifecycle
- Read-only report view generated by the Results surface. Consumers and skill packs call it; they do not reproduce its calculations.
- primaryKey
- (tenant_id, example_id, report_id, norms_set)
- storage
- Report-ready read view for worked-example answer keys; stores platform-owned expected answers for skill-pack checks.
- writePath
- Read-only report output generated by the Results surface; consumers never write or recompute it.
- anchor
- table-alpha-report-answer-key
- fieldCount
- 8
itds
[
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]relationships
[ "Reads from Results-owned source objects and authorized joined cohort fields." ]
constraints
[ "No client-side norms tables, dedupe, term parsing, growth-window switches, mastery math, or report calculators are required." ]
invalidExamples
[ "Skill pack includes a norms table.", "Client computes this report from raw NWEA rows." ]
example
{
"tenant_id": "0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3",
"example_id": "map_quadrants_2025_norms_demo",
"report_id": "map_quadrants",
"norms_set": "2025",
"request_params": "{\"normsSet\":\"2025\",\"subject\":\"math\"}"
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (8)
tenant_id
- anchor
- field-alpha-report-answer-key-tenant-id
- type
- UUID
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Platform tenant boundary. Every Results row belongs to exactly one tenant and reads must match the JWT tenant claim.
- range
- PostgreSQL UUID.
- relationship
- Belongs to exactly one platform.tenant row. One tenant has many Results rows.
- example
- 0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3
- invalidWhen
- Invalid when tenant_id is missing, does not match the JWT tenant claim, or points to a tenant outside the caller's authorized scope.
- edgeCases
- The demo tenant and real tenants share the same shape; every query still scopes by tenant_id from the token.
- upstreamSource
- platform.tenant.tenant_id
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Tenant routing inherited from platform and applied by Results.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Required on every persisted Results object.", "Must reference platform.tenant(tenant_id).", "Must match the authenticated tenant_id claim." ]
allowedValues
[]
provenance
{
"label": "Platform shared",
"changeType": "PASS-THROUGH",
"basis": "Tenant routing inherited from platform and applied by Results.",
"upstream": "platform.tenant.tenant_id",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
}
]
}example_id
- anchor
- field-alpha-report-answer-key-example-id
- type
- TEXT
- nullability
- Required.
- key
- Primary key part
- meaning
- Stable id of the worked example.
- range
- Text within documented constraints.
- relationship
- Primary identifier for one report answer key row within a tenant; downstream Results rows reference this value by its named id field.
- example
- map_quadrants_2025_norms_demo
- invalidWhen
- Invalid when example_id is missing, points outside the tenant, names a deleted source row without audit scope, or carries a raw producer id after Alpha resolution was required.
- edgeCases
- During migration, source ids can remain in source_evidence, but public Alpha rows continue to expose this resolved Results id.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Unique within tenant and report_id." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}report_id
- anchor
- field-alpha-report-answer-key-report-id
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Report view the example exercises.
- range
- One documented enum value.
- relationship
- References report in the same tenant when present; many report answer key rows may point to one referenced report.
- example
- map_quadrants
- invalidWhen
- Invalid when report_id is not one of map_quadrants, retake_audit, growth_over_time, norms_isolation, growth_breakdown, group_growth_x, closed_loop_reconciliation, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report answer key is written; adding a new report_id value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be one documented report view." ]
allowedValues
[
{
"value": "map_quadrants",
"meaning": "MAP quadrants report.",
"useWhen": "MAP quadrants report.",
"invalidWhen": "Invalid when map_quadrants does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "retake_audit",
"meaning": "MAP retake audit report.",
"useWhen": "MAP retake audit report.",
"invalidWhen": "Invalid when retake_audit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "growth_over_time",
"meaning": "Growth-over-time report.",
"useWhen": "Growth-over-time report.",
"invalidWhen": "Invalid when growth_over_time does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "norms_isolation",
"meaning": "Norms-isolation variant.",
"useWhen": "Norms-isolation variant.",
"invalidWhen": "Invalid when norms_isolation does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "growth_breakdown",
"meaning": "Growth breakdown report.",
"useWhen": "Growth breakdown report.",
"invalidWhen": "Invalid when growth_breakdown does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "group_growth_x",
"meaning": "Group Growth X report using average of student ratios.",
"useWhen": "Group Growth X report using average of student ratios.",
"invalidWhen": "Invalid when group_growth_x does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "closed_loop_reconciliation",
"meaning": "Closed-loop reconciliation report.",
"useWhen": "Closed-loop reconciliation report.",
"invalidWhen": "Invalid when closed_loop_reconciliation does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}norms_set
- anchor
- field-alpha-report-answer-key-norms-set
- type
- TEXT enum
- nullability
- Required for normed MAP rows.
- key
- Filter key
- meaning
- NWEA norms set used for the observation, calculator output, or report row. One row never mixes norms.
- range
- One documented enum value.
- relationship
- Governed norms selector for this row. It is not a foreign key, but reports must group and filter on it.
- example
- 2025
- invalidWhen
- Invalid when norms_set is not one of 2020, 2025, or when a source display string bypasses write-time alias folding.
- edgeCases
- Alias folding happens before report answer key is written; adding a new norms_set value requires a governed registry or architecture update, not consumer parsing.
- upstreamSource
- NWEA NormsReferenceData plus Alpha restriction
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Every normed MAP output carries exactly one norms_set.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Allowed values are currently 2020 or 2025.", "Consumers regenerate a report under another norms set by changing the normsSet parameter, not by shipping norms tables." ]
allowedValues
[
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]provenance
{
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
}request_params
- anchor
- field-alpha-report-answer-key-request-params
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Exact surface request parameters for the worked example.
- range
- JSON value matching documented schema.
- relationship
- Structured payload on report answer key; typed references inside it are audit evidence, not a substitute for documented relationship fields.
- example
- {"normsSet":"2025","subject":"math"}
- invalidWhen
- Invalid when request_params is malformed JSON, fails the named schema, contains secrets, or hides a relationship that the dictionary requires as a real field.
- edgeCases
- Empty JSON is valid only when the schema allows it; raw payloads, credentials, and free-form policy are rejected.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be a JSON object.", "May include endpoint path and query parameters but no credentials." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}expected_row_count
- anchor
- field-alpha-report-answer-key-expected-row-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Number of rows the surface should return for the example.
- range
- Integer within documented constraints.
- relationship
- Numeric value on report answer key; it feeds documented calculations or reports but does not identify another object.
- example
- 42
- invalidWhen
- Invalid when expected_row_count is missing, is outside its documented bounds or is locally recomputed by a consumer instead of read from the surface.
- edgeCases
- Boundary values are valid only when the constraints allow them: Must be >= 0..
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be >= 0." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}expected_result_hash
- anchor
- field-alpha-report-answer-key-expected-result-hash
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Hash of the canonical response used by skill-pack self-checks.
- range
- Text within documented constraints.
- relationship
- Attribute on report answer key; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for expected_result_hash.
- example
- sha256:bc932e2b
- invalidWhen
- Invalid when expected_result_hash is missing, violates its documented constraints: Use sha256-prefixed digest.; Hash the platform answer, not local computed output..
- edgeCases
- expected_result_hash follows the report answer key lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Use sha256-prefixed digest.", "Hash the platform answer, not local computed output." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}verified_at
- anchor
- field-alpha-report-answer-key-verified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- UTC time the surface last verified the answer key.
- range
- UTC timestamp.
- relationship
- Time value on report answer key; used for point-in-time, lifecycle, sorting, or polling semantics.
- example
- 2026-06-03T18:55:00Z
- invalidWhen
- Invalid when verified_at is missing, is not UTC, cannot be ordered reliably, or is used to infer a typed term at read time.
- edgeCases
- Clock ties use the table's documented tie-breakers; modifiedSince polling should treat equal timestamps as cursor-sensitive.
- upstreamSource
- Alpha report view extension
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Report outputs are surface-owned so skill packs carry no report logic.
- storageBehavior
- Storage follows the object storage rule above.
constraints
[ "Must be UTC." ]
allowedValues
[]
provenance
{
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
}alpha.assessment_finalization · Assessment finalization
- kind
- Alpha extension read
- moduleHome
- Results
- changeType
- NEW PUBLIC CONTRACT
- upstream
- Question-level alpha.result_record evidence plus Curriculum gate policy and remediation pockets.
- purpose
- One durable server-owned receipt and read model for a placement or test-out attempt after all question_result evidence has been acknowledged.
- lifecycle
- Created by POST /alpha/results/v1/assessment-finalizations/finalize. Replays return the same finalization; changed evidence for the same attempt conflicts.
- primaryKey
- (tenant_id, finalization_id)
- storage
- Alpha extension table projected as a public Results read view.
- writePath
- Write only through POST /alpha/results/v1/assessment-finalizations/finalize.
- anchor
- table-alpha-assessment-finalization
- fieldCount
- 36
itds
[
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
},
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]relationships
[ "Belongs to one student and subject.", "References the final result_record produced by Results.", "References the complete question_result evidence set.", "May cause mastery_ledger, gate_pass, working_grade, advancement, student_track_state, and next_task rows." ]
constraints
[ "task_type is placement or test_out.", "outcome_status is placed, passed, or failed.", "Every supplied question_result must carry the exact attempt_id, task_type, task_id, form_id, gate_content_id, source_adapter_id, and subject date being finalized.", "The supplied ids must equal the full active question_result set for the tenant, student, subject, source adapter, and attempt; callers cannot finalize a subset.", "The gate must be a published Curriculum mastery_gate for the subject and attempted grade, the form must be its target or a referenced form, and callers cannot override its passing_criteria_ref.", "The frozen evidence set is immutable for the finalization id.", "Failures must expose selected_remediation, not only generic on_fail policy." ]
invalidExamples
[ "An app computes pass/fail locally from question_result rows.", "A failing test-out returns only retry policy with no student-specific remediation.", "A guide readback derives working grade movement instead of reading the finalization/result rows." ]
example
{
"finalization_id": "assessment_finalization_abc123",
"student_id": "stu_timeback_10018",
"subject_id": "science",
"task_type": "test_out",
"outcome_status": "failed",
"passed": false,
"selected_remediation": [
{
"assigned_component_ref": "lesson_science_decimal_place_value_intro"
}
]
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (36)
finalization_id
- anchor
- field-alpha-assessment-finalization-finalization-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Primary key
- meaning
- Durable id for one platform-owned placement or test-out finalization.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}tenant_id
- anchor
- field-alpha-assessment-finalization-tenant-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Tenant-scoped key
- meaning
- Assessment finalization tenant_id.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}student_id
- anchor
- field-alpha-assessment-finalization-student-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- TimeBack student id whose attempt was finalized.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: Identifier
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}subject_id
- anchor
- field-alpha-assessment-finalization-subject-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Canonical Results subject for the finalized task.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}task_type
- anchor
- field-alpha-assessment-finalization-task-type
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Finalized task family: placement or test_out.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- test_out
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[ "placement", "test_out" ]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}task_id
- anchor
- field-alpha-assessment-finalization-task-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Task instance submitted by the learner.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}form_id
- anchor
- field-alpha-assessment-finalization-form-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Assigned form that was adjudicated.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}gate_content_id
- anchor
- field-alpha-assessment-finalization-gate-content-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Curriculum gate/form component whose policy was applied.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}attempt_id
- anchor
- field-alpha-assessment-finalization-attempt-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Attempt id binding the frozen evidence set.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}result_record_id
- anchor
- field-alpha-assessment-finalization-result-record-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Authoritative result_record produced by the finalization.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}evidence_result_record_ids
- anchor
- field-alpha-assessment-finalization-evidence-result-record-ids
- type
- JSONB array
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Complete ordered question_result evidence set used to score the attempt.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}evidence_hash
- anchor
- field-alpha-assessment-finalization-evidence-hash
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Canonical hash of the task binding and evidence rows.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}declared_question_count
- anchor
- field-alpha-assessment-finalization-declared-question-count
- type
- INTEGER
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Expected count of question_result evidence records.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}answered_question_count
- anchor
- field-alpha-assessment-finalization-answered-question-count
- type
- INTEGER
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Count of supplied question_result evidence records.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}correct_count
- anchor
- field-alpha-assessment-finalization-correct-count
- type
- INTEGER
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Count of evidence questions scored correct by Results.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}score_percent
- anchor
- field-alpha-assessment-finalization-score-percent
- type
- NUMERIC
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Server-computed percent over the frozen evidence set.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}passing_criteria_ref
- anchor
- field-alpha-assessment-finalization-passing-criteria-ref
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Policy reference used for pass/fail adjudication.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}passing_score_percent
- anchor
- field-alpha-assessment-finalization-passing-score-percent
- type
- NUMERIC
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Policy cutoff percent applied server-side.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}on_fail
- anchor
- field-alpha-assessment-finalization-on-fail
- type
- JSONB object
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Gate failure policy payload read from Curriculum/Policy.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}outcome_status
- anchor
- field-alpha-assessment-finalization-outcome-status
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Authoritative final outcome: placed, passed, or failed.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- failed
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[ "placed", "passed", "failed" ]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}passed
- anchor
- field-alpha-assessment-finalization-passed
- type
- BOOLEAN
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Whether the attempt met the passing criteria.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}placed_grade_level
- anchor
- field-alpha-assessment-finalization-placed-grade-level
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Placement level when the task is placement.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}attempted_grade_level
- anchor
- field-alpha-assessment-finalization-attempted-grade-level
- type
- NUMERIC
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Grade level represented by the finalized form/gate.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}working_grade_before
- anchor
- field-alpha-assessment-finalization-working-grade-before
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Most recent Results working grade before this finalization date, if any.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}working_grade_after
- anchor
- field-alpha-assessment-finalization-working-grade-after
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Results working grade after a pass-generated movement, if any.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}grades_mastered_sytd
- anchor
- field-alpha-assessment-finalization-grades-mastered-sytd
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Mastery-pure gradesMasteredSytd returned by the finalization write path.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when grades_mastered_sytd disagrees with the same named alpha.advancement row materialized by finalization.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[ "Must equal max(0, working_grade_after - the captured school-year-start working grade)." ]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}map_baseline_grade_delta_not_grades_mastered
- anchor
- field-alpha-assessment-finalization-map-baseline-grade-delta-not-grades-mastered
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Explicitly non-grades-mastered MAP-baseline placement delta returned by the finalization write path.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when map_baseline_grade_delta_not_grades_mastered disagrees with the same named alpha.advancement row materialized by finalization.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[ "Placement/reporting context only; must never be called grades mastered." ]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}advancement_value
- anchor
- field-alpha-assessment-finalization-advancement-value
- type
- NUMERIC
- nullability
- Nullable.
- key
- Not a key
- meaning
- Deprecated alias fixed to grades_mastered_sytd.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when advancement_value differs from grades_mastered_sytd or varies by write path.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[ "Must equal grades_mastered_sytd." ]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}selected_remediation
- anchor
- field-alpha-assessment-finalization-selected-remediation
- type
- JSONB array
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Student-specific remediation selected for a failing attempt.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}source_adapter_id
- anchor
- field-alpha-assessment-finalization-source-adapter-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Adapter or app identity that requested finalization.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}producer_result_id
- anchor
- field-alpha-assessment-finalization-producer-result-id
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Transport idempotency key stored as producer reference for the finalization result.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}source_evidence_refs
- anchor
- field-alpha-assessment-finalization-source-evidence-refs
- type
- JSONB array
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Policy, evidence, and source references supporting the finalization.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}policy_version
- anchor
- field-alpha-assessment-finalization-policy-version
- type
- TEXT
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Assessment finalization policy version used by Results.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}as_of_date
- anchor
- field-alpha-assessment-finalization-as-of-date
- type
- DATE
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- Point-in-time date for guide/student readback.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}finalized_at
- anchor
- field-alpha-assessment-finalization-finalized-at
- type
- TIMESTAMPTZ
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- UTC instant when Results finalized the attempt.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}modified_at
- anchor
- field-alpha-assessment-finalization-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required when applicable.
- key
- Not a key
- meaning
- UTC timestamp when the finalization row last changed.
- range
- See public Results contract.
- relationship
- Field on alpha.assessment_finalization; consumers read it rather than recomputing finalization state.
- example
- invalidWhen
- Invalid when missing from a required finalization row or locally recomputed by a consumer.
- edgeCases
- Duplicate finalization attempts return the same durable reference only when the frozen evidence set is unchanged.
- upstreamSource
- Results finalization operation
- privacyTag
- PII: No
- indexPolicy
- Index only when this field appears in the table key, documented unique constraint, or listed query model.
- sourceBasis
- Server-owned placement/test-out finalization.
- storageBehavior
- Alpha extension storage projected through alpha.assessment_finalization.
constraints
[]
allowedValues
[]
provenance
{
"label": "Results-owned finalization",
"changeType": "DERIVED WRITE",
"basis": "Results freezes question_result evidence and applies Curriculum/Policy criteria server-side.",
"upstream": "alpha.result_record question_result and Curriculum gate policy"
}alpha.pp100_attempt · PowerPath 100 attempt
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Curriculum owns the gate and policy reference; Content owns the blueprint, exact adaptive bank pool, DOK/tier/rigor calibration, KC attribution, and answer keys.
- purpose
- Freezes the authoritative exact bank question pool and deterministic selection seed, then stores the server-owned score and session boundary for one PP100 score-to-100 walk.
- lifecycle
- Created before question 1; updated only by the next exact immutable response; paused after 30 responses in one session for remediation; resumed as the same attempt with score and history intact; terminal only at score 100. Immutable historical v1 attempts retain their original fixed-form terminal rules.
- primaryKey
- (tenant_id, attempt_id)
- fieldCount
- 28
- storage
- Alpha extension table projected as a public Results read view.
- writePath
- Create through POST /alpha/results/v1/pp100/attempts; advance only through its response subresource.
- anchor
- table-alpha-pp100-attempt
itds
[]
relationships
[ "Belongs to one student and Curriculum gate.", "References one exact Content adaptive bank; historical v1 rows may also reference one exact form.", "Freezes at least eight unique eligible question families spanning the blueprint's required difficulty bands and has an unbounded recoverable response walk divided into at most 30-response sessions." ]
constraints
[ "New attempts use alpha.policy.pp100_lesson_mastery.v2; alpha.policy.pp100_lesson_mastery.v1 is accepted only to replay immutable historical attempts.", "The frozen v2 pool has distinct exact question versions and item families, accepted tier calibration, easy/medium/hard coverage, and standardized-test-rigor evidence for every hard item unless the blueprint is prerequisite.", "The deterministic score transition and next-question selection are replayed from immutable response evidence; score 90–99 has no downward fallback unless prerequisite.", "A pause is not failure and cannot reset score or evidence. Terminal mastery cannot be reopened or alter HMG/working grade; spaced retrieval becomes eligible only at exactly 100.", "At most one in-progress or paused attempt may exist for a tenant, student, and gate; another start resumes its accepted first-response evidence." ]
invalidExamples
[ "A browser-provided score or difficulty tier.", "A mutable latest-version reference.", "A PP100 pass written into highest_mastered_grade or working_grade." ]
example
{
"attempt_id": "018f4b4e-9c7a-7d3d-8b2f-2f673a002012",
"status": "mastered",
"current_score": 100,
"correct_count": 11,
"hard_correct_count": 3
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (28)
attempt_id
- anchor
- field-alpha-pp100_attempt-attempt-id
- type
- UUID
- nullability
- Required.
- key
- Not a key
- meaning
- Stable PP100 attempt id.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}tenant_id
- anchor
- field-alpha-pp100_attempt-tenant-id
- type
- TEXT
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Tenant boundary.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}student_id
- anchor
- field-alpha-pp100_attempt-student-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Student whose independent evidence is evaluated.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: Identifier
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}subject_id
- anchor
- field-alpha-pp100_attempt-subject-id
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Canonical Results subject.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}gate_component_id
- anchor
- field-alpha-pp100_attempt-gate-component-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Owning Curriculum mastery gate.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}lesson_component_id
- anchor
- field-alpha-pp100_attempt-lesson-component-id
- type
- TEXT
- nullability
- Nullable.
- key
- Not a key
- meaning
- Lesson used for remediation.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}bank_content_id
- anchor
- field-alpha-pp100_attempt-bank-content-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Exact Content bank id.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}bank_version_id
- anchor
- field-alpha-pp100_attempt-bank-version-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Frozen bank version.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}form_content_id
- anchor
- field-alpha-pp100_attempt-form-content-id
- type
- TEXT
- nullability
- Nullable for v2; required for historical v1.
- key
- Not a key
- meaning
- Historical v1 Curriculum-selected Content form; null for v2 adaptive-pool attempts.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}form_version_id
- anchor
- field-alpha-pp100_attempt-form-version-id
- type
- TEXT
- nullability
- Nullable for v2; required for historical v1.
- key
- Not a key
- meaning
- Historical v1 frozen form version; null for v2 adaptive-pool attempts.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}policy_ref
- anchor
- field-alpha-pp100_attempt-policy-ref
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- Exact PP100 policy reference: v2 for new score walks, v1 only for immutable historical replay.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}question_plan
- anchor
- field-alpha-pp100_attempt-question-plan
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- For v2, the frozen exact eligible question pool with item-family, tier, and rigor evidence; for v1, the historical ten-question plan.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}selection_seed
- anchor
- field-alpha-pp100_attempt-selection-seed
- type
- TEXT
- nullability
- Required for v2; nullable for historical v1.
- key
- Not a key
- meaning
- Server-created deterministic seed that makes every v2 question selection replayable.
- example
- sha256-derived opaque seed
- invalidWhen
- Missing on a v2 attempt or changed after creation.
constraints
[ "Never supplied or changed by the client." ]
allowedValues
[]
current_score
- anchor
- field-alpha-pp100_attempt-current-score
- type
- INTEGER
- nullability
- Required for v2; nullable for historical v1.
- key
- Not a key
- meaning
- Server-replayed PP100 score from 0 through 100 after the latest accepted response.
- example
- 83
- invalidWhen
- Client supplied, outside 0–100, or inconsistent with response evidence.
constraints
[ "Must equal replay of immutable score transitions; mastery only at 100." ]
allowedValues
[]
session_started_at_response
- anchor
- field-alpha-pp100_attempt-session-started-at-response
- type
- INTEGER
- nullability
- Required for v2; nullable for historical v1.
- key
- Not a key
- meaning
- Accepted-response count at the start of the current remediation-bounded session.
- example
- 30
- invalidWhen
- Used to reset score/history or evade the 30-response pause.
constraints
[ "Nonnegative and no greater than answered_count." ]
allowedValues
[]
pause_count
- anchor
- field-alpha-pp100_attempt-pause-count
- type
- INTEGER
- nullability
- Required for v2; nullable for historical v1.
- key
- Not a key
- meaning
- Number of remediation pauses from which this same walk has resumed.
- example
- 1
- invalidWhen
- A resume creates a new attempt or discards accepted evidence.
constraints
[ "Nonnegative; increments only when a paused attempt resumes." ]
allowedValues
[]
prerequisite
- anchor
- field-alpha-pp100_attempt-prerequisite
- type
- BOOLEAN
- nullability
- Required for v2; nullable for historical v1.
- key
- Not a key
- meaning
- Frozen Content-blueprint prerequisite flag governing the explicit 90+ fallback exception.
- example
- false
- invalidWhen
- Inferred by the client or changed during the walk.
constraints
[ "Copied only from the exact owning blueprint at attempt creation." ]
allowedValues
[]
status
- anchor
- field-alpha-pp100_attempt-status
- type
- TEXT enum
- nullability
- Required.
- key
- Not a key
- meaning
- in_progress, paused, mastered, or historical-v1 failed.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}terminal_reason
- anchor
- field-alpha-pp100_attempt-terminal-reason
- type
- TEXT enum
- nullability
- Nullable.
- key
- Not a key
- meaning
- For v2, score_100_mastery_satisfied or the resumable session_response_limit_reached pause reason; historical v1 retains its fixed-form mastery or impossibility reason.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}answered_count
- anchor
- field-alpha-pp100_attempt-answered-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Count of immutable first responses.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}correct_count
- anchor
- field-alpha-pp100_attempt-correct-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Diagnostic count of correct unassisted first responses for v2; historical v1 also uses it in fixed-form settlement.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}hard_answered_count
- anchor
- field-alpha-pp100_attempt-hard-answered-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Diagnostic count of answered hard-tier questions for v2; historical v1 also uses it in fixed-form settlement.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}hard_correct_count
- anchor
- field-alpha-pp100_attempt-hard-correct-count
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Diagnostic count of correct unassisted hard-tier responses for v2; historical v1 also uses it in fixed-form settlement.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}mastered
- anchor
- field-alpha-pp100_attempt-mastered
- type
- BOOLEAN
- nullability
- Required.
- key
- Not a key
- meaning
- For v2, true if and only if current_score == 100. Immutable historical v1 replay retains its original >=9 overall and >=4 hard terminal rule.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}next_question_index
- anchor
- field-alpha-pp100_attempt-next-question-index
- type
- INTEGER
- nullability
- Nullable.
- key
- Not a key
- meaning
- Only permissible next sequence while in progress.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}started_at
- anchor
- field-alpha-pp100_attempt-started-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- Attempt start time.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}completed_at
- anchor
- field-alpha-pp100_attempt-completed-at
- type
- TIMESTAMPTZ
- nullability
- Nullable.
- key
- Not a key
- meaning
- Terminal time.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}modified_at
- anchor
- field-alpha-pp100_attempt-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- Last authoritative mutation time.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}alpha.pp100_response · PowerPath 100 response
- kind
- Extension table
- moduleHome
- Results
- changeType
- EXTEND
- upstream
- Curriculum owns the gate and policy reference; Content owns the exact bank pool, question versions, tier/rigor calibration, KC attribution, and answer keys.
- purpose
- Stores the learner response, server-side Content answer-key grade, deterministic question-selection evidence, and governed score transition for one exact attempt sequence.
- lifecycle
- Append once per attempt sequence; never corrected, replaced, or deleted through the public API.
- primaryKey
- (tenant_id, response_id)
- fieldCount
- 18
- storage
- Alpha extension table projected as a public Results read view.
- writePath
- Append only through POST /alpha/results/v1/pp100/attempts/{attemptId}/responses.
- anchor
- table-alpha-pp100-response
itds
[]
relationships
[ "Belongs to one PP100 attempt.", "References one exact Content question version.", "The score-100 response references the generated result record; a pause response does not." ]
constraints
[ "Unique (tenant_id, attempt_id, sequence_index).", "Question and version must equal the server-provided next question.", "Selection evidence and score transition must replay exactly from the frozen pool, selection seed, prior responses, and pre-response score.", "Assisted correctness cannot advance the score and mastery occurs only when score_after is 100." ]
invalidExamples
[ "A browser-provided score or difficulty tier.", "A mutable latest-version reference.", "A PP100 pass written into highest_mastered_grade or working_grade." ]
example
{
"response_id": "018f4b4e-9c7a-7d3d-8b2f-2f673a002013",
"sequence_index": 1,
"is_correct": true,
"assisted": false
}storageItd
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}Fields (18)
response_id
- anchor
- field-alpha-pp100_response-response-id
- type
- UUID
- nullability
- Required.
- key
- Not a key
- meaning
- Stable immutable response id.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}tenant_id
- anchor
- field-alpha-pp100_response-tenant-id
- type
- TEXT
- nullability
- Required.
- key
- Tenant-scoped key
- meaning
- Tenant boundary.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}attempt_id
- anchor
- field-alpha-pp100_response-attempt-id
- type
- UUID
- nullability
- Required.
- key
- Not a key
- meaning
- Owning PP100 attempt.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}student_id
- anchor
- field-alpha-pp100_response-student-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Student who supplied the response.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: Identifier
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}sequence_index
- anchor
- field-alpha-pp100_response-sequence-index
- type
- INTEGER
- nullability
- Required.
- key
- Not a key
- meaning
- Monotonic response sequence for the recoverable walk; not capped at ten.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}question_content_id
- anchor
- field-alpha-pp100_response-question-content-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Exact Content question id.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}question_version_id
- anchor
- field-alpha-pp100_response-question-version-id
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- Exact Content question version.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}response_identifier
- anchor
- field-alpha-pp100_response-response-identifier
- type
- TEXT
- nullability
- Required.
- key
- Not a key
- meaning
- QTI answer-slot identifier.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}response_value
- anchor
- field-alpha-pp100_response-response-value
- type
- JSONB
- nullability
- Required.
- key
- Not a key
- meaning
- Raw learner response, never an answer key.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}is_correct
- anchor
- field-alpha-pp100_response-is-correct
- type
- BOOLEAN
- nullability
- Required.
- key
- Not a key
- meaning
- Results grade from Content-owned server-only answer key.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}assisted
- anchor
- field-alpha-pp100_response-assisted
- type
- BOOLEAN
- nullability
- Required.
- key
- Not a key
- meaning
- Whether help invalidates this response as independent mastery evidence.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}score_before
- anchor
- field-alpha-pp100_response-score-before
- type
- INTEGER
- nullability
- Required for v2; nullable for historical v1.
- key
- Not a key
- meaning
- Server-replayed score immediately before this response.
- example
- 83
- invalidWhen
- Client supplied or inconsistent with immutable history.
constraints
[ "From 0 through 99 and equal to the prior accepted transition." ]
allowedValues
[]
score_delta
- anchor
- field-alpha-pp100_response-score-delta
- type
- INTEGER
- nullability
- Required for v2; nullable for historical v1.
- key
- Not a key
- meaning
- Governed decile-based gain or setback produced by this graded response.
- example
- 7
- invalidWhen
- Does not match the v2 score formula.
constraints
[ "Derived from score_before and independent correctness; assisted correctness uses the setback lane." ]
allowedValues
[]
score_after
- anchor
- field-alpha-pp100_response-score-after
- type
- INTEGER
- nullability
- Required for v2; nullable for historical v1.
- key
- Not a key
- meaning
- Clamped 0–100 score after applying score_delta.
- example
- 90
- invalidWhen
- Mastery is claimed below 100 or value cannot be replayed.
constraints
[ "Must equal clamp(score_before + score_delta, 0, 100)." ]
allowedValues
[]
selection_json
- anchor
- field-alpha-pp100_response-selection-json
- type
- JSONB
- nullability
- Required for v2; nullable for historical v1.
- key
- Not a key
- meaning
- Server-selected exact question, sequence, family, tier, and frozen eligibility evidence.
- invalidWhen
- Stale, repeated against the policy, client-selected, or mismatched to exact Content identity.
constraints
[ "Must equal deterministic selection from the frozen pool and pre-response score band." ]
allowedValues
[]
example
{
"sequence_index": 7,
"difficulty": "hard"
}result_record_id
- anchor
- field-alpha-pp100_response-result-record-id
- type
- UUID
- nullability
- Nullable.
- key
- Not a key
- meaning
- Terminal PP100 result record.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}responded_at
- anchor
- field-alpha-pp100_response-responded-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- Response acceptance time.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}modified_at
- anchor
- field-alpha-pp100_response-modified-at
- type
- TIMESTAMPTZ
- nullability
- Required.
- key
- Not a key
- meaning
- Immutable row timestamp.
- example
- invalidWhen
- Invalid when the value contradicts the frozen PP100 attempt or its owning policy.
- edgeCases
- Exact-version references and first-response evidence fail closed; no client may repair or replace them.
- upstreamSource
- Curriculum and Content references; Results-owned evaluation
- privacyTag
- PII: No
- indexPolicy
- Index only documented primary, uniqueness, and student-attempt lookup keys.
- sourceBasis
- Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay
- storageBehavior
- Results-owned extension state or an exact foreign reference to its owning surface.
constraints
[]
allowedValues
[]
provenance
{
"label": "PP100 Results authority",
"changeType": "EXTEND",
"basis": "Platform3 issue #2201 PP100 v2 decision; Issue #2012 for historical v1 replay",
"upstream": "Curriculum gate plus exact Content bank/form/question authority",
"itds": []
}Additional contract data
upstreamArtifacts
{
"oneRosterDataDictionary": "https://platform3-andymontgomery-9773s-projects.vercel.app/oneroster/1edtech/data_dictionary/",
"nweamapDataDictionary": "https://platform3-andymontgomery-9773s-projects.vercel.app/nweamap/1edtech/data_dictionary/",
"edFiDataDictionary": "https://platform3-andymontgomery-9773s-projects.vercel.app/ed_fi/1edtech/data_dictionary/",
"resultsArchitecture": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture",
"apOnePlatformCapabilitiesDecision": "loop/context/ap-one-platform-capabilities-decision.md",
"resultsIdempotencyCompatibilityDecision": "loop/context/results-idempotency-compatibility-decision.md"
}sourceSummary
[ "Generated from approved Results Alpha architecture, OneRoster 1EdTech data dictionary, NWEAMap 1EdTech data dictionary, and Ed-Fi 1EdTech data dictionary.", "Every Alpha divergence is labeled as cut, restrict, rename, or extend and links to a Results architecture ITD.", "The data dictionary includes the public object dictionary, API endpoint catalog, API parameter dictionary, canonical alpha.subject enum and production alias validation, raw-ingest adapter contract, Problem-code dictionary, alias map, storage model, raw/API convergence rules, HMG as-of ledger rules, upstream field handling registers, and module-placement QC." ]
conventions
{
"nullRule": "begin_date NULL means not time-locatable and excluded from point-in-time computation; end_date NULL means active after begin_date; both NULL means excluded.",
"relationships": "Relationships are real fields and foreign keys, never tags.",
"policy": "Policy numbers and formulas live in alpha.policy_config and named alpha.policy.* config, never in consumers.",
"storage": "Rename, cut, and restrict are SQL views over the approved 1EdTech base. Only extend tables get storage, and those tables hold only new Alpha fields plus FK/source references."
}idempotencyCompatibility
{
"authority": "loop/context/results-idempotency-compatibility-decision.md",
"canonicalRequestHash": "For the seven named Results Alpha mutation scopes, sha256: plus the SHA-256 of recursively key-sorted canonical JSON for the request body. Tenant, method, route template, operation id, and Idempotency-Key remain separate unique-scope fields.",
"routes": [
{
"method": "POST",
"routeTemplate": "/alpha/results/v1/pp100/attempts",
"operationId": "pp100_attempt.create"
},
{
"method": "POST",
"routeTemplate": "/alpha/results/v1/pp100/attempts/{attemptId}/responses",
"operationId": "pp100_response.create"
},
{
"method": "POST",
"routeTemplate": "/alpha/results/v1/result-records",
"operationId": "result_record.create"
},
{
"method": "PATCH",
"routeTemplate": "/alpha/results/v1/result-records/{resultRecordId}",
"operationId": "result_record.correct"
},
{
"method": "POST",
"routeTemplate": "/alpha/results/v1/imports",
"operationId": "result_import.create"
},
{
"method": "POST",
"routeTemplate": "/alpha/results/v1/component-xp-awards",
"operationId": "component_xp_award.create"
},
{
"method": "POST",
"routeTemplate": "/alpha/results/v1/assessment-finalizations/finalize",
"operationId": "assessment_finalization.finalize"
}
],
"storedFields": {
"canonical_request_hash": "Immutable canonical identity for versioned claims, including while request_hash is a rollout fence.",
"claim_protocol": "results-v1-bridge for migration-fenced legacy claims, results-v2 for transaction-bound claims, and null only for retained terminal legacy history.",
"lease_token": "Null for legacy bridge claims and a server-owned results-v2:<uuid> ownership token for v2 claims. first_request_id remains immutable audit identity.",
"request_hash": "Canonical on replay-safe completed and failed_permanent receipts; results-v1-bridge:<canonical hash> or results-v2-active:<canonical hash> while the versioned receipt is not replay-safe."
},
"precedence": "commit_uncertain always outranks expires_at and remains non-reclaimable until independent reconciliation proves committed or rolled back.",
"legacyException": "During the bounded rolling-deployment window only, a legacy observer can report results:idempotency_conflict for a same-body tagged live fence, or a generic fail-closed 500 when its no-op ON CONFLICT races the bridge trigger. Neither path enters the mutation callback; retry the same key after the old deployment drains and do not rotate keys from either temporary response alone.",
"retirement": "The bridge and active fences require a separately reviewed staged migration after no legacy binary or nonterminal results-v1-bridge row remains for at least one full 24-hour replay window."
}resultsCorrectionAtomicity
{
"authority": "loop/context/results-idempotency-compatibility-decision.md",
"route": "PATCH /alpha/results/v1/result-records/{resultRecordId}",
"operationId": "result_record.correct",
"requiredHeaders": [
"Idempotency-Key",
"If-Match"
],
"transactionRule": "Lock the exact Alpha-owned (tenant_id, result_record_id) extension row, then read the public projection, authorize, validate If-Match against its current ETag, mutate, and finalize the success receipt in one transaction. Different Idempotency-Keys do not weaken the row precondition: of simultaneous corrections carrying one current ETag, at most one may commit.",
"lockOrder": "Exact idempotency receipt, then exact result_record_extension row, then correction update, then receipt finalization.",
"staleRule": "A contender that observes a changed current ETag returns results:precondition_failed. Its transaction makes no domain change, and the same Idempotency-Key plus request replays the exact permanent 412 receipt without locking or revalidating the result row.",
"waitRule": "PostgreSQL uses a transaction-local 2000ms lock_timeout. A lock wait timeout returns transient HTTP 503 results:correction_lock_timeout with Retry-After: 1 and does not become a terminal idempotency receipt.",
"versionRule": "After locking and validating, set correction-owned modified_at to the later of the observed clock and one millisecond after the current row's modified_at. This per-record logical fence never moves backward and advances the public ETag even for an unchanged-score correction within one clock tick.",
"tenantRule": "The lock predicate includes tenant_id and result_record_id. A record in another tenant is indistinguishable from an absent record and returns results:not_found without mutation."
}storageModel
[
{
"shape": "Renamed, cut, or restricted Results objects",
"rule": "SQL views over the approved OneRoster, NWEAMap, and Ed-Fi 1EdTech base storage. Ed-Fi academic-record views filter edfi.canonical_record by resource_name/record kind, extract typed payload_json columns, resolve descriptors through edfi.descriptor_code, and join roster references through platform3 sourcedIds. Rename, cut, and restrict add no storage.",
"examples": [
"alpha.gradebook_item",
"alpha.score_scale",
"alpha.map_sitting",
"alpha.map_goal_strand",
"alpha.academic_record_view",
"alpha.course_transcript_view"
]
},
{
"shape": "Unified public Results objects",
"rule": "Views that project base rows and, only where Alpha adds a genuinely new object family, UNION or JOIN extension rows/tables. The public object is a view, not a copied table.",
"examples": [
"alpha.result_record",
"alpha.map_score",
"alpha.map_growth_window",
"alpha.map_effective_grade",
"alpha.transcript_result_view"
]
},
{
"shape": "Alpha extension storage",
"rule": "Tables contain only new Alpha columns plus foreign-key references to base rows. No extension table may copy a OneRoster, NWEAMap, or Ed-Fi source field.",
"examples": [
"alpha.result_record_extension",
"alpha.test_result_component",
"alpha.ai_grading_audit",
"alpha.student_kc_state",
"alpha.student_track_state",
"alpha.student_course_progress_extension",
"alpha.student_grade_level_progress_extension",
"alpha.xp_ledger",
"alpha.content_effectiveness",
"alpha.map_growth_extension",
"alpha.map_effective_grade_extension",
"alpha.report_card_entry",
"alpha.gate_pass"
]
},
{
"shape": "Write routing",
"rule": "Writes to renamed/core OneRoster, NWEAMap, or Ed-Fi facts route to the 1EdTech base surface. Writes to true Alpha-owned facts write extension tables. Public union views are read models.",
"examples": [
"teacher correction of oneroster.results routes to OneRoster",
"NWEA import routes to NWEAMap",
"Ed-Fi transcript import routes to ed_fi/1edtech",
"test_result_component materializes from settled assessment result evidence",
"ai_grading_audit materializes from AI grader evidence",
"student_kc_state recompute writes Results extension storage",
"student_track_state switch writes Results extension storage",
"student_course_progress and student_grade_level_progress materialize from evidence refs",
"XP awards are computed by Results from settled attempts"
]
},
{
"shape": "Forbidden downstream output",
"rule": "Any CREATE TABLE alpha.gradebook_item, alpha.result_record, alpha.map_score, alpha.map_sitting, alpha.map_goal_strand, alpha.academic_record_view, alpha.course_transcript_view, alpha.course_grade_view, or alpha.transcript_result_view that stores OneRoster/NWEAMap/Ed-Fi fields is a rollback failure.",
"examples": [
"Copied score/comment/text_score",
"Copied TestRITScore/GrowthMeasureYN/StudentID",
"Copied Goal1Name..Goal8Adjective",
"Copied StudentAcademicRecord payload_json GPA/credits fields",
"Copied CourseTranscript FinalLetterGradeEarned/EarnedCredits fields"
]
}
]subjectContract
{
"enumName": "alpha.subject",
"policyId": "alpha.policy.results_subject_boundaries.v2026-07-17.issue-1052",
"workflowyCitation": "workflowy://e2938a40-93bf-47ee-9d54-b08749ca5dcd",
"decisionSource": "loop/context/alpha-canonical-enums.md#1-subjects-item-0114-alpha.subject-closed-enum--alias-fold",
"validatedAt": "2026-06-09",
"validatedWith": [
"node loop/nweamap/vendor/skill-pack-baseline/nwea-map-analysis/scripts/timeback-query.mjs --token-file ~/Documents/timeback-danny-mcp-creds --sql \"select coalesce(nullif(trim(metadata->>'subject'), ''), '<blank>') as source_value, count(*)::int as count from assessment_results group by 1 order by count desc, source_value\"",
"node loop/nweamap/vendor/skill-pack-baseline/nwea-map-analysis/scripts/timeback-query.mjs --token-file ~/Documents/timeback-danny-mcp-creds --sql \"select coalesce(nullif(trim(course_subject), ''), '<blank>') as source_value, count(*)::int as count from grade_subject_mastery_visibility group by 1 order by count desc, source_value\""
],
"fieldNames": [
"subject API parameter",
"subject_id database/view field",
"assessment_results.metadata->>'subject' source evidence",
"grade_subject_mastery_visibility.course_subject source evidence"
],
"canonicalValues": [
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath."
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them."
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting."
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured."
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language."
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language."
}
],
"reportReadValues": [
"math",
"reading",
"language",
"science",
"vocabulary",
"writing"
],
"hmgValues": [
"math",
"reading",
"language",
"science",
"vocabulary",
"writing"
],
"resultIngressValues": [
"math",
"reading",
"language",
"science",
"vocabulary",
"writing",
"social_studies"
],
"resultIngressExtensions": [
{
"value": "social_studies",
"meaning": "Canonical Social Studies subject accepted for owner-directed app outcome and XP ingress. It remains outside public report filters and mastery-gate/HMG derivation."
}
],
"outcomeFactTables": [
"alpha.result_record",
"alpha.test_result_component",
"alpha.ai_grading_audit"
],
"writeAliases": {
"mathematics": "math",
"fastmath": "math",
"fast_math": "math",
"math": "math",
"reading": "reading",
"ela": "language",
"english": "language",
"english language": "language",
"english_language": "language",
"english language arts": "language",
"english_language_arts": "language",
"language arts": "language",
"language_arts": "language",
"language": "language",
"writing": "writing",
"vocabulary": "vocabulary",
"vocab": "vocabulary",
"science": "science",
"social studies": "social_studies",
"social_studies": "social_studies"
},
"mapMeasuredSubset": [
"math",
"reading",
"language",
"science"
],
"proxyRules": [
{
"sourceSubject": "vocabulary",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"meaning": "Vocabulary remains a first-class Results subject, but MAP RIT/Growth X report rows proxy to language because NWEA does not measure Vocabulary as a separate MAP subject."
},
{
"sourceSubject": "writing",
"canonicalSubject": "writing",
"mapReportSubject": "language",
"meaning": "Writing remains a first-class Results subject, but MAP RIT/Growth X report rows proxy to language."
},
{
"sourceSubject": "fastmath",
"canonicalSubject": "math",
"mapReportSubject": "math",
"meaning": "FastMath source values are accepted only as a proxy input for math MAP/reporting. The public Results enum never exposes fastmath as a subject."
}
],
"writeBoundaryRules": [
"Results outcome facts accepted through POST result-records, raw outcome ingress, and POST component-xp-awards use the seven-value resultIngressValues registry: math, reading, language, science, vocabulary, writing, social_studies.",
"Public report filters, assessment finalization, and mastery-gate/HMG derivation use the independent exact-six reportReadValues/hmgValues registry: math, reading, language, science, vocabulary, writing.",
"Source rows may carry producer display strings such as Mathematics, Math-notqced, Language Arts, Vocab, Writing, FastMath, or Science-notqced; the Results adapter folds those aliases before writing public rows.",
"MAP RIT and Growth X reports are limited to the MAP-measured subset: math, reading, language, science.",
"Vocabulary and writing remain canonical Results subjects, but MAP RIT/Growth X answers proxy them to language through alpha.policy.proxy_subject_rules.",
"FastMath source values proxy to math for MAP/reporting only; fastmath is never a persisted alpha.subject value and never appears as a real-subject grouping key.",
"Canonical social_studies app outcomes are accepted and preserved for XP; Social Studies remains excluded from real-subject reports and HMG. History/course-grain labels, blank, None, Other, General, Unknown, and generic junk remain adapter findings to quarantine or reconcile.",
"Bare ELA source values are not a public subject. They are treated as ambiguous source evidence; an adapter may fold explicit English or Language Arts to language, but bare ELA rows must not become their own report group."
],
"productionValidation": [
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1871322,
"sourceValue": "<blank>",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "reject_or_quarantine",
"reportUsage": "Excluded from real-subject reports.",
"reason": "No trustworthy subject value was present in the source row."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1417437,
"sourceValue": "Language",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1042602,
"sourceValue": "Math",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1030047,
"sourceValue": "FastMath",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 783521,
"sourceValue": "Reading",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 627047,
"sourceValue": "Science-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 228272,
"sourceValue": "Vocabulary",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Vocabulary result rows may group as vocabulary; MAP RIT/Growth X rows use language.",
"reason": "Vocabulary is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 197147,
"sourceValue": "Science",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 61928,
"sourceValue": "Writing",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "writing",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Writing result rows may group as writing; MAP RIT/Growth X rows use language.",
"reason": "Writing is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 54763,
"sourceValue": "Social Studies",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "social_studies",
"mapReportSubject": null,
"writeBoundaryAction": "accept_canonical_for_app_outcome_ingress",
"reportUsage": "Preserved on canonical app outcome facts and excluded from exact-six Results reports/HMG.",
"reason": "Owner-directed social_studies outcome/XP ingress is distinct from the exact-six report/HMG registry."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 28140,
"sourceValue": "Math-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 21671,
"sourceValue": "None",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "reject_or_quarantine",
"reportUsage": "Excluded from real-subject reports.",
"reason": "No trustworthy subject value was present in the source row."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 17642,
"sourceValue": "Math-ISEE",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 11907,
"sourceValue": "Language-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 8663,
"sourceValue": "ELA",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_language_with_bare_ela_exclusion",
"reportUsage": "Do not expose ELA as a subject group. Bare ELA source rows require adapter validation before they may appear as language.",
"reason": "Bare ELA is a mis-tagged mixed source label in production, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 8194,
"sourceValue": "Reading-ISEE",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 8074,
"sourceValue": "Language-ISEE",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 7813,
"sourceValue": "Reading-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 6290,
"sourceValue": "Math-unit",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 5970,
"sourceValue": "Math-Athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 5480,
"sourceValue": "Math-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 5471,
"sourceValue": "Math-athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 4376,
"sourceValue": "Social Studies-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "exclude_out_of_scope",
"reportUsage": "Excluded from Results real-subject reports.",
"reason": "This non-canonical Social Studies variant remains excluded or quarantined; only canonical social_studies app outcomes enter the seven-value write registry, and Results reports/HMG stay exact-six."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 4250,
"sourceValue": "science",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 2186,
"sourceValue": "Math-Athena-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 2181,
"sourceValue": "Language-athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 2110,
"sourceValue": "Math-nonqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1818,
"sourceValue": "Other",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "reject_or_quarantine",
"reportUsage": "Excluded from real-subject reports.",
"reason": "No trustworthy subject value was present in the source row."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1782,
"sourceValue": "General",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "reject_or_quarantine",
"reportUsage": "Excluded from real-subject reports.",
"reason": "No trustworthy subject value was present in the source row."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1644,
"sourceValue": "Language-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1350,
"sourceValue": "ELA-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_language_with_bare_ela_exclusion",
"reportUsage": "Do not expose ELA as a subject group. Bare ELA source rows require adapter validation before they may appear as language.",
"reason": "Bare ELA is a mis-tagged mixed source label in production, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1241,
"sourceValue": "Science-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1136,
"sourceValue": "Reading-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 568,
"sourceValue": "Vocabulary-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Vocabulary result rows may group as vocabulary; MAP RIT/Growth X rows use language.",
"reason": "Vocabulary is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 493,
"sourceValue": "math",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 416,
"sourceValue": "Math-REMOVED-RUCHI",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 410,
"sourceValue": "Fastmath",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 364,
"sourceValue": "Fast Math",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 331,
"sourceValue": "math-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 308,
"sourceValue": "social studies",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "social_studies",
"mapReportSubject": null,
"writeBoundaryAction": "accept_canonical_for_app_outcome_ingress",
"reportUsage": "Preserved on canonical app outcome facts and excluded from exact-six Results reports/HMG.",
"reason": "Owner-directed social_studies outcome/XP ingress is distinct from the exact-six report/HMG registry."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 274,
"sourceValue": "Writing-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "writing",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Writing result rows may group as writing; MAP RIT/Growth X rows use language.",
"reason": "Writing is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 253,
"sourceValue": "Unknown",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "reject_or_quarantine",
"reportUsage": "Excluded from real-subject reports.",
"reason": "No trustworthy subject value was present in the source row."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 232,
"sourceValue": "Math-Piri-removed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 227,
"sourceValue": "Phonetic-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 196,
"sourceValue": "Math-Tobefixed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 179,
"sourceValue": "Quant-ISEE",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 158,
"sourceValue": "Mathematics",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 156,
"sourceValue": "social_studies",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "social_studies",
"mapReportSubject": null,
"writeBoundaryAction": "accept_canonical_for_app_outcome_ingress",
"reportUsage": "Preserved on canonical app outcome facts and excluded from exact-six Results reports/HMG.",
"reason": "Owner-directed social_studies outcome/XP ingress is distinct from the exact-six report/HMG registry."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 129,
"sourceValue": "Language-NEEDSCORRECTION-RUCHI",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 128,
"sourceValue": "Social Studies-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "exclude_out_of_scope",
"reportUsage": "Excluded from Results real-subject reports.",
"reason": "This non-canonical Social Studies variant remains excluded or quarantined; only canonical social_studies app outcomes enter the seven-value write registry, and Results reports/HMG stay exact-six."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 124,
"sourceValue": "Math-NotReady-Piri",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 113,
"sourceValue": "Social Studies, Civics",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "exclude_out_of_scope",
"reportUsage": "Excluded from Results real-subject reports.",
"reason": "This non-canonical Social Studies variant remains excluded or quarantined; only canonical social_studies app outcomes enter the seven-value write registry, and Results reports/HMG stay exact-six."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 107,
"sourceValue": "fast_math-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 82,
"sourceValue": "Fast Math - non Qced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 82,
"sourceValue": "Math-test-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 73,
"sourceValue": "ELA-notqced-testing",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_language_with_bare_ela_exclusion",
"reportUsage": "Do not expose ELA as a subject group. Bare ELA source rows require adapter validation before they may appear as language.",
"reason": "Bare ELA is a mis-tagged mixed source label in production, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 72,
"sourceValue": "Science-Not QCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 63,
"sourceValue": "Math-NEEDSFIXING-RUCHI",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 58,
"sourceValue": "Math-non Qced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 53,
"sourceValue": "Science-athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 50,
"sourceValue": "Social Studies-OLD",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "exclude_out_of_scope",
"reportUsage": "Excluded from Results real-subject reports.",
"reason": "This non-canonical Social Studies variant remains excluded or quarantined; only canonical social_studies app outcomes enter the seven-value write registry, and Results reports/HMG stay exact-six."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 46,
"sourceValue": "Reading-noqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 45,
"sourceValue": "Phonetic-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 43,
"sourceValue": "FASTMATH",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 42,
"sourceValue": "Math-notqced-testing",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 38,
"sourceValue": "Mathematics-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 37,
"sourceValue": "Math-Unit",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 37,
"sourceValue": "Phonics",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 32,
"sourceValue": "Phonics-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 31,
"sourceValue": "History",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "exclude_out_of_scope",
"reportUsage": "Excluded from Results real-subject reports.",
"reason": "Course-grain History remains outside the exact-six Results report/HMG subset; this does not reject canonical social_studies app outcomes at write ingress."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 30,
"sourceValue": "Writing-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "writing",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Writing result rows may group as writing; MAP RIT/Growth X rows use language.",
"reason": "Writing is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 29,
"sourceValue": "Writing-notQced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "writing",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Writing result rows may group as writing; MAP RIT/Growth X rows use language.",
"reason": "Writing is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 26,
"sourceValue": "vocabulary",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Vocabulary result rows may group as vocabulary; MAP RIT/Growth X rows use language.",
"reason": "Vocabulary is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 25,
"sourceValue": "FastMath-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 25,
"sourceValue": "Reading-athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 22,
"sourceValue": "SOCIAL-STUDIES",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "social_studies",
"mapReportSubject": null,
"writeBoundaryAction": "accept_canonical_for_app_outcome_ingress",
"reportUsage": "Preserved on canonical app outcome facts and excluded from exact-six Results reports/HMG.",
"reason": "Owner-directed social_studies outcome/XP ingress is distinct from the exact-six report/HMG registry."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 22,
"sourceValue": "Vocabulary_toQC",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Vocabulary result rows may group as vocabulary; MAP RIT/Growth X rows use language.",
"reason": "Vocabulary is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 21,
"sourceValue": "Vocabulary-notQced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Vocabulary result rows may group as vocabulary; MAP RIT/Growth X rows use language.",
"reason": "Vocabulary is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 20,
"sourceValue": "Phonetic",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 18,
"sourceValue": "Math-non QCED",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 16,
"sourceValue": "Math-Athena-testing",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 15,
"sourceValue": "Reading-notqced-testing",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 13,
"sourceValue": "Fractions",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 12,
"sourceValue": "language",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 10,
"sourceValue": "FLUENCY",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 9,
"sourceValue": "Reading-not QCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 8,
"sourceValue": "Language Arts",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 7,
"sourceValue": "Language-ISEE-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 7,
"sourceValue": "Language-unit",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 6,
"sourceValue": "Math Non Qced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 6,
"sourceValue": "Reading-non QCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 5,
"sourceValue": "Reading-nonqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 4,
"sourceValue": "english",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 4,
"sourceValue": "Oral Reading Fluency",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 3,
"sourceValue": "reading",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 2,
"sourceValue": "Reading-unit",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 2,
"sourceValue": "SOCIAL STUDIES",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "social_studies",
"mapReportSubject": null,
"writeBoundaryAction": "accept_canonical_for_app_outcome_ingress",
"reportUsage": "Preserved on canonical app outcome facts and excluded from exact-six Results reports/HMG.",
"reason": "Owner-directed social_studies outcome/XP ingress is distinct from the exact-six report/HMG registry."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1,
"sourceValue": "ELA-NOT-QCED",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_language_with_bare_ela_exclusion",
"reportUsage": "Do not expose ELA as a subject group. Bare ELA source rows require adapter validation before they may appear as language.",
"reason": "Bare ELA is a mis-tagged mixed source label in production, not a public Alpha subject."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1,
"sourceValue": "Reading-NotQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1,
"sourceValue": "Science-not-QCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.assessment_results.metadata.subject",
"count": 1,
"sourceValue": "Vocabulary-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Vocabulary result rows may group as vocabulary; MAP RIT/Growth X rows use language.",
"reason": "Vocabulary is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 4024,
"sourceValue": "FastMath",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1995,
"sourceValue": "Math",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1651,
"sourceValue": "Language",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1622,
"sourceValue": "Reading",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 653,
"sourceValue": "Vocabulary",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Vocabulary result rows may group as vocabulary; MAP RIT/Growth X rows use language.",
"reason": "Vocabulary is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 592,
"sourceValue": "Science",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 364,
"sourceValue": "Writing",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "writing",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Writing result rows may group as writing; MAP RIT/Growth X rows use language.",
"reason": "Writing is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 207,
"sourceValue": "Math-unit",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 112,
"sourceValue": "Social Studies",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "social_studies",
"mapReportSubject": null,
"writeBoundaryAction": "accept_canonical_for_app_outcome_ingress",
"reportUsage": "Preserved on canonical app outcome facts and excluded from exact-six Results reports/HMG.",
"reason": "Owner-directed social_studies outcome/XP ingress is distinct from the exact-six report/HMG registry."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 55,
"sourceValue": "Math-nonqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 54,
"sourceValue": "Math-Athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 44,
"sourceValue": "ELA",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_language_with_bare_ela_exclusion",
"reportUsage": "Do not expose ELA as a subject group. Bare ELA source rows require adapter validation before they may appear as language.",
"reason": "Bare ELA is a mis-tagged mixed source label in production, not a public Alpha subject."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 36,
"sourceValue": "Math-athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 24,
"sourceValue": "Math-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 23,
"sourceValue": "Language-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 22,
"sourceValue": "Reading-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 20,
"sourceValue": "Reading-ISEE",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 18,
"sourceValue": "Math-Athena-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 18,
"sourceValue": "Math-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 16,
"sourceValue": "Language-ISEE",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 15,
"sourceValue": "Math-ISEE",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 14,
"sourceValue": "Reading-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 12,
"sourceValue": "Science-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 11,
"sourceValue": "Language-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 11,
"sourceValue": "Social Studies-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "exclude_out_of_scope",
"reportUsage": "Excluded from Results real-subject reports.",
"reason": "This non-canonical Social Studies variant remains excluded or quarantined; only canonical social_studies app outcomes enter the seven-value write registry, and Results reports/HMG stay exact-six."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 10,
"sourceValue": "Language-athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 8,
"sourceValue": "Science-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 6,
"sourceValue": "Vocabulary-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Vocabulary result rows may group as vocabulary; MAP RIT/Growth X rows use language.",
"reason": "Vocabulary is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 5,
"sourceValue": "social studies",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "social_studies",
"mapReportSubject": null,
"writeBoundaryAction": "accept_canonical_for_app_outcome_ingress",
"reportUsage": "Preserved on canonical app outcome facts and excluded from exact-six Results reports/HMG.",
"reason": "Owner-directed social_studies outcome/XP ingress is distinct from the exact-six report/HMG registry."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 4,
"sourceValue": "ELA-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_language_with_bare_ela_exclusion",
"reportUsage": "Do not expose ELA as a subject group. Bare ELA source rows require adapter validation before they may appear as language.",
"reason": "Bare ELA is a mis-tagged mixed source label in production, not a public Alpha subject."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 3,
"sourceValue": "Math-Piri-removed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 3,
"sourceValue": "Math-REMOVED-RUCHI",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 3,
"sourceValue": "Science-athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "FASTMATH",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "fast_math-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "language",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Language-NEEDSCORRECTION-RUCHI",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Language-unit",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Math-notqced-testing",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Math-Unit",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Quant-ISEE",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Reading-athena",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Reading-notqced-testing",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Science-Not QCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "science",
"mapReportSubject": "science",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as science.",
"reason": "Observed science alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Social Studies-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "exclude_out_of_scope",
"reportUsage": "Excluded from Results real-subject reports.",
"reason": "This non-canonical Social Studies variant remains excluded or quarantined; only canonical social_studies app outcomes enter the seven-value write registry, and Results reports/HMG stay exact-six."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 2,
"sourceValue": "Writing-notQCed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "writing",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Writing result rows may group as writing; MAP RIT/Growth X rows use language.",
"reason": "Writing is a first-class Alpha subject with a language MAP proxy."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Fastmath",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Fast Math - non Qced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "proxy_to_map_subject",
"reportUsage": "Use as math proxy input only; never expose fastmath as a subject group.",
"reason": "FastMath is a producer/source program label, not a public Alpha subject."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Language-ISEE-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "language",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as language.",
"reason": "Observed language alias."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Math-Athena-testing",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Math-non Qced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "math-notqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Math-NotReady-Piri",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Math-Tobefixed",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "math",
"mapReportSubject": "math",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as math.",
"reason": "Observed math alias or math sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Reading-noqced",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "reading",
"mapReportSubject": "reading",
"writeBoundaryAction": "fold_to_canonical",
"reportUsage": "Included in real-subject reports as reading when the adapter can resolve the row to reading evidence.",
"reason": "Observed reading alias or reading sub-domain."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Social Studies-OLD",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "exclude_out_of_scope",
"reportUsage": "Excluded from Results real-subject reports.",
"reason": "This non-canonical Social Studies variant remains excluded or quarantined; only canonical social_studies app outcomes enter the seven-value write registry, and Results reports/HMG stay exact-six."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Unknown",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": null,
"mapReportSubject": null,
"writeBoundaryAction": "reject_or_quarantine",
"reportUsage": "Excluded from real-subject reports.",
"reason": "No trustworthy subject value was present in the source row."
},
{
"source": "timeback.grade_subject_mastery_visibility.course_subject",
"count": 1,
"sourceValue": "Vocabulary_toQC",
"validatedAt": "2026-06-09",
"enumName": "alpha.subject",
"canonicalSubject": "vocabulary",
"mapReportSubject": "language",
"writeBoundaryAction": "fold_to_canonical_and_proxy_for_map",
"reportUsage": "Vocabulary result rows may group as vocabulary; MAP RIT/Growth X rows use language.",
"reason": "Vocabulary is a first-class Alpha subject with a language MAP proxy."
}
],
"rawDbRule": "Raw SQL must filter public Results objects by subject_id, never by assessment_results.metadata->>'subject' or source display labels. If raw source evidence is inspected, apply the published alias/disposition registry before comparing with API output."
}convergenceRules
[
{
"guardrail": "Tenant and authorization grain",
"apiRule": "Every API read and write is scoped by the JWT tenant_id claim and authorized relationship scope.",
"rawDbRule": "Every raw query must include tenant_id on the driving Results object and must join only authorized student/cohort rows. A result from another tenant is not part of the answer even if its student_id text matches.",
"tables": [
"all alpha.results objects",
"platform.tenant"
],
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
},
{
"id": "ritd-023-axis-auth-shape",
"title": "API Axis: Auth Shape",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-023-axis-auth-shape"
}
]
},
{
"guardrail": "Real-student and hygiene filter",
"apiRule": "Student-facing Results endpoints expose only real Alpha students in TimeBack schools/cohorts; test users, internal program rows, producer-only identities, and non-student users are excluded from ordinary answers.",
"rawDbRule": "Join student_id through the People & Orgs Alpha student/person view before counting, grouping, or reporting. Raw NWEA StudentID, email-only identity, non-student users, and internal/test rows are source evidence, not report subjects.",
"tables": [
"alpha.result_record",
"alpha.map_score",
"alpha.student_kc_state",
"people_and_orgs alpha student views"
],
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"id": "ritd-023-axis-auth-shape",
"title": "API Axis: Auth Shape",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-023-axis-auth-shape"
}
]
},
{
"guardrail": "Subject enum, alias fold, and proxy mapping",
"apiRule": "Every Results write and import folds source subject strings into the closed alpha.subject enum before rows are public. Public filters accept math, reading, language, science, vocabulary, or writing. MAP RIT/Growth X reads use the MAP-measured subset, with vocabulary/writing proxying to language and FastMath source aliases proxying to math.",
"rawDbRule": "Filter public Results views by subject_id only. Do not group reports by assessment_results.metadata->>'subject', grade_subject_mastery_visibility.course_subject, NWEA Subject, test names, or source display strings. If raw source evidence is inspected, apply the published production alias/disposition registry first, exclude social studies/bare ELA/generic junk from real-subject reports, and compare the normalized subject_id answer to the API.",
"tables": [
"alpha.result_record",
"alpha.student_kc_state",
"alpha.student_track_state",
"alpha.map_score",
"alpha.map_growth_window",
"alpha.report_closed_loop_reconciliation",
"timeback.assessment_results",
"timeback.grade_subject_mastery_visibility"
],
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]
},
{
"guardrail": "Point-in-time rows",
"apiRule": "asOfDate reads apply the begin_date/end_date/null rule and expose is_time_locatable on effective-dated rows.",
"rawDbRule": "For report cards, gate passes, policy config, student_kc_state, student_track_state, highest_mastered_grade, and working_grade inputs: require a documented asOfDate/effective-date predicate. Effective-dated rows require begin_date IS NOT NULL, begin_date <= asOfDate, and (end_date IS NULL OR end_date >= asOfDate). Rows with begin_date NULL are excluded even when end_date is null.",
"tables": [
"alpha.student_kc_state",
"alpha.student_track_state",
"alpha.report_card_entry",
"alpha.gate_pass",
"alpha.mastery_ledger",
"alpha.highest_mastered_grade",
"alpha.working_grade",
"alpha.policy_config"
],
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
},
{
"guardrail": "Highest mastered grade as-of date",
"apiRule": "HMG endpoints return alpha.highest_mastered_grade for the requested asOfDate. Actual mastery-test results from alpha.mastery_ledger are authoritative; summary tables and course placements are fallback only when no qualifying test result exists.",
"rawDbRule": "Use alpha.highest_mastered_grade, or query alpha.mastery_ledger with effective_date <= asOfDate, passed_mastery_gate=true, and the cutoff resolved through alpha.policy_config where policy_name=alpha.policy.mastery_cutoff. Do not hardcode 89.5 and do not use summary/course-placement fallback when qualifying mastery_ledger rows exist.",
"tables": [
"alpha.mastery_ledger",
"alpha.highest_mastered_grade",
"alpha.working_grade",
"alpha.policy_config"
],
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
},
{
"guardrail": "AI grading audit is first-class Results",
"apiRule": "AI-graded test feedback is read through /alpha/results/v1/ai-grading-audit or /students/{studentId}/ai-grading-audit. Rows expose grading_stage, grading_status, ai_provider, ai_model, model_version, prompt_ref, prompt_hash, output_feedback, revision_number, graded_at, and human override fields.",
"rawDbRule": "Read alpha.ai_grading_audit and join to alpha.test_result_component only for display placement. Do not inspect private grader logs, parse alpha.result_record.canonical_response, treat Content/QTI authoring rows as feedback audit, or store model/prompt provenance only in opaque JSON.",
"tables": [
"alpha.ai_grading_audit",
"alpha.result_record",
"alpha.test_result_component"
],
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
},
{
"guardrail": "Student knowledge graph four-state shape",
"apiRule": "KC-state endpoints return initial_mastery, current_retention, durable_mastery, fluency_state, and next_due_at as separate fields.",
"rawDbRule": "Query alpha.student_kc_state at (tenant_id, student_id, kc_id, effective_at) grain and read the four named fields directly. Do not read or create a blended mastery_state/mastery_score column, and do not put mastery on the student record.",
"tables": [
"alpha.student_kc_state",
"alpha.result_kc_evidence"
],
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
]
},
{
"guardrail": "Next-task selection is surface-owned",
"apiRule": "The next-task endpoint returns one typed task_ref with task_type, reason, due_at, source_state_refs, policy_version, and null_reason when no task is available. An exact cached student + subject + as-of-date decision wins; on an exact-date cache miss Results derives the decision under alpha.policy.next_task from its state, the Analytics school calendar, and the Curriculum placement/frontier. A 404 means the student or subject is unknown, never merely that no decision row was imported for that date.",
"rawDbRule": "Use alpha.next_task or the documented equivalent surface view. Do not choose tasks in consumers by sorting current_retention, scanning gate_pass, or walking Curriculum candidates yourself.",
"tables": [
"alpha.next_task",
"alpha.student_kc_state",
"alpha.student_track_state",
"alpha.gate_pass"
],
"itds": [
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
},
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
}
]
},
{
"guardrail": "Current track position",
"apiRule": "GET /alpha/results/v1/students/{studentId}/track-state returns the student's current track_id, current_track_level_id, current_segment_id, placement_evidence, status, switched_to_track_id, effective_at, and source_evidence_refs under the same subject/asOfDate filters used by progress reports.",
"rawDbRule": "Read alpha.student_track_state with tenant_id, student_id, optional subject_id, status='active' for current progress, and the point-in-time predicate: is_time_locatable=true, begin_date IS NOT NULL, begin_date <= asOfDate, and (end_date IS NULL OR end_date >= asOfDate). Do not infer track position from Events, course completion, or copied Curriculum track trees.",
"tables": [
"alpha.student_track_state",
"curriculum.track",
"curriculum.track_level",
"curriculum.track_level_segment"
],
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
},
{
"guardrail": "Course and grade-level progress",
"apiRule": "GET /alpha/results/v1/students/{studentId}/course-progress and /grade-level-progress return the student-facing progress answers: XP remaining, total/main-sequence XP, percent_complete, active_path_state, pacing_status, policy_ref, and source refs.",
"rawDbRule": "Read alpha.student_course_progress and alpha.student_grade_level_progress at the same student_id, subject_id, course_id or grade_level, and as_of_date. Progress resolves XP remaining first: use app-reported XP remaining when present; else convert app-reported percent_complete to XP remaining; else estimate from completed XP. Results derives percent_complete from XP remaining over total_xp or grade_level_xp_remaining over main_sequence_total_xp. Do not derive progress from MAP/RIT/R90, call Analytics completion_rollups as the final app-facing contract, walk Curriculum trees, count Results rows, or count local school-calendar days.",
"tables": [
"alpha.student_course_progress",
"alpha.student_grade_level_progress",
"alpha.student_track_state",
"alpha.working_grade",
"Analytics completion/XP rollup refs",
"Curriculum expected-XP refs",
"People & Orgs calendar refs"
],
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
},
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
},
{
"guardrail": "MAP current context, test-of-record, and soft-delete dedup",
"apiRule": "alpha.map_current_score returns the GOALS/student-facing current MAP context using latest active Growth MAP first and screener/non-growth fallback only when no Growth MAP exists. alpha.map_score returns the NWEAMap highest-RIT term test_of_record row for report/test-of-record workflows. alpha.map_sitting returns all sittings, including soft-deleted rows, only with sittingScope=all, ordinary Results read authority, and the exact results:audit scope checked before repository resolution or reads.",
"rawDbRule": "Use alpha.map_current_score for GOALS current MAP answers and alpha.map_score for term-scoped highest-RIT test_of_record answers. If querying NWEAMap raw/projection rows directly, apply the same named policy: current-map excludes soft-deleted rows and ranks GrowthMeasureYN=Y before latest test_start_at; map_score applies the highest-RIT test_of_record rule and groups by (student_id, subject_id, canonical_term_id, norms_set).",
"tables": [
"alpha.map_current_score",
"alpha.map_score",
"alpha.map_sitting",
"nweamap.assessment_result_projection"
],
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
},
{
"guardrail": "MAP import supersede scope is student/subject/term",
"apiRule": "When a NWEA MAP import supersedes missing or replaced sittings, it may soft-delete only stale rows for the same tenant, student, subject, and canonical term. Importing student B can never soft-delete student A's sittings.",
"rawDbRule": "Audit alpha.map_sitting by (tenant_id, student_id, subject_id, canonical_term_id). A supersede sweep whose predicate omits student_id is invalid even if subject and term match. Cross-student isolation smoke: import A's rows, import B's rows, then A's all-sittings read remains visible.",
"tables": [
"alpha.map_sitting",
"alpha.map_score",
"alpha.report_retake_audit",
"alpha.result_source_evidence"
],
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
},
{
"guardrail": "MAP goal-strand unpivot",
"apiRule": "alpha.map_goal_strand exposes clean one-row-per-strand answers with goal_gap already computed by the surface.",
"rawDbRule": "Do not query Goal1Name..Goal8Adjective positionally in consumers. Use alpha.map_goal_strand or reproduce the documented view shape: one row per nonblank goal name, with strand_rit, strand_standard_error, overall_rit, and goal_gap = strand_rit - overall_rit.",
"tables": [
"alpha.map_goal_strand",
"nweamap.raw_assessment_results"
],
"itds": [
{
"id": "ritd-008-map-goal-strands",
"title": "MAP Goal Scores Are Clean Strand Rows",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
},
{
"guardrail": "Norms and growth-window isolation",
"apiRule": "normsSet and growthWindow are typed parameters and row fields. Changing normsSet regenerates report answers under another norms set.",
"rawDbRule": "Group and filter by norms_set and growth_window whenever either appears in the table key. Never mix 2020 and 2025 values in one row, and never select NWEA positional growth columns directly.",
"tables": [
"alpha.map_normed_result",
"alpha.map_growth_window",
"alpha.report_growth_breakdown"
],
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
},
{
"guardrail": "Percentile/RIT translation is surface-owned",
"apiRule": "GOALS and report endpoints translate percentile to RIT, and RIT to percentile, by calling the Results surface with subject, gradeLevel, termSeason, normsSet, and translationDirection.",
"rawDbRule": "Read alpha.map_percentile_translation or the documented calculator output. Do not ship or join a local NWEA norms table in SQL, skill packs, dashboards, or migration scripts.",
"tables": [
"alpha.map_percentile_translation",
"alpha.map_normed_result",
"alpha.map_effective_grade"
],
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
},
{
"guardrail": "R90 source is NWEAMAP-owned",
"apiRule": "GOALS RIT->grade reads the skill-seeded NWEAMAP R90 surface directly or through the Analytics mirror. Results map_r90_norm_point rows are legacy report fixtures, not an authoritative grade2RIT table.",
"rawDbRule": "Use the NWEAMAP-owned grade2RIT/R90 table or Analytics mirror for GOALS. A local r90 table, production-sampled oracle, Results fixture oracle, or unversioned RIT90 lookup is invalid.",
"tables": [
"alpha.map_r90_norm_point",
"alpha.map_effective_grade",
"alpha.policy_config"
],
"itds": [
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
},
{
"guardrail": "Group Growth X averages student ratios",
"apiRule": "Group Growth X reports return average_growth_x computed as the average of each eligible student's individual growth_x ratio.",
"rawDbRule": "When checking the raw path, aggregate avg(alpha.map_growth_window.growth_x) at the documented group grain. Never compute sum(observed_growth) / sum(projected_growth), because that is a different measure.",
"tables": [
"alpha.report_group_growth_x",
"alpha.map_growth_window"
],
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]
},
{
"guardrail": "School levels and tenure buckets use locked registries",
"apiRule": "Report filters for school_level and tenure_bucket use the governed WL/LL/L1/L2/MS/HS and alpha.policy.tenure_buckets registries joined from People & Orgs/policy.",
"rawDbRule": "Filter by the documented school_level and tenure_bucket fields. Do not invent dashboard-local level labels, parse school names, or hardcode tenure band edges.",
"tables": [
"alpha.map_score",
"alpha.report_group_growth_x",
"alpha.policy_config"
],
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
}
]
},
{
"guardrail": "Join grain for settled answers",
"apiRule": "List and report endpoints return rows at the documented composite key, not student-only aggregates.",
"rawDbRule": "Use each table's documented primary key as the dedupe/join grain. Growth X is keyed by (tenant_id, student_id, subject_id, canonical_term_id, growth_window, norms_set); KC state by (tenant_id, student_id, kc_id, effective_at); track state by (tenant_id, student_id, track_id); XP awards by xp_award_id; content effectiveness by (content_id, content_version_id, kc_id, policy_version); transcript answers by (tenant_id, student_id, course_id, canonical_term_id, academic_record_id/course_transcript_id); minutes reconciliation belongs to Events by (student_id, day).",
"tables": [
"alpha.map_growth_window",
"alpha.student_kc_state",
"alpha.student_track_state",
"alpha.xp_ledger",
"alpha.content_effectiveness",
"alpha.report_closed_loop_reconciliation"
],
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
},
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
},
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
},
{
"guardrail": "Ed-Fi transcript: Tenant scope",
"apiRule": "Transcript API reads use the tenant claim from the platform JWT.",
"rawDbRule": "Raw readers filter every alpha.academic_record_view, alpha.course_transcript_view, alpha.course_grade_view, and alpha.transcript_result_view query by tenant_id before any other predicate.",
"tables": [
"alpha.academic_record_view",
"alpha.course_transcript_view",
"alpha.course_grade_view",
"alpha.transcript_result_view"
],
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
},
{
"guardrail": "Ed-Fi transcript: Record-kind restriction",
"apiRule": "Results exposes only StudentAcademicRecord, CourseTranscript, Grade, and GradebookEntry-derived transcript facts from Ed-Fi.",
"rawDbRule": "Raw readers filter edfi.canonical_record by resource_name/record kind in {StudentAcademicRecord, CourseTranscript, Grade, GradebookEntry}; attendance, discipline, guardians, staff, demographics, and other Ed-Fi domains are outside Results.",
"tables": [
"alpha.academic_record_view",
"alpha.course_transcript_view",
"alpha.course_grade_view",
"alpha.transcript_result_view"
],
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
},
{
"guardrail": "Ed-Fi transcript: Canonical-only state",
"apiRule": "Transcript reads expose canonical Ed-Fi records only, never draft or pre-ack UI recovery rows.",
"rawDbRule": "Raw readers use alpha.* transcript views over edfi.canonical_record and exclude edfi.draft_record; a missing ack_id or non-canonical state is not a settled Results fact.",
"tables": [
"alpha.academic_record_view",
"alpha.course_transcript_view",
"alpha.course_grade_view",
"alpha.transcript_result_view"
],
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
},
{
"guardrail": "Ed-Fi transcript: Soft-delete filtering",
"apiRule": "Ordinary transcript list/detail reads exclude soft-deleted Ed-Fi canonical records and omit every field named by the includeSourceEvidence projection. Authorized evidence requires includeSourceEvidence=true, ordinary Results read authority, and the exact results:audit scope checked before repository resolution or reads.",
"rawDbRule": "Raw readers apply is_deleted = false by default. The HTTP projection returns only the documented typed evidence fields; it never returns payload_json, raw payload blobs, credentials, tokens, or secrets.",
"tables": [
"alpha.academic_record_view",
"alpha.course_transcript_view",
"alpha.course_grade_view",
"alpha.transcript_result_view"
],
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
},
{
"guardrail": "Ed-Fi transcript: Descriptor resolution",
"apiRule": "Term, grade type, course attempt result, credit type/category, repeat code, and GPA/credit descriptors are returned as governed codes plus labels.",
"rawDbRule": "Raw readers resolve descriptor-valued payload_json fields through edfi.descriptor_code by tenant, descriptor_type, namespace, code_value, and effective-date window; no local descriptor tables or free-text fallbacks.",
"tables": [
"alpha.academic_record_view",
"alpha.course_transcript_view",
"alpha.course_grade_view",
"alpha.transcript_result_view"
],
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
},
{
"guardrail": "Ed-Fi transcript: Roster boundary",
"apiRule": "Transcript reads identify students, schools, classes, courses, and sections through platform3 sourcedIds.",
"rawDbRule": "Raw readers join student_sourced_id, school_sourced_id, class_sourced_id, course_sourced_id, and enrollment_sourced_id from edfi.canonical_record to the approved OneRoster/People & Orgs views; they never duplicate roster facts into Results.",
"tables": [
"alpha.academic_record_view",
"alpha.course_transcript_view",
"alpha.course_grade_view",
"alpha.transcript_result_view"
],
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
},
{
"guardrail": "Surface-owned calculations",
"apiRule": "Growth X, group Growth X, percentile/RIT translation, Results report fixtures, effective grade, 99-levels, advancement, highest mastered grade, working grade, four-state KC state, next-task selection, awarded XP, content effectiveness, and report answer keys are returned by Results. GOALS grade2RIT/R90 is returned by NWEAMAP directly or the Analytics mirror.",
"rawDbRule": "Raw queries may read the documented output fields, but must not reimplement formulas from base fields. This includes Growth X, group Growth X, percentile/RIT translation, Results report fixtures, effective grade, 99-levels, advancement, highest mastered grade, working grade, four-state KC state, next-task selection, awarded XP, and content effectiveness. If a needed answer is missing from a view, the data dictionary has leaked and the surface must be tightened upstream. GOALS grade2RIT/R90 must use NWEAMAP/Analytics, not Results fixtures.",
"tables": [
"alpha.map_growth_window",
"alpha.report_group_growth_x",
"alpha.map_percentile_translation",
"alpha.map_r90_norm_point",
"alpha.map_effective_grade",
"alpha.map_99_level",
"alpha.advancement",
"alpha.highest_mastered_grade",
"alpha.student_kc_state",
"alpha.next_task",
"alpha.xp_ledger",
"alpha.content_effectiveness",
"alpha.report_answer_key"
],
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"id": "ritd-013-ninety-nine-levels",
"title": "99-Levels Preserve Growth Above Percentile Ceilings",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-013-ninety-nine-levels"
},
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"id": "ritd-034-next-task-selection",
"title": "Next Task Selection Is One Results Surface Call",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
},
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
},
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
},
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
}
]
},
{
"guardrail": "XP ledger is append-only and surface-computed",
"apiRule": "XP endpoints return xp_ledger rows and balances derived from the ledger. Events, gates, engines, and clients cannot write canonical XP awards.",
"rawDbRule": "Use alpha.xp_ledger as immutable history. Sum awarded_xp at the documented ledger grain, include reversal rows, and never compute XP from Events, gate_pass, Content expected_xp, or engine output in a consumer.",
"tables": [
"alpha.xp_ledger",
"alpha.result_record",
"alpha.result_source_evidence"
],
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
},
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
}
]
},
{
"guardrail": "Content effectiveness is recomputed by Results",
"apiRule": "Content-effectiveness reads return validated_by_count, failed_by_count, effectiveness_rate, policy_version, and provenance from alpha.content_effectiveness.",
"rawDbRule": "Read alpha.content_effectiveness for counters/rates. Do not increment counters in apps and do not recompute effectiveness_rate from raw attempts; result_content_evidence is input evidence, not the public rollup.",
"tables": [
"alpha.content_effectiveness",
"alpha.result_content_evidence"
],
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
},
{
"guardrail": "Raw import producer identity resolution",
"apiRule": "POST /alpha/results/v1/imports accepts the producer student identifier exactly as it appears in TimeBack or NWEA source rows and resolves it server-side through the People & Orgs source-identity index. The caller does not replace it with canonical student_id first.",
"rawDbRule": "Verify import identity by joining source evidence/upstream_key to People & Orgs source-identity rows, then to public student_id. Return results:adapter_rejected only when the producer id is genuinely absent from People & Orgs for the tenant/source, not when the source id is non-canonical but indexed.",
"tables": [
"alpha.result_source_evidence",
"alpha.result_record",
"alpha.map_sitting",
"people_and_orgs source identity index"
],
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
]
},
{
"guardrail": "Raw ingest adapter materializes readable rows",
"apiRule": "POST /alpha/results/v1/imports accepts source-shaped TimeBack assessment rows, NWEA MAP CDF AssessmentResults rows, and Results next-task decision rows, normalizes server-side, returns 400 for results:validation_failed, 422 for results:adapter_rejected, and succeeds only when accepted non-dry-run rows are readable through Results public objects.",
"rawDbRule": "Raw readers verify imports by sourceShape: TimeBack rows must appear in alpha.result_record and, when item responses are present, alpha.test_result_component; when AI grading evidence is present, alpha.ai_grading_audit must carry model/prompt/feedback/revision provenance. NWEA rows must appear in alpha.map_sitting/map_score/map_current_score/map_goal_strand/map_growth_window and report-ready MAP views. results_next_task_decision rows must appear in alpha.next_task and alpha.results_alpha_import_receipt; they do not create result_source_evidence because that evidence table is keyed to result_record. Evidence-only zero-row imports are rejected, not counted as success.",
"tables": [
"alpha.result_source_evidence",
"alpha.result_record",
"alpha.test_result_component",
"alpha.ai_grading_audit",
"alpha.student_kc_state",
"alpha.xp_ledger",
"alpha.map_sitting",
"alpha.map_score",
"alpha.map_current_score",
"alpha.map_goal_strand",
"alpha.map_growth_window",
"alpha.next_task",
"alpha.results_alpha_import_receipt",
"alpha.report_closed_loop_reconciliation"
],
"itds": [
{
"id": "ritd-018-axis-write-granularity",
"title": "API Axis: Write Granularity",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-018-axis-write-granularity"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
]
},
{
"guardrail": "Closed-loop reconciliation supports one-student cutover",
"apiRule": "GET /alpha/results/v1/reports/closed-loop-reconciliation accepts studentId as a typed TimeBack student-id filter. Unsupported free-form filters still return results:unsupported_parameter, but studentId itself is supported.",
"rawDbRule": "Filter alpha.report_closed_loop_reconciliation by tenant_id and student_id at the documented metric grain. Do not use raw NWEA StudentID or source display names for the student filter, and do not reject student_id as unsupported when the raw dictionary path needs a one-student cutover check.",
"tables": [
"alpha.report_closed_loop_reconciliation"
],
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
},
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
]
},
{
"guardrail": "Alpha storage gate",
"apiRule": "Renamed, cut, and restricted objects are served as SQL views over OneRoster/NWEAMap/Ed-Fi. Only true extensions write Alpha-owned tables.",
"rawDbRule": "Query alpha.* views for public answers. Do not create or depend on copied Alpha tables for alpha.gradebook_item, alpha.result_record, alpha.test_result_component, alpha.ai_grading_audit, alpha.map_score, alpha.map_current_score, alpha.map_sitting, alpha.map_goal_strand, alpha.academic_record_view, alpha.course_transcript_view, alpha.course_grade_view, or alpha.transcript_result_view. Extension tables may hold only new Alpha fields plus FK/source references.",
"tables": [
"alpha.gradebook_item",
"alpha.result_record",
"alpha.test_result_component",
"alpha.ai_grading_audit",
"alpha.map_score",
"alpha.map_current_score",
"alpha.map_sitting",
"alpha.map_goal_strand",
"alpha.academic_record_view",
"alpha.course_transcript_view",
"alpha.course_grade_view",
"alpha.transcript_result_view"
],
"itds": [
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}
]problemCodes
[
{
"code": "results:validation_failed",
"httpStatus": 400,
"type": "https://platform.timeback.com/problems/results/validation_failed",
"meaning": "The request envelope, query parameter, required body field, enum value, date, or typed filter is invalid before a producer adapter can run.",
"appliesTo": "Malformed JSON, missing sourceShape, missing records[], non-array records, invalid studentId syntax, invalid normsSet/growthWindow/metricKind, or a body that asks the caller to supply platform-owned normalized fields instead of source-shaped rows.",
"responseRule": "Return HTTP 400 with RFC 7807 body, code=results:validation_failed, requestId, traceId, and fieldErrors. Never return HTTP 200 or 202 with this code in the body.",
"itds": [
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
},
{
"id": "ritd-018-axis-write-granularity",
"title": "API Axis: Write Granularity",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-018-axis-write-granularity"
}
]
},
{
"code": "results:adapter_rejected",
"httpStatus": 422,
"type": "https://platform.timeback.com/problems/results/adapter_rejected",
"meaning": "The request envelope is valid, but one or more source-shaped producer rows cannot be normalized by the named server-side adapter.",
"appliesTo": "Producer student identifier is genuinely absent from the People & Orgs source-identity index for this tenant/source, NWEA StudentID/Student_StateID cannot map through that index, source term cannot resolve to canonical_term_id, impossible MAP RIT/score shape, missing producer result identity, or a batch would materialize zero readable rows when dry_run=false. It does not apply merely because the producer id is not already the canonical TimeBack student_id.",
"responseRule": "Return HTTP 422 with RFC 7807 body, code=results:adapter_rejected, and row-level fieldErrors. Never report accepted_count=0 as success for a non-dry-run import. Rejecting a row whose producer id exists in People & Orgs source identity is an implementation defect against this contract.",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
]
},
{
"code": "results:unsupported_parameter",
"httpStatus": 400,
"type": "https://platform.timeback.com/problems/results/unsupported_parameter",
"meaning": "A request includes an undocumented query parameter, filter, or sort field for the endpoint.",
"appliesTo": "currentOnly, raw NWEA field filters, free-form filters, or unsupported sort keys. Does not apply to studentId on closed-loop reconciliation; studentId is a supported typed filter.",
"responseRule": "Return HTTP 400 with code=results:unsupported_parameter and one fieldErrors row per unsupported parameter.",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
]
},
{
"code": "results:idempotency_conflict",
"httpStatus": 409,
"type": "https://platform.timeback.com/problems/results/idempotency-conflict",
"meaning": "An Idempotency-Key was reused for a different import, write, correction, or recompute request. During the bounded results-v1-bridge rollout only, a legacy observer may use this code for a same-body tagged live fence as one fail-closed compatibility outcome defined by the owning decision; the trigger-race outcome can instead be a generic 500.",
"appliesTo": "POST /alpha/results/v1/imports and every other durable Results mutation.",
"responseRule": "Return HTTP 409; do not run the adapter and do not write partial rows. A caller that receives this temporary legacy-fence response, or the bridge trigger's generic fail-closed 500, retries the same key after rollout drain and must not rotate keys from that response alone.",
"itds": [
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
]
},
{
"code": "results:idempotency_in_progress",
"httpStatus": 409,
"type": "https://platform.timeback.com/problems/results/idempotency-in-progress",
"meaning": "The same scoped Idempotency-Key and canonical request already has a live Results owner.",
"appliesTo": "Every durable Results mutation governed by the Results idempotency compatibility decision.",
"responseRule": "Return HTTP 409 with Retry-After equal to the remaining lease seconds, rounded up and clamped to the inclusive 1–30 second owner-lease window. Even a corrupt future locked_until cannot extend that guidance; do not execute, reclaim, or store this progress response as a terminal replay.",
"itds": [
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
},
{
"id": "results-idempotency-compatibility-decision",
"title": "Results idempotency rolling-deployment compatibility",
"href": "loop/context/results-idempotency-compatibility-decision.md"
}
]
},
{
"code": "results:idempotency_key_expired",
"httpStatus": 409,
"type": "https://platform.timeback.com/problems/results/idempotency-key-expired",
"meaning": "The retained Idempotency-Key is outside its 24-hour replay window and is not an unresolved commit-uncertain receipt.",
"appliesTo": "Every durable Results mutation governed by the Results idempotency compatibility decision.",
"responseRule": "Return HTTP 409 and do not replay or execute the retained operation. A new key denotes a new operation; expiry never authorizes retry of a commit-uncertain mutation.",
"itds": [
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
},
{
"id": "results-idempotency-compatibility-decision",
"title": "Results idempotency rolling-deployment compatibility",
"href": "loop/context/results-idempotency-compatibility-decision.md"
}
]
},
{
"code": "results:idempotency_commit_uncertain",
"httpStatus": 500,
"type": "https://platform.timeback.com/problems/results/idempotency-commit-uncertain",
"meaning": "Results cannot prove whether the original domain mutation committed and has no safe replay receipt.",
"appliesTo": "Ambiguous COMMIT acknowledgement, including transport failures, SQLSTATE 08007, 40003, or 57014, stale legacy bridge claims, and malformed or contradictory retained receipt state. It excludes server-confirmed class-40 transaction rollbacks other than 40003 and class-23 integrity failures.",
"responseRule": "Return HTTP 500, never execute or automatically reclaim, and preserve this outcome even after expires_at. Only independent support reconciliation may change the state.",
"itds": [
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
},
{
"id": "results-idempotency-compatibility-decision",
"title": "Results idempotency rolling-deployment compatibility",
"href": "loop/context/results-idempotency-compatibility-decision.md"
}
]
},
{
"code": "results:precondition_required",
"httpStatus": 428,
"type": "https://platform.timeback.com/problems/results/precondition-required",
"meaning": "A mutable Results request omitted the current resource version required to prevent an accidental overwrite.",
"appliesTo": "PATCH /alpha/results/v1/result-records/{resultRecordId} without If-Match. Idempotency-Key is independently required for the durable correction operation.",
"responseRule": "Return HTTP 428 before mutation. The same correction may be retried with the same Idempotency-Key after the caller fetches the current ETag.",
"itds": [
{
"id": "ritd-021-axis-concurrency-model",
"title": "API Axis: Concurrency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-021-axis-concurrency-model"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
]
},
{
"code": "results:precondition_failed",
"httpStatus": 412,
"type": "https://platform.timeback.com/problems/results/precondition-failed",
"meaning": "The supplied If-Match value is malformed, unknown, or no longer matches the current result-record ETag.",
"appliesTo": "PATCH /alpha/results/v1/result-records/{resultRecordId} when another committed correction has changed the current public row or the caller did not supply a matching entity tag.",
"responseRule": "Validate inside the same transaction as the correction. Return HTTP 412 with no domain mutation, store the failure as the permanent receipt for this Idempotency-Key and request, and replay that exact 412 without revalidation.",
"itds": [
{
"id": "ritd-021-axis-concurrency-model",
"title": "API Axis: Concurrency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-021-axis-concurrency-model"
},
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
}
]
},
{
"code": "results:correction_lock_timeout",
"httpStatus": 503,
"type": "https://platform.timeback.com/problems/results/correction-lock-timeout",
"meaning": "Another transaction held the exact result-record correction lock longer than the bounded wait.",
"appliesTo": "PATCH /alpha/results/v1/result-records/{resultRecordId} after PostgreSQL's transaction-local 2000ms correction lock timeout expires.",
"responseRule": "Return HTTP 503 with Retry-After: 1, roll back, and retain only transient idempotency state. Retry the identical request with the same Idempotency-Key; never store this temporary wait failure as a permanent receipt.",
"itds": [
{
"id": "ritd-021-axis-concurrency-model",
"title": "API Axis: Concurrency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-021-axis-concurrency-model"
},
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
}
]
},
{
"code": "results:authorization_failed",
"httpStatus": 403,
"type": "https://platform.timeback.com/problems/results/authorization_failed",
"meaning": "The token is valid but does not have the needed Results scope or student relationship.",
"appliesTo": "Raw imports without results:adapter, writes without results:write, or reads outside studentIds/guardianOf/guideOf/school/class scope.",
"responseRule": "Return HTTP 403 and redact source payload details from the Problem.",
"itds": [
{
"id": "ritd-023-axis-auth-shape",
"title": "API Axis: Auth Shape",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-023-axis-auth-shape"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
]
},
{
"code": "results:audit_scope_required",
"httpStatus": 403,
"type": "https://platform.timeback.com/problems/results/audit-scope-required",
"meaning": "The token can perform an ordinary Results read but lacks the explicit authority for bounded source/deletion evidence.",
"appliesTo": "includeSourceEvidence=true on the four transcript collections and sittingScope=all on alpha.map_sitting when the token lacks either ordinary Results read authority or the exact results:audit scope.",
"responseRule": "Return HTTP 403 before repository resolution or reads. Roles and results:* do not substitute for results:audit; results:audit does not substitute for ordinary read authority. Do not expose evidence in the Problem body.",
"itds": [
{
"id": "ritd-023-axis-auth-shape",
"title": "API Axis: Auth Shape",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-023-axis-auth-shape"
},
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
},
{
"code": "results:not_found",
"httpStatus": 404,
"type": "https://platform.timeback.com/problems/results/not_found",
"meaning": "The requested Results row or import evidence row is not visible in the caller's tenant/scope.",
"appliesTo": "GET import status, detail reads, or reconciliation rows that do not exist for the typed key.",
"responseRule": "Return HTTP 404; do not leak whether the id exists in another tenant.",
"itds": [
{
"id": "ritd-026-axis-tenant-routing",
"title": "API Axis: Tenant Routing",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-026-axis-tenant-routing"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
]
}
]rawIngestContract
{
"endpoint": "POST /alpha/results/v1/imports",
"audience": "Migration app, source adapters, and operators importing raw TimeBack Production or NWEA MAP rows.",
"method": "POST",
"auth": "Bearer JWT with results:adapter scope or adapter role. Tenant comes from the JWT; no tenant id appears in the URL.",
"idempotency": "Required Idempotency-Key header. Replays of the same accepted request may return HTTP 200 with idempotency-replayed=true; validation or adapter failures never replay as success.",
"successStatus": "202 Accepted for a new successful import; 200 only for an idempotent replay of the same accepted import.",
"materializationRule": "Successful imports must materialize readable public Results rows before returning 202. TimeBack rows materialize result/evidence/KC/XP/read-model rows; NWEA rows materialize MAP rows and report-ready views; results_next_task_decision rows materialize alpha.next_task directly and record import receipt readback without creating placeholder result records.",
"noPreNormalizationRule": "The caller sends source-shaped records. The Results surface normalizes server-side: student identity, subject aliases, term parsing, NWEA test-of-record, soft-delete handling, norms, Growth X, goal-strand unpivot, mastery state, XP awards, and report-ready rows. If the caller has to compute any of those before import, the surface leaked.",
"identityResolutionRule": "records[] carries the raw producer student identifier exactly as it appears in TimeBack reporting rows or NWEA CDF rows. Results resolves that value server-side through the People & Orgs source-identity index imported by the same migration. A row is results:adapter_rejected only when that producer id is genuinely absent from People & Orgs for the tenant/source; a known producer id that is rejected is a Results implementation defect, not a caller error.",
"subjectNormalizationRule": "The caller may send production source subject strings. The Results adapter folds every observed source subject through the published alpha.subject alias/disposition registry, validates the six-value public enum, applies MAP proxy rules, and excludes/quarantines non-reportable source labels before rows become public.",
"mapSupersedeScopeRule": "For sourceShape=nwea_map_assessment_result, replacement/supersede sweeps are scoped to (tenant_id, student_id, subject_id, canonical_term_id). The import must never soft-delete another student's sittings just because subject and term match.",
"sourceShapes": [
{
"value": "timeback_assessment_result",
"acceptedRecordShape": "Raw TimeBack Production assessment/result row.",
"requiredSourceEvidence": [
"raw producer student identifier exactly as it appears in the TimeBack reporting row and resolvable through People & Orgs source identity",
"producer assessment/result id or attempt id",
"subject or source subject alias covered by the alpha.subject registry",
"occurred/completed timestamp or source term evidence",
"score, response, or outcome evidence"
],
"normalizesTo": [
"alpha.result_record",
"alpha.test_result_component when item responses are present",
"alpha.ai_grading_audit when AI grading evidence is present",
"alpha.result_source_evidence",
"alpha.result_kc_evidence when KC evidence is present",
"alpha.student_kc_state recompute when mastery evidence is present",
"alpha.xp_ledger when award policy applies"
],
"invalidWhen": "The row is already reduced to only canonical Results fields, lacks producer identity, the producer student id is genuinely absent from People & Orgs source identity, or the row would require caller-side mastery/XP math."
},
{
"value": "nwea_map_assessment_result",
"acceptedRecordShape": "Raw NWEA MAP CDF AssessmentResults row with NWEA field names.",
"requiredSourceEvidence": [
"StudentID or Student_StateID exactly as NWEA sent it and resolvable through People & Orgs source identity",
"Subject covered by the alpha.subject registry or explicit exclusion/proxy rule",
"TermName or equivalent term field",
"TestID or equivalent sitting id",
"TestRITScore",
"TestStartDate/TestStartTime or sitting timestamp",
"NormsReferenceData when normed outputs are requested"
],
"normalizesTo": [
"alpha.map_sitting",
"alpha.map_score",
"alpha.map_current_score",
"alpha.map_goal_strand",
"alpha.map_growth_window",
"alpha.map_normed_result",
"alpha.map_effective_grade",
"alpha.map_longitudinal_point",
"alpha.map_99_level",
"MAP report-ready views"
],
"invalidWhen": "The row requires caller-side NWEA dedupe, goal-column unpivot, term parsing, norms switching, Growth X calculation, TimeBack identity replacement, or a supersede sweep outside the row's student/subject/term scope."
},
{
"value": "results_next_task_decision",
"acceptedRecordShape": "Results next-task decision row from production PowerPath/placement state.",
"requiredSourceEvidence": [
"raw producer student identifier resolvable through People & Orgs source identity",
"subject or source subject alias covered by the alpha.subject registry",
"asOfDate for the point-in-time decision",
"task_type, task_ref_type, task_ref_id, and reason when a task is available",
"policy_version and source_state_refs for the producer decision evidence"
],
"normalizesTo": [
"alpha.next_task",
"alpha.results_alpha_import_receipt for import status/readback"
],
"invalidWhen": "The row asks the app to rank tasks, lacks a resolvable student, omits the point-in-time asOfDate, uses an undocumented task_type/reason, or is mixed into a TimeBack/NWEA assessment import batch instead of using its own top-level sourceShape."
}
],
"requestFields": [
{
"name": "source_adapter_id",
"type": "TEXT",
"required": "Required",
"meaning": "Named Results adapter that owns normalization and write routing for this producer.",
"constraints": "Must reference an active alpha.source_adapter with adapter authority for the caller.",
"example": "adapter_timeback_migration",
"provenance": {
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}
},
{
"name": "producer_batch_id",
"type": "TEXT",
"required": "Required",
"meaning": "Producer's stable batch/export id used with Idempotency-Key and source evidence.",
"constraints": "1 to 255 visible characters; unique enough with source_adapter_id to identify a producer batch.",
"example": "timeback-prod-results-2026-06-08T15",
"provenance": {
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}
},
{
"name": "sourceShape",
"type": "TEXT enum",
"required": "Required",
"meaning": "Names the source-shaped record family in records[].",
"constraints": "Must be one of the documented raw_import_source_shape values; one import call carries one shape.",
"example": "timeback_assessment_result",
"allowedValues": [
{
"value": "timeback_assessment_result",
"meaning": "Raw TimeBack Production assessment/result row. The caller sends the source row as-is; Results resolves student, subject, term, content/test family, score evidence, KC evidence, mastery, XP, and report rows server-side.",
"useWhen": "Raw TimeBack Production assessment/result row. The caller sends the source row as-is; Results resolves student, subject, term, content/test family, score evidence, KC evidence, mastery, XP, and report rows server-side.",
"invalidWhen": "Invalid when timeback_assessment_result does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "nwea_map_assessment_result",
"meaning": "Raw NWEA MAP Growth CDF AssessmentResults row. The caller sends NWEA field names such as StudentID, TermName, Subject, TestID, TestRITScore, NormsReferenceData, and GoalN fields; Results routes through the NWEAMap base contract and materializes public MAP reads server-side.",
"useWhen": "Raw NWEA MAP Growth CDF AssessmentResults row. The caller sends NWEA field names such as StudentID, TermName, Subject, TestID, TestRITScore, NormsReferenceData, and GoalN fields; Results routes through the NWEAMap base contract and materializes public MAP reads server-side.",
"invalidWhen": "Invalid when nwea_map_assessment_result does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "results_next_task_decision",
"meaning": "Optional production next-task cache seed. The caller sends an already platform-produced exact-date decision with task_type, task_ref_type, task_ref_id, reason, policy_version, and source_state_refs; Results materializes alpha.next_task so an exact cache hit can be rendered without recomputation. Missing rows are computed by the next-task read and never require an operator seed per date.",
"useWhen": "Use for migration or cutover cache seeding of an already governed exact-date decision; do not use it as the only way new dates receive a decision.",
"invalidWhen": "Invalid when results_next_task_decision does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"provenance": {
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
},
"edgeCases": "A single import batch uses one sourceShape. Use separate import calls for TimeBack assessment rows, NWEA MAP CDF rows, and Results next-task decision rows so each adapter owns normalization, dedupe, materialization, and cache/readback semantics."
},
{
"name": "records",
"type": "JSONB array",
"required": "Required",
"meaning": "Array of raw producer rows, not pre-normalized canonical Results rows.",
"constraints": "1 through the endpoint's configured batch limit. Each element must be a JSON object with producer field names preserved, including the producer student identifier exactly as sent by the source.",
"example": "[{\"studentId\":\"tb-prod-raw-student-981234\",\"assessmentId\":\"factoring-gate\",\"scorePercent\":92.5}]",
"provenance": {
"label": "Source evidence extension",
"changeType": "EXTEND",
"basis": "Source-evidence rows store Results-owned audit references and hashes, not copied source payload fields.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}
},
{
"name": "dry_run",
"type": "BOOLEAN",
"required": "Optional; defaults to false",
"meaning": "Validate and normalize without writing rows.",
"constraints": "When true, response status is 200 and materialized ids are empty by design; when false, zero materialized rows is not a success.",
"example": "false",
"provenance": {
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
}
}
],
"responseFields": [
{
"name": "import_id",
"type": "TEXT",
"meaning": "Stable id for this accepted import or dry run.",
"example": "import_timeback_prod_results_2026_06_08T15"
},
{
"name": "status",
"type": "TEXT enum",
"meaning": "Import result state.",
"example": "accepted",
"allowedValues": [
{
"value": "accepted",
"meaning": "The import wrote source evidence and materialized at least one readable Results row.",
"useWhen": "The import wrote source evidence and materialized at least one readable Results row.",
"invalidWhen": "Invalid when accepted does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "replayed",
"meaning": "The same Idempotency-Key replayed a previously accepted import without writing duplicate rows.",
"useWhen": "The same Idempotency-Key replayed a previously accepted import without writing duplicate rows.",
"invalidWhen": "Invalid when replayed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "dry_run",
"meaning": "The adapter validated and normalized records but did not write rows because dry_run=true.",
"useWhen": "The adapter validated and normalized records but did not write rows because dry_run=true.",
"invalidWhen": "Invalid when dry_run does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "rejected",
"meaning": "The adapter rejected one or more source-shaped rows and returned a typed Problem instead of a success envelope.",
"useWhen": "The adapter rejected one or more source-shaped rows and returned a typed Problem instead of a success envelope.",
"invalidWhen": "Invalid when rejected does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
]
},
{
"name": "accepted_count",
"type": "INTEGER",
"meaning": "Number of source rows accepted and materialized when dry_run=false.",
"example": "1733"
},
{
"name": "materialized",
"type": "JSONB object",
"meaning": "Counts and ids of readable rows now visible through Results public objects.",
"example": "{\"result_record\":1733,\"student_kc_state\":812,\"xp_ledger\":1590}"
},
{
"name": "source_evidence_ids",
"type": "JSONB array",
"meaning": "Source evidence rows written for audit and reconciliation.",
"example": "[\"import_timeback_prod_results_2026_06_08T15_1\"]"
},
{
"name": "reconciliation_url",
"type": "TEXT URL",
"meaning": "Typed one-call check for this import. May include studentId for a single-student cutover check.",
"example": "/alpha/results/v1/reports/closed-loop-reconciliation?studentId=stu_timeback_10017&metricKind=growth_x"
}
],
"reconciliation": {
"endpoint": "GET /alpha/results/v1/reports/closed-loop-reconciliation",
"typedSingleStudentFilter": "studentId",
"rule": "studentId is a supported TimeBack student-id filter on reconciliation. It narrows old-vs-Alpha rows to one student and must not return results:unsupported_parameter merely because it is present.",
"example": "/alpha/results/v1/reports/closed-loop-reconciliation?studentId=stu_timeback_10017&metricKind=growth_x&subject=math&canonicalTermId=term_2025_26_spring&normsSet=2025",
"rowMaterializationCheck": "After a successful import, the reconciliation endpoint must be able to show match/mismatch/missing_old/missing_alpha for the imported student's RIT, Growth X, KC state, or minutes key without caller-side computation."
},
"itds": [
{
"id": "ritd-018-axis-write-granularity",
"title": "API Axis: Write Granularity",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-018-axis-write-granularity"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
},
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
}
]
}workedRecipes
[
{
"id": "storage-gate-safe-extension-migration",
"title": "Create an Alpha extension table without copying source fields",
"purpose": "Shows the exact storage-gate pattern for parent_notification_preference: new Alpha columns plus relationship fields to Results objects. It does not copy report_card_entry.grade_value, gate_pass.gate_status, MAP RIT, Growth X, student email, or any OneRoster/NWEAMap field.",
"relatedObjects": [
"alpha.report_card_entry",
"alpha.gate_pass",
"alpha.student_kc_state"
],
"guardrails": [
"tenant_id scopes the row; parent_user_id is a relationship to People & Orgs, not copied parent contact data.",
"report_card_entry_id and gate_pass_id are foreign-key references to Results rows.",
"Notification settings are the only new stored facts."
],
"blocks": [
{
"label": "Postgres migration",
"language": "sql",
"code": "create table alpha.parent_notification_preference (\n tenant_id uuid not null,\n parent_notification_preference_id uuid not null default gen_random_uuid(),\n parent_user_id text not null,\n report_card_entry_id uuid null,\n gate_pass_id uuid null,\n channel text not null check (channel in ('email', 'sms', 'portal')),\n notify_on_report_card_publish boolean not null default true,\n notify_on_gate_status_change boolean not null default true,\n quiet_hours jsonb not null default '{}'::jsonb,\n locale text not null default 'en-US',\n created_at timestamptz not null default now(),\n updated_at timestamptz not null default now(),\n primary key (tenant_id, parent_notification_preference_id),\n foreign key (tenant_id, report_card_entry_id)\n references alpha.report_card_entry (tenant_id, report_card_entry_id),\n foreign key (tenant_id, gate_pass_id)\n references alpha.gate_pass (tenant_id, gate_pass_id),\n check (report_card_entry_id is not null or gate_pass_id is not null)\n);\n\ncomment on table alpha.parent_notification_preference is\n 'Alpha extension table: stores only notification preferences plus FKs to Results rows; source result/MAP/OneRoster fields remain in their approved views.';\ncomment on column alpha.parent_notification_preference.parent_user_id is\n 'Relationship to a People & Orgs parent/guardian identity; do not copy name, email, phone, student_id, grade_value, gate_status, RIT, or Growth X here.';\ncomment on column alpha.parent_notification_preference.report_card_entry_id is\n 'FK reference to alpha.report_card_entry; read report-card facts through the view/table at query time.';\ncomment on column alpha.parent_notification_preference.gate_pass_id is\n 'FK reference to alpha.gate_pass; read gate state through the view/table at query time.';\n\ncreate index parent_notification_preference_report_card_idx\n on alpha.parent_notification_preference (tenant_id, report_card_entry_id)\n where report_card_entry_id is not null;\n\ncreate index parent_notification_preference_gate_pass_idx\n on alpha.parent_notification_preference (tenant_id, gate_pass_id)\n where gate_pass_id is not null;"
}
],
"proves": "A downstream extension can join to Results rows without creating a copied Alpha store of report-card, gate, MAP, or roster source fields."
},
{
"id": "raw-source-ingest-and-reconciliation",
"title": "Import raw TimeBack and NWEA rows, then run a one-student reconciliation",
"purpose": "Shows the migration contract that the caller sends source-shaped records and the Results surface does the normalization, materialization, and reconciliation. This recipe is the dictionary-level guard against the prior failure where an import returned HTTP 200 with results:validation_failed and zero rows, then rejected studentId on reconciliation.",
"relatedObjects": [
"alpha.result_source_evidence",
"alpha.result_record",
"alpha.map_score",
"alpha.map_goal_strand",
"alpha.map_growth_window",
"alpha.report_closed_loop_reconciliation"
],
"guardrails": [
"Do not pre-normalize TimeBack rows into canonical Results fields before import.",
"Send the raw producer student identifier exactly as it appears in the TimeBack or NWEA row; Results resolves it through People & Orgs source identity.",
"Do not pre-dedupe NWEA sittings, unpivot GoalN fields, parse TermName, compute Growth X, or swap NWEA StudentID into student_id in the caller.",
"NWEA supersede sweeps are scoped to one student/subject/term; importing student B must not soft-delete student A's sittings.",
"A non-dry-run success must return 202 with accepted_count > 0 and materialized public-row ids/counts.",
"results:validation_failed is HTTP 400, results:adapter_rejected is HTTP 422, and studentId is a supported reconciliation filter."
],
"blocks": [
{
"label": "Raw TimeBack assessment-result import",
"language": "bash",
"code": "BASE_URL=\"https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/implementation/api\"\nTOKEN=\"$(curl -sS -X POST \"$BASE_URL/dev/mint?tenantId=demo\" | jq -r '.token')\"\n\ncat > timeback-import.json <<'JSON'\n{\n \"source_adapter_id\": \"adapter_timeback_migration\",\n \"producer_batch_id\": \"timeback-prod-results-2026-06-08T15\",\n \"sourceShape\": \"timeback_assessment_result\",\n \"records\": [\n {\n \"studentId\": \"tb-prod-raw-student-981234\",\n \"assessmentId\": \"factoring-gate\",\n \"attemptId\": \"tb-attempt-88341\",\n \"subject\": \"Mathematics\",\n \"termName\": \"Spring 2025-2026\",\n \"completedAt\": \"2026-03-21T14:30:00Z\",\n \"scorePercent\": 92.5,\n \"responses\": [{\"itemId\": \"q-17\", \"answer\": \"B\", \"isCorrect\": true}],\n \"kcRefs\": [\"kc_factoring_quadratics\"]\n }\n ]\n}\nJSON\n\nSTATUS=\"$(curl -sS -o timeback-import-response.json -w \"%{http_code}\" \\\n -X POST \"$BASE_URL/alpha/results/v1/imports\" \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Idempotency-Key: raw-timeback-prod-results-2026-06-08T15\" \\\n --data @timeback-import.json)\"\n\ntest \"$STATUS\" = \"202\"\njq -e '.accepted_count > 0 and (.materialized.result_record // 0) > 0' timeback-import-response.json"
},
{
"label": "Raw NWEA MAP CDF row import",
"language": "bash",
"code": "cat > nwea-map-import.json <<'JSON'\n{\n \"source_adapter_id\": \"adapter_nwea_map\",\n \"producer_batch_id\": \"nwea-cdf-spring-2025-26\",\n \"sourceShape\": \"nwea_map_assessment_result\",\n \"records\": [\n {\n \"StudentID\": \"981234\",\n \"Student_StateID\": \"STATE-981234\",\n \"TermName\": \"Spring 2025-2026\",\n \"Subject\": \"Mathematics\",\n \"TestID\": \"1110000001\",\n \"TestStartDate\": \"2026-03-21\",\n \"TestStartTime\": \"09:15:00\",\n \"TestRITScore\": \"238\",\n \"TestPercentile\": \"94\",\n \"NormsReferenceData\": \"2025\",\n \"GrowthMeasureYN\": \"Y\",\n \"Goal1Name\": \"Algebraic Thinking\",\n \"Goal1RitScore\": \"241\",\n \"Goal1StdErr\": \"3.1\"\n }\n ]\n}\nJSON\n\nSTATUS=\"$(curl -sS -o nwea-map-import-response.json -w \"%{http_code}\" \\\n -X POST \"$BASE_URL/alpha/results/v1/imports\" \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Idempotency-Key: raw-nwea-cdf-spring-2025-26\" \\\n --data @nwea-map-import.json)\"\n\ntest \"$STATUS\" = \"202\"\njq -e '.accepted_count > 0 and (.materialized.map_score // 0) > 0 and (.materialized.map_goal_strand // 0) > 0' nwea-map-import-response.json"
},
{
"label": "Cross-student MAP supersede isolation smoke",
"language": "bash",
"code": "# Import student B after student A. The supersede sweep must be scoped by\n# (student, subject, term); A's selected test-of-record row must remain readable.\ncat > nwea-map-import-student-b.json <<'JSON'\n{\n \"source_adapter_id\": \"adapter_nwea_map\",\n \"producer_batch_id\": \"nwea-cdf-spring-2025-26-student-b\",\n \"sourceShape\": \"nwea_map_assessment_result\",\n \"records\": [\n {\n \"StudentID\": \"981235\",\n \"Student_StateID\": \"STATE-981235\",\n \"TermName\": \"Spring 2025-2026\",\n \"Subject\": \"Mathematics\",\n \"TestID\": \"2220000001\",\n \"TestStartDate\": \"2026-03-22\",\n \"TestStartTime\": \"09:15:00\",\n \"TestRITScore\": \"226\",\n \"TestPercentile\": \"88\",\n \"NormsReferenceData\": \"2025\"\n }\n ]\n}\nJSON\n\nSTATUS=\"$(curl -sS -o nwea-map-import-student-b-response.json -w \"%{http_code}\" \\\n -X POST \"$BASE_URL/alpha/results/v1/imports\" \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Idempotency-Key: raw-nwea-cdf-spring-2025-26-student-b\" \\\n --data @nwea-map-import-student-b.json)\"\n\ntest \"$STATUS\" = \"202\"\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/stu_timeback_10017/map-sittings?subject=math&canonicalTermId=term_2025_26_spring&sittingScope=test_of_record\" \\\n | jq -e '.data | length > 0 and all(.student_id == \"stu_timeback_10017\")'"
},
{
"label": "One-student closed-loop reconciliation",
"language": "bash",
"code": "curl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/reports/closed-loop-reconciliation?studentId=stu_timeback_10017&metricKind=growth_x&subject=math&canonicalTermId=term_2025_26_spring&normsSet=2025\" \\\n | jq -e '.data | all(.student_id == \"stu_timeback_10017\")'\n\n# studentId is documented and supported. This must not return\n# results:unsupported_parameter simply because the studentId filter is present."
},
{
"label": "Problem statuses for bad imports",
"language": "bash",
"code": "BAD_STATUS=\"$(curl -sS -o bad-validation.json -w \"%{http_code}\" \\\n -X POST \"$BASE_URL/alpha/results/v1/imports\" \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Idempotency-Key: bad-validation-example\" \\\n --data '{\"source_adapter_id\":\"adapter_nwea_map\",\"producer_batch_id\":\"bad\",\"sourceShape\":\"nwea_map_assessment_result\",\"records\":[]}' )\"\ntest \"$BAD_STATUS\" = \"400\"\njq -e '.code == \"results:validation_failed\"' bad-validation.json\n\nADAPTER_STATUS=\"$(curl -sS -o bad-adapter.json -w \"%{http_code}\" \\\n -X POST \"$BASE_URL/alpha/results/v1/imports\" \\\n -H \"Authorization: Bearer $TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -H \"Idempotency-Key: bad-adapter-example\" \\\n --data '{\"source_adapter_id\":\"adapter_nwea_map\",\"producer_batch_id\":\"bad-row\",\"sourceShape\":\"nwea_map_assessment_result\",\"records\":[{\"StudentID\":\"unknown\",\"Subject\":\"Mathematics\",\"TermName\":\"Spring 2025-2026\",\"TestRITScore\":\"238\"}]}' )\"\ntest \"$ADAPTER_STATUS\" = \"422\"\njq -e '.code == \"results:adapter_rejected\"' bad-adapter.json"
}
],
"proves": "The migration app supplies raw producer rows only; Results owns normalization, row materialization, Problem statuses, and the one-student reconciliation filter."
},
{
"id": "highest-mastered-grade-as-of",
"title": "Highest mastered grade at three as-of dates",
"purpose": "Shows the HMG resolver as a point-in-time read over the immutable mastery ledger. Actual mastery-test results win; summary tables and course placements appear only as labeled fallback evidence when no qualifying test result exists.",
"relatedObjects": [
"alpha.mastery_ledger",
"alpha.highest_mastered_grade",
"alpha.working_grade",
"alpha.policy_config"
],
"guardrails": [
"Use asOfDate for every HMG read; there is no current-only shortcut.",
"Resolve the mastery cutoff through alpha.policy_config where policy_name=alpha.policy.mastery_cutoff; do not hardcode 89.5 in consumer SQL.",
"A passing mastery-test ledger row is score_percent >= the resolved cutoff.",
"Fallback summary/course placement evidence is allowed only when no qualifying mastery_ledger row exists as of the date."
],
"blocks": [
{
"label": "API spot-date smoke",
"language": "bash",
"code": "BASE_URL=\"https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/implementation/api\"\nTOKEN=\"$(curl -sS -X POST \"$BASE_URL/dev/mint?tenantId=demo\" | jq -r '.token')\"\nSTUDENT_ID=\"stu_timeback_10017\"\nSUBJECT=\"math\"\n\nfor AS_OF_DATE in 2026-01-15 2026-03-21 2026-06-05; do\n curl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/highest-mastered-grade?subject=$SUBJECT&asOfDate=$AS_OF_DATE\" \\\n | jq -e --arg student \"$STUDENT_ID\" --arg subject \"$SUBJECT\" --arg asOfDate \"$AS_OF_DATE\" \\\n '.data[0] | .student_id == $student and .subject_id == $subject and .as_of_date == $asOfDate'\ndone"
},
{
"label": "Raw SQL resolver",
"language": "sql",
"code": "with input as (\n select\n '0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3'::uuid as tenant_id,\n 'stu_timeback_10017'::text as student_id,\n 'math'::text as subject_id,\n unnest(array[date '2026-01-15', date '2026-03-21', date '2026-06-05']) as as_of_date\n),\ncutoff as (\n select distinct on (i.tenant_id, i.as_of_date)\n i.tenant_id,\n i.as_of_date,\n pc.policy_name || ':' || pc.config_version as mastery_cutoff_policy_ref,\n (pc.value_json ->> 'cutoff_percent')::numeric as cutoff_percent\n from input i\n join alpha.policy_config pc\n on pc.tenant_id = i.tenant_id\n and pc.policy_name = 'alpha.policy.mastery_cutoff'\n and pc.status = 'active'\n and pc.is_time_locatable = true\n and pc.begin_date is not null\n and pc.begin_date <= i.as_of_date\n and (pc.end_date is null or pc.end_date >= i.as_of_date)\n order by i.tenant_id, i.as_of_date, pc.begin_date desc, pc.config_version desc\n),\nledger_hmg as (\n select\n i.tenant_id,\n i.student_id,\n i.subject_id,\n i.as_of_date,\n max(ml.grade_level) as highest_mastered_grade,\n jsonb_agg(ml.mastery_ledger_id order by ml.grade_level desc, ml.attempted_at desc)\n filter (where ml.mastery_ledger_id is not null) as source_mastery_ledger_ids\n from input i\n join cutoff c using (tenant_id, as_of_date)\n left join alpha.mastery_ledger ml\n on ml.tenant_id = i.tenant_id\n and ml.student_id = i.student_id\n and ml.subject_id = i.subject_id\n and ml.effective_date <= i.as_of_date\n and ml.score_percent >= c.cutoff_percent\n and ml.passed_mastery_gate = true\n and ml.superseded_by_mastery_ledger_id is null\n group by i.tenant_id, i.student_id, i.subject_id, i.as_of_date\n)\nselect\n hmg.student_id,\n hmg.subject_id,\n hmg.as_of_date,\n hmg.highest_mastered_grade as surface_hmg,\n ledger_hmg.highest_mastered_grade as ledger_hmg,\n hmg.evidence_source,\n hmg.mastery_cutoff_policy_ref,\n ledger_hmg.source_mastery_ledger_ids\nfrom alpha.highest_mastered_grade hmg\njoin ledger_hmg\n on hmg.tenant_id = ledger_hmg.tenant_id\n and hmg.student_id = ledger_hmg.student_id\n and hmg.subject_id = ledger_hmg.subject_id\n and hmg.as_of_date = ledger_hmg.as_of_date\nwhere hmg.evidence_source = 'mastery_test_results'\n and hmg.highest_mastered_grade = ledger_hmg.highest_mastered_grade;"
}
],
"proves": "The API and raw-DB paths use the same ledger, policy cutoff, and as-of date. A summary/placement mismatch cannot corrupt HMG when actual mastery-test rows exist."
},
{
"id": "goals-progress-read",
"title": "Read GOALS course and grade-level progress from Results",
"purpose": "Returns the GOALS progress answer for one student/course/grade: course XP remaining, course percent complete, grade-level XP remaining, main-sequence total XP, grade-level percent complete, and pacing. It proves consumers call Results instead of joining Analytics, Curriculum, Events, or calendars.",
"relatedObjects": [
"alpha.student_course_progress",
"alpha.student_grade_level_progress",
"alpha.student_track_state",
"alpha.working_grade"
],
"guardrails": [
"Use alpha.student_course_progress for course progress and alpha.student_grade_level_progress for grade-level progress.",
"Resolve XP remaining before percent_complete: app-reported XP remaining first, then app-reported percent_complete converted to XP remaining, then completed XP as a last estimator.",
"Use main_sequence_total_xp as the grade denominator. Hole-filling/remediation does not expand the denominator.",
"Read pacing_status from Results; do not count school-calendar days in the client.",
"Keep source_analytics_rollup_refs, source_curriculum_refs, and source_calendar_refs as evidence refs, not copied data."
],
"blocks": [
{
"label": "Progress SQL twin",
"language": "sql",
"code": "with input as (\n select\n '0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3'::uuid as tenant_id,\n 'stu_timeback_10017'::text as student_id,\n 'math'::text as subject_id,\n 'course_math_grade_7_main'::text as course_id,\n 7::numeric as grade_level,\n date '2026-06-03' as as_of_date\n),\ncourse_progress as (\n select\n cp.course_id,\n cp.grade_level,\n cp.xp_remaining,\n cp.total_xp,\n cp.percent_complete,\n cp.progress_source_kind,\n cp.evidence_kind,\n cp.policy_ref,\n cp.source_analytics_rollup_refs,\n cp.source_curriculum_refs\n from alpha.student_course_progress cp\n join input i\n on cp.tenant_id = i.tenant_id\n and cp.student_id = i.student_id\n and cp.subject_id = i.subject_id\n and cp.course_id = i.course_id\n and cp.as_of_date = i.as_of_date\n),\ngrade_progress as (\n select\n gp.grade_level,\n gp.working_grade,\n gp.active_path_state,\n gp.grade_level_xp_remaining,\n gp.main_sequence_total_xp,\n gp.percent_complete,\n gp.elapsed_school_year_percent,\n gp.pacing_status,\n gp.policy_ref,\n gp.source_course_progress_refs,\n gp.source_analytics_rollup_refs,\n gp.source_calendar_refs\n from alpha.student_grade_level_progress gp\n join input i\n on gp.tenant_id = i.tenant_id\n and gp.student_id = i.student_id\n and gp.subject_id = i.subject_id\n and gp.grade_level = i.grade_level\n and gp.as_of_date = i.as_of_date\n)\nselect jsonb_build_object(\n 'course_progress', (select to_jsonb(course_progress) from course_progress),\n 'grade_level_progress', (select to_jsonb(grade_progress) from grade_progress)\n) as goals_progress_json;"
},
{
"label": "HTTP progress calls",
"language": "bash",
"code": "BASE_URL=\"https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/implementation/api\"\nTOKEN=\"$(curl -sS -X POST \"$BASE_URL/dev/mint?tenantId=demo\" | jq -r '.token')\"\n\ncurl -sS \"$BASE_URL/alpha/results/v1/students/stu_timeback_10017/course-progress?subject=math&courseId=course_math_grade_7_main&asOfDate=2026-06-03\" -H \"Authorization: Bearer $TOKEN\" | jq '.data[0] | {course_id, xp_remaining, total_xp, percent_complete, progress_source_kind, evidence_kind, policy_ref}'\n\ncurl -sS \"$BASE_URL/alpha/results/v1/students/stu_timeback_10017/grade-level-progress?subject=math&gradeLevel=7&asOfDate=2026-06-03\" -H \"Authorization: Bearer $TOKEN\" | jq '.data[0] | {grade_level, active_path_state, grade_level_xp_remaining, main_sequence_total_xp, percent_complete, elapsed_school_year_percent, pacing_status, policy_ref}'"
}
],
"proves": "The API and raw-DB paths use the same Results progress objects. Analytics rollups, Curriculum expected-XP refs, and calendar rows appear only as source refs, not client-side formulas."
},
{
"id": "parent-portal-sql",
"title": "Raw SQL for Sophia, Math, Spring 2025-26",
"purpose": "Returns the parent-portal answer for Sophia as of 2026-06-05: current MAP RIT, Growth X to date, highest mastered grade, working grade, awarded XP this week, current track position, latest report-card entry, current gate passes, and current mastery state per KC.",
"relatedObjects": [
"alpha.map_current_score",
"alpha.map_score",
"alpha.map_growth_window",
"alpha.highest_mastered_grade",
"alpha.working_grade",
"alpha.xp_ledger",
"alpha.student_track_state",
"alpha.report_card_entry",
"alpha.gate_pass",
"alpha.student_kc_state"
],
"guardrails": [
"Use alpha.map_current_score for current RIT in student-facing GOALS/parent-portal views; use alpha.map_score only for term-scoped highest-RIT test-of-record report reads.",
"Filter norms_set and growth_window as typed fields.",
"Use alpha.highest_mastered_grade for HMG; do not derive it from summary tables when mastery_ledger rows exist.",
"Use alpha.xp_ledger for awarded XP this week; sum awarded_xp rows that reference same-subject result records and keep reversal rows in the sum.",
"Use alpha.student_track_state for current track position; do not infer it from Events, course completion, or copied Curriculum track definitions.",
"Apply the begin_date/end_date/is_time_locatable rule to report cards, gates, and mastery rows.",
"Use each object's documented key grain; do not collapse mastery to a student-only aggregate."
],
"blocks": [
{
"label": "End-to-end SELECT",
"language": "sql",
"code": "with input as (\n select\n '0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3'::uuid as tenant_id,\n 'stu_sophia_demo'::text as student_id,\n 'math'::text as subject_id,\n 'term_2025_26_spring'::text as canonical_term_id,\n '2025'::text as norms_set,\n 'fall_to_spring'::text as growth_window,\n timestamptz '2026-06-01T00:00:00Z' as week_start_at,\n timestamptz '2026-06-08T00:00:00Z' as week_end_at,\n date '2026-06-05' as as_of_date\n),\ncurrent_map as (\n select m.map_current_score_id, m.rit, m.percentile, m.norms_set, m.growth_measure_yn, m.current_map_reason, m.policy_ref, m.modified_at\n from alpha.map_current_score m\n join input i using (tenant_id, student_id, subject_id, norms_set)\n),\ngrowth as (\n select g.observed_growth, g.projected_growth, g.growth_x,\n g.growth_x_target, g.on_track_for_growth_x_target\n from alpha.map_growth_window g\n join input i using (tenant_id, student_id, subject_id, canonical_term_id, norms_set, growth_window)\n),\nhmg as (\n select h.highest_mastered_grade, h.evidence_source,\n h.mastery_cutoff_policy_ref, h.source_mastery_ledger_ids\n from alpha.highest_mastered_grade h\n join input i\n on h.tenant_id = i.tenant_id\n and h.student_id = i.student_id\n and h.subject_id = i.subject_id\n and h.as_of_date = i.as_of_date\n),\nworking_grade as (\n select wg.working_grade, wg.input_kind, wg.formula_version\n from alpha.working_grade wg\n join input i\n on wg.tenant_id = i.tenant_id\n and wg.student_id = i.student_id\n and wg.subject_id = i.subject_id\n and wg.as_of_date <= i.as_of_date\n order by wg.as_of_date desc, wg.formula_version desc\n limit 1\n),\ncurrent_track as (\n select\n sts.track_id,\n sts.current_track_level_id,\n sts.current_segment_id,\n sts.placement_evidence,\n sts.status,\n sts.switched_to_track_id,\n sts.effective_at,\n sts.source_evidence_refs\n from alpha.student_track_state sts\n join input i\n on sts.tenant_id = i.tenant_id\n and sts.student_id = i.student_id\n and sts.subject_id = i.subject_id\n where sts.status = 'active'\n and sts.is_time_locatable = true\n and sts.begin_date is not null\n and sts.begin_date <= i.as_of_date\n and (sts.end_date is null or sts.end_date >= i.as_of_date)\n order by sts.effective_at desc, sts.track_id\n limit 1\n),\nlatest_report_card as (\n select r.report_card_entry_id, r.grade_value, r.narrative, r.status,\n r.reporting_period_id, r.begin_date, r.end_date\n from alpha.report_card_entry r\n join input i\n on r.tenant_id = i.tenant_id\n and r.student_id = i.student_id\n and r.subject_id = i.subject_id\n and r.reporting_period_id = i.canonical_term_id\n where r.is_time_locatable = true\n and r.begin_date is not null\n and r.begin_date <= i.as_of_date\n and (r.end_date is null or r.end_date >= i.as_of_date)\n and r.status in ('final', 'draft')\n order by r.status = 'final' desc, r.begin_date desc, r.report_card_entry_id desc\n limit 1\n),\ncurrent_gate_passes as (\n select coalesce(\n jsonb_agg(\n jsonb_build_object(\n 'gate_pass_id', gp.gate_pass_id,\n 'gate_content_id', gp.gate_content_id,\n 'gate_status', gp.gate_status,\n 'next_eligible_at', gp.next_eligible_at,\n 'attempt_count', gp.attempt_count,\n 'policy_version', gp.policy_version\n )\n order by gp.gate_content_id\n ),\n '[]'::jsonb\n ) as rows\n from alpha.gate_pass gp\n join input i\n on gp.tenant_id = i.tenant_id\n and gp.student_id = i.student_id\n and gp.subject_id = i.subject_id\n where gp.is_time_locatable = true\n and gp.begin_date is not null\n and gp.begin_date <= i.as_of_date\n and (gp.end_date is null or gp.end_date >= i.as_of_date)\n),\nweekly_xp as (\n select\n coalesce(sum(x.awarded_xp), 0)::numeric(10,2) as awarded_xp_this_week,\n coalesce(\n jsonb_agg(\n jsonb_build_object(\n 'xp_award_id', x.xp_award_id,\n 'result_record_id', x.result_record_id,\n 'awarded_xp', x.awarded_xp,\n 'award_reason', x.award_reason,\n 'created_at', x.created_at,\n 'reversal_of_xp_award_id', x.reversal_of_xp_award_id\n )\n order by x.created_at, x.xp_award_id\n ) filter (where x.xp_award_id is not null),\n '[]'::jsonb\n ) as rows\n from input i\n left join alpha.xp_ledger x\n on x.tenant_id = i.tenant_id\n and x.student_id = i.student_id\n and x.created_at >= i.week_start_at\n and x.created_at < i.week_end_at\n left join alpha.result_record rr\n on rr.tenant_id = x.tenant_id\n and rr.result_record_id = x.result_record_id\n and rr.student_id = i.student_id\n where x.xp_award_id is null\n or (rr.subject_id = i.subject_id and rr.canonical_term_id = i.canonical_term_id)\n),\nlatest_mastery_per_kc as (\n select distinct on (s.tenant_id, s.student_id, s.kc_id)\n s.kc_id, s.initial_mastery, s.current_retention,\n s.durable_mastery, s.fluency_state, s.next_due_at,\n s.evidence_count, s.effective_at, s.policy_version\n from alpha.student_kc_state s\n join input i\n on s.tenant_id = i.tenant_id\n and s.student_id = i.student_id\n and s.subject_id = i.subject_id\n where s.is_time_locatable = true\n and s.begin_date is not null\n and s.begin_date <= i.as_of_date\n and (s.end_date is null or s.end_date >= i.as_of_date)\n order by s.tenant_id, s.student_id, s.kc_id, s.effective_at desc\n),\nstudent_kc_state_rows as (\n select coalesce(\n jsonb_agg(to_jsonb(latest_mastery_per_kc) order by kc_id),\n '[]'::jsonb\n ) as rows\n from latest_mastery_per_kc\n)\nselect jsonb_build_object(\n 'student_id', i.student_id,\n 'subject_id', i.subject_id,\n 'canonical_term_id', i.canonical_term_id,\n 'as_of_date', i.as_of_date,\n 'current_rit', current_map.rit,\n 'growth_x_to_date', growth.growth_x,\n 'highest_mastered_grade', hmg.highest_mastered_grade,\n 'highest_mastered_grade_evidence_source', hmg.evidence_source,\n 'working_grade', working_grade.working_grade,\n 'xp_week_start_at', i.week_start_at,\n 'xp_week_end_at', i.week_end_at,\n 'awarded_xp_this_week', weekly_xp.awarded_xp_this_week,\n 'xp_ledger_rows_this_week', weekly_xp.rows,\n 'current_track_position', to_jsonb(current_track),\n 'latest_report_card_entry', to_jsonb(latest_report_card),\n 'current_gate_passes', current_gate_passes.rows,\n 'student_kc_state_by_kc', student_kc_state_rows.rows\n) as parent_portal_answer\nfrom input i\nleft join current_map on true\nleft join growth on true\nleft join hmg on true\nleft join working_grade on true\nleft join current_track on true\nleft join weekly_xp on true\nleft join latest_report_card on true\nleft join current_gate_passes on true\nleft join student_kc_state_rows on true;"
}
],
"proves": "The raw-DB path reaches the answer using only documented Alpha objects and guardrails."
},
{
"id": "parent-portal-http",
"title": "HTTP calls for the same parent-portal answer",
"purpose": "Calls the committed Results Alpha endpoints that correspond to the SQL objects in the recipe above, including awarded XP this week from the append-only XP ledger and current track position from student_track_state. The client composes returned surface fields; it does not dedupe MAP sittings, parse terms, compute Growth X, compute XP formulas, infer track placement, or decay mastery.",
"relatedObjects": [
"alpha.map_score",
"alpha.map_growth_window",
"alpha.highest_mastered_grade",
"alpha.working_grade",
"alpha.xp_ledger",
"alpha.student_track_state",
"alpha.report_card_entry",
"alpha.gate_pass",
"alpha.student_kc_state"
],
"guardrails": [
"Use POST /dev/mint?tenantId=demo only for the demo tenant.",
"Pass subject, canonicalTermId, normsSet, growthWindow, sittingScope, and asOfDate as typed parameters. For current MAP, call current-map; map-scores remains the term test-of-record read.",
"Read awarded_xp from /xp-ledger; do not calculate the award formula from events, gates, engines, or Content expected_xp.",
"Read track position from /track-state; do not infer it from Events, course completion, or Curriculum track definitions.",
"Use the same student_id and asOfDate as the SQL recipe."
],
"blocks": [
{
"label": "cURL sequence",
"language": "bash",
"code": "BASE_URL=\"https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/implementation/api\"\nTOKEN=\"$(curl -sS -X POST \"$BASE_URL/dev/mint?tenantId=demo\" | jq -r '.token')\"\nSTUDENT_ID=\"stu_sophia_demo\"\nSUBJECT=\"math\"\nTERM=\"term_2025_26_spring\"\nNORMS=\"2025\"\nGROWTH_WINDOW=\"fall_to_spring\"\nAS_OF_DATE=\"2026-06-05\"\nXP_WEEK_START=\"2026-06-01T00:00:00Z\"\nXP_WEEK_END=\"2026-06-08T00:00:00Z\"\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/current-map?subject=$SUBJECT&normsSet=$NORMS\" \\\n > api-current-map.json\njq -S '.data[0] | {student_id, subject_id, canonical_term_id, norms_set, rit, percentile, growth_measure_yn, current_map_reason}' api-current-map.json\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/growth-windows?subject=$SUBJECT&canonicalTermId=$TERM&normsSet=$NORMS&growthWindow=$GROWTH_WINDOW\" \\\n > api-growth-window.json\njq -S '.data[0] | {student_id, subject_id, canonical_term_id, growth_window, norms_set, observed_growth, projected_growth, growth_x}' api-growth-window.json\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/highest-mastered-grade?subject=$SUBJECT&asOfDate=$AS_OF_DATE\" \\\n > api-highest-mastered-grade.json\njq -S '.data[0] | {student_id, subject_id, as_of_date, highest_mastered_grade, evidence_source, mastery_cutoff_policy_ref}' api-highest-mastered-grade.json\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/working-grade?subject=$SUBJECT&asOfDate=$AS_OF_DATE\" \\\n > api-working-grade.json\njq -S '.data[0] | {student_id, subject_id, as_of_date, working_grade, input_kind}' api-working-grade.json\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/track-state?subject=$SUBJECT&asOfDate=$AS_OF_DATE\" \\\n > api-track-state.json\njq -S '{\n current_track_position: (\n .data[0]\n | {\n track_id,\n current_track_level_id,\n current_segment_id,\n placement_evidence,\n status,\n switched_to_track_id,\n effective_at,\n source_evidence_refs\n }\n )\n}' api-track-state.json > api-current-track-position.json\ncat api-current-track-position.json\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/results?subject=$SUBJECT&canonicalTermId=$TERM&asOfDate=$AS_OF_DATE\" \\\n > api-subject-results.json\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/xp-ledger\" \\\n > api-xp-ledger.json\n\njq -S \\\n --arg weekStart \"$XP_WEEK_START\" \\\n --arg weekEnd \"$XP_WEEK_END\" \\\n --slurpfile results api-subject-results.json \\\n '\n ($results[0].data | INDEX(.result_record_id)) as $subjectResults\n | [.data[]\n | select(.created_at >= $weekStart and .created_at < $weekEnd)\n | select(.result_record_id != null and ($subjectResults[.result_record_id] != null))]\n as $rows\n | {\n xp_week_start_at: $weekStart,\n xp_week_end_at: $weekEnd,\n awarded_xp_this_week: (($rows | map(.awarded_xp) | add) // 0),\n xp_ledger_rows_this_week: $rows\n }' api-xp-ledger.json > api-weekly-xp.json\n\ncat api-weekly-xp.json\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/report-card?subject=$SUBJECT&asOfDate=$AS_OF_DATE\" \\\n > api-report-card.json\njq -S '.data[0] | {report_card_entry_id, student_id, subject_id, reporting_period_id, grade_value, narrative, status}' api-report-card.json\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/gate-passes?subject=$SUBJECT&asOfDate=$AS_OF_DATE\" \\\n > api-gate-passes.json\njq -S '.data[] | {gate_pass_id, gate_content_id, gate_status, next_eligible_at, attempt_count}' api-gate-passes.json\n\ncurl -sS -H \"Authorization: Bearer $TOKEN\" \\\n \"$BASE_URL/alpha/results/v1/students/$STUDENT_ID/kc-state?subject=$SUBJECT&asOfDate=$AS_OF_DATE\" \\\n > api-kc-state.json\njq -S '.data[] | {kc_id, initial_mastery, current_retention, durable_mastery, fluency_state, next_due_at, evidence_count, effective_at}' api-kc-state.json"
}
],
"proves": "The API path exposes the same settled Results facts as the raw SQL recipe, with the same typed filters."
},
{
"id": "api-sql-convergence-check",
"title": "Side-by-side API and SQL convergence check",
"purpose": "Turns the SQL and HTTP paths into comparable answer hashes for the same Sophia/Math/Spring 2025-26 parent-portal question.",
"relatedObjects": [
"alpha.report_answer_key",
"alpha.report_closed_loop_reconciliation"
],
"guardrails": [
"Canonicalize both answers before hashing.",
"Compare the same tenant, student, subject, term, norms set, growth window, and asOfDate.",
"A mismatch is a surface leak, not a client-side invitation to recalculate."
],
"blocks": [
{
"label": "API hash",
"language": "bash",
"code": "# Save each HTTP response from the recipe above, then compose only the public fields\n# named in this dictionary.\njq -S -c -n \\\n --slurpfile map api-current-map.json \\\n --slurpfile growth api-growth-window.json \\\n --slurpfile hmg api-highest-mastered-grade.json \\\n --slurpfile working api-working-grade.json \\\n --slurpfile track api-current-track-position.json \\\n --slurpfile xp api-weekly-xp.json \\\n --slurpfile report api-report-card.json \\\n --slurpfile gates api-gate-passes.json \\\n --slurpfile mastery api-kc-state.json \\\n '{\n student_id: \"stu_sophia_demo\",\n subject_id: \"math\",\n canonical_term_id: \"term_2025_26_spring\",\n as_of_date: \"2026-06-05\",\n current_rit: $map[0].data[0].rit,\n growth_x_to_date: $growth[0].data[0].growth_x,\n highest_mastered_grade: $hmg[0].data[0].highest_mastered_grade,\n highest_mastered_grade_evidence_source: $hmg[0].data[0].evidence_source,\n working_grade: $working[0].data[0].working_grade,\n current_track_position: $track[0].current_track_position,\n xp_week_start_at: $xp[0].xp_week_start_at,\n xp_week_end_at: $xp[0].xp_week_end_at,\n awarded_xp_this_week: $xp[0].awarded_xp_this_week,\n xp_ledger_rows_this_week: $xp[0].xp_ledger_rows_this_week,\n latest_report_card_entry: $report[0].data[0],\n current_gate_passes: $gates[0].data,\n student_kc_state_by_kc: $mastery[0].data\n }' > api-answer.json\n\nAPI_HASH=\"$(shasum -a 256 api-answer.json | awk '{print $1}')\""
},
{
"label": "SQL hash and assertion",
"language": "bash",
"code": "psql \"$SUPABASE_DB_URL\" -XAt -f sophia-parent-portal.sql \\\n | jq -S -c '.parent_portal_answer // .' > sql-answer.json\n\nSQL_HASH=\"$(shasum -a 256 sql-answer.json | awk '{print $1}')\"\ntest \"$API_HASH\" = \"$SQL_HASH\"\n\n# Optional platform-owned oracle: when a report answer key exists for this\n# worked example, compare the canonical hash to alpha.report_answer_key too.\npsql \"$SUPABASE_DB_URL\" -XAtc \"\n select expected_result_hash\n from alpha.report_answer_key\n where tenant_id = '0d4ce2f4-1c42-4f3c-9f0d-03fb7f5271d3'\n and example_id = 'sophia_math_spring_2025_26_parent_portal'\n and norms_set = '2025';\n\""
}
],
"proves": "The two first-class paths converge to one pinned answer without client-owned dedupe, norms tables, growth-window switches, term parsing, or mastery math."
}
]aliasMap
[
{
"alphaName": "alpha.result_record",
"plainName": "Result record",
"changeType": "RENAME + EXTEND",
"source": "oneroster.results for section gradebook outcomes; alpha.result_record_extension for non-section Alpha outcomes",
"storage": "Public UNION view; extension storage contains only new Alpha outcome fields plus FKs to base rows.",
"meaning": "Settled score/status for one student on one work item or test.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"alphaName": "alpha.test_result_component",
"plainName": "Test result component",
"changeType": "EXTEND",
"source": "alpha.test_result_component keyed to result_record plus parent component refs",
"storage": "Extension table/read model; stores hierarchy, response, score, correctness, feedback, and source evidence, not copied Content/QTI blank-instrument fields.",
"meaning": "The settled hierarchy for one student's assessment result: test, section, part, and question_response rows.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"alphaName": "alpha.ai_grading_audit",
"plainName": "AI grading audit",
"changeType": "EXTEND",
"source": "alpha.ai_grading_audit keyed to result_record and optional test_result_component refs",
"storage": "Extension table/read model; stores AI model, prompt, feedback, revision, and override provenance, not copied Content/QTI blank-instrument fields or private grader logs.",
"meaning": "The durable audit for AI-produced overall, question, and question-part assessment feedback.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"alphaName": "alpha.gradebook_item",
"plainName": "Gradebook item",
"changeType": "RENAME",
"source": "oneroster.line_items",
"storage": "SQL view column projection; no Alpha storage.",
"meaning": "The assignment, activity, assessment, or gradebook column that can produce a result.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"alphaName": "alpha.score_scale",
"plainName": "Score scale",
"changeType": "RENAME + RESTRICT",
"source": "oneroster.score_scales, oneroster.line_item_score_scales, oneroster.result_score_scales",
"storage": "SQL view projection plus validation; no Alpha storage.",
"meaning": "How a score is interpreted for a gradebook item or result; ambiguity is rejected before persistence.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"alphaName": "alpha.result_kc_evidence",
"plainName": "Result skill evidence",
"changeType": "RENAME + EXTEND",
"source": "oneroster.result_learning_objective_ids plus alpha.result_kc_evidence_extension",
"storage": "Unified view; extension table stores KC FK/evidence facts not present in OneRoster.",
"meaning": "Per-result links to curriculum KCs with score evidence.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"alphaName": "alpha.report_card_entry",
"plainName": "Report card entry",
"changeType": "EXTEND",
"source": "alpha.report_card_entry keyed to student/result/gradebook/MAP evidence FKs",
"storage": "Extension table only; no OneRoster lineItem/result fields are copied.",
"meaning": "Settled, effective-dated report-card statement for one student, subject, course, or section.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"alphaName": "alpha.gate_pass",
"plainName": "Gate pass",
"changeType": "EXTEND",
"source": "alpha.gate_pass keyed to result_record/content test FKs",
"storage": "Extension table only; threshold/cooldown values come from alpha.policy.*.",
"meaning": "Durable pass, fail, cooldown, or retry permission for an advancement gate.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"alphaName": "alpha.student_kc_state",
"plainName": "Student knowledge state",
"changeType": "EXTEND",
"source": "alpha.student_kc_state keyed to OneRoster student FK and Curriculum KC FK",
"storage": "Extension table only; mastery is not copied from any base field.",
"meaning": "Per-student overlay on the shared curriculum graph with initial_mastery, current_retention, durable_mastery, fluency_state, next_due_at, and evidence refs.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"alphaName": "alpha.student_track_state",
"plainName": "Student track state",
"changeType": "EXTEND",
"source": "alpha.student_track_state keyed to OneRoster student FK and Curriculum track/track_level/segment FKs",
"storage": "Extension table only; track definitions are referenced, never copied.",
"meaning": "One row per student and track: current level, current segment, placement evidence, status, and switched_to_track_id.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"alphaName": "alpha.student_course_progress",
"plainName": "Student course progress",
"changeType": "EXTEND",
"source": "alpha.student_course_progress keyed to student/subject/course/asOfDate",
"storage": "Derived extension read model; stores Results-owned answer fields plus evidence refs, not copied Analytics/Curriculum/Event/P&O rows.",
"meaning": "One course progress answer with xp_remaining, total_xp, percent_complete, evidence kind, and source refs.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
},
{
"alphaName": "alpha.student_grade_level_progress",
"plainName": "Student grade-level progress",
"changeType": "EXTEND",
"source": "alpha.student_grade_level_progress keyed to student/subject/grade/asOfDate",
"storage": "Derived extension read model; stores Results-owned answer fields plus evidence refs, not copied Analytics/Curriculum/Event/P&O rows.",
"meaning": "One grade-level progress and pacing answer using active-path XP remaining over the main-sequence total XP denominator.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
},
{
"alphaName": "alpha.next_task",
"plainName": "Next task",
"changeType": "DERIVED READ",
"source": "Read computed from student_kc_state, student_track_state, gate_pass, Curriculum frontier/course members, and Policy",
"storage": "No app-owned storage; optional surface cache stores task ref, reason, policy_version, and source state refs only.",
"meaning": "One surface call returning a typed task ref: new lesson, review, practice, gate retry, or no task.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-034-next-task-selection"
},
{
"alphaName": "alpha.xp_ledger",
"plainName": "XP ledger",
"changeType": "EXTEND",
"source": "alpha.xp_ledger keyed to result_record/content/attempt evidence FKs",
"storage": "Immutable extension ledger; stores awarded_xp and calculation evidence, not copied Content expected_xp or event payloads.",
"meaning": "The source of truth for awarded XP per attempt, including negative awards for gaming or cheating signals.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
},
{
"alphaName": "alpha.content_effectiveness",
"plainName": "Content effectiveness",
"changeType": "EXTEND",
"source": "alpha.content_effectiveness keyed to Content item FK and result evidence FKs",
"storage": "Derived Results-owned read/materialized extension; stores counts/rate/provenance, not Content title/body/kind fields.",
"meaning": "Validated-by count, failed-by count, and effectiveness rate for a Content item after scored result evidence.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
},
{
"alphaName": "alpha.working_grade",
"plainName": "Working grade",
"changeType": "EXTEND",
"source": "alpha.working_grade keyed to student/subject/asOfDate and source evidence FKs",
"storage": "Extension table or materialized derived extension; no base score fields copied.",
"meaning": "Current surface-owned grade-equivalent level for a student and subject as of a date.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"alphaName": "alpha.advancement",
"plainName": "Named grade movement metrics",
"changeType": "EXTEND",
"source": "TimeBack 2026.07.17.11 MG-10 over tenant-scoped Results evidence",
"storage": "Derived extension output; stores formula result and input references, not copied source rows.",
"meaning": "gradesMasteredSytd is mastery-pure; mapBaselineGradeDelta_notGradesMastered is placement/reporting context only; generic advancement aliases mastery-pure only.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"alphaName": "alpha.map_score",
"plainName": "MAP score",
"changeType": "CUT + RENAME + EXTEND",
"source": "nweamap.assessment_result_projection plus Alpha MAP extension sidecars",
"storage": "Public view over NWEAMap projection joined to extension fields; no copied NWEA columns.",
"meaning": "Plain current MAP result keyed by TimeBack student, subject, and term.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"alphaName": "alpha.map_sitting",
"plainName": "MAP sitting",
"changeType": "RENAME + RESTRICT",
"source": "nweamap.assessment_result_projection/raw_assessment_results with sittingScope=all",
"storage": "Authorized SQL view over NWEAMap base rows; no Alpha storage.",
"meaning": "Audit view of all MAP sittings including retakes and soft-deleted rows when authorized.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"alphaName": "alpha.map_goal_strand",
"plainName": "MAP goal strand",
"changeType": "RENAME + RESTRICT + EXTEND",
"source": "view-unpivot of NWEA Goal1Name..Goal8Adjective fields from nweamap.raw_assessment_results",
"storage": "SQL view-derived row shape; goal_gap is view-derived, and no Alpha table stores GoalN fields.",
"meaning": "One row per student, subject, term, and goal strand with strand_rit, standard_error, and goal_gap.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"alphaName": "alpha.map_growth_window",
"plainName": "MAP growth window",
"changeType": "EXTEND",
"source": "alpha.map_growth_extension keyed to nweamap.assessment_result_projection",
"storage": "Extension table stores Growth X/target/null reason/config version only; projected/observed source values remain base view columns.",
"meaning": "One typed growth-window row with observed growth, projected growth, Growth X, target, and norms set.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"alphaName": "alpha.map_normed_result",
"plainName": "Normed MAP result",
"changeType": "RESTRICT",
"source": "nweamap.assessment_result_projection NormsReferenceData plus typed Alpha norms parameter",
"storage": "SQL view/restriction; approved norms_set values are typed and not copied as source storage.",
"meaning": "MAP result/calculator output bound to exactly one norms set, currently 2020 or 2025.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"alphaName": "alpha.map_effective_grade",
"plainName": "Effective grade",
"changeType": "EXTEND",
"source": "alpha.map_effective_grade_extension keyed to NWEAMap projection and calculator config",
"storage": "Extension table stores Alpha calculator outputs/provenance; RIT source remains NWEAMap view.",
"meaning": "RIT50 grade, RIT90 grade, effective grade, Alpha minimum RIT, and Alpha predicted RIT.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"alphaName": "alpha.map_longitudinal_point",
"plainName": "MAP growth point",
"changeType": "EXTEND",
"source": "alpha.map_longitudinal_extension keyed to NWEAMap projection rows across terms",
"storage": "Extension/read view stores derived growth fields and references source terms, not copied NWEA rows.",
"meaning": "Ordered per-student, per-subject time series point with TimeBack-era flag.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-012-longitudinal-series"
},
{
"alphaName": "alpha.map_99_level",
"plainName": "99-level",
"changeType": "EXTEND",
"source": "alpha.map_99_level_extension keyed to NWEAMap projection and threshold config",
"storage": "Extension table stores ceiling metric/provenance; percentile/RIT source remains base view.",
"meaning": "How many grade levels above the 99th-percentile threshold a student's RIT sits.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-013-ninety-nine-levels"
},
{
"alphaName": "alpha.academic_record_view",
"plainName": "Academic record",
"changeType": "RENAME + RESTRICT",
"source": "edfi.canonical_record where resource_name/record_kind = StudentAcademicRecord",
"storage": "SQL view over Ed-Fi canonical records; filters tenant/resource/canonical state/is_deleted, extracts typed payload_json fields, resolves descriptors, and joins roster sourcedIds; no Alpha storage.",
"meaning": "Cumulative academic achievement for one student: term, school year, school, GPA/class-rank fields, attempted credits, earned credits, diplomas, honors, and report-card references.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"alphaName": "alpha.course_transcript_view",
"plainName": "Course transcript",
"changeType": "RENAME + RESTRICT",
"source": "edfi.canonical_record where resource_name/record_kind = CourseTranscript, joined to StudentAcademicRecord references",
"storage": "SQL view over Ed-Fi canonical records; descriptor fields resolve through edfi.descriptor_code and course/student/school references resolve through platform3 sourcedIds; no Alpha storage.",
"meaning": "Final course performance for one student in a term or school year: course, attempt result, final letter/numeric grade, attempted credits, earned credits, credit type/category, repeat code, and transcript evidence.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"alphaName": "alpha.course_grade_view",
"plainName": "Course grade",
"changeType": "RENAME + RESTRICT",
"source": "edfi.canonical_record where resource_name/record_kind = Grade, with GradebookEntry references when present",
"storage": "SQL view over Ed-Fi canonical records; extracts LetterGradeEarned, NumericGradeEarned, GradeTypeDescriptor, CurrentGradeIndicator, CurrentGradeAsOfDate, grading-period references, and gradebook-entry references from payload_json; no Alpha storage.",
"meaning": "A settled course/grading-period grade that belongs in Results only after it is a durable academic record, not while it is merely an event or blank assignment.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"alphaName": "alpha.transcript_result_view",
"plainName": "Transcript result",
"changeType": "RENAME + RESTRICT",
"source": "Union/read view over alpha.academic_record_view, alpha.course_transcript_view, and alpha.course_grade_view",
"storage": "Public read view only; it normalizes transcript answer rows without copying Ed-Fi payload fields into Alpha tables.",
"meaning": "One report-ready row for questions like a student's final grade and earned credits for a course in a term.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"alphaName": "alpha.result_source_evidence",
"plainName": "Result source evidence",
"changeType": "EXTEND",
"source": "alpha.result_source_evidence keyed to adapter/import/audit FKs",
"storage": "Extension table stores adapter ids, producer ids, evidence refs, and hashes; not copied source fields.",
"meaning": "Immutable adapter/import/source references that let migration reconcile old DB and Alpha surface answers.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"alphaName": "alpha.map_percentile_translation",
"plainName": "Percentile/RIT translation",
"changeType": "EXTEND",
"source": "NWEA published norms plus Alpha calculator config",
"storage": "Surface-owned calculator read model; no app-local norms table.",
"meaning": "Converts percentile to RIT or RIT to percentile under one subject, grade, season, and norms set.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"alphaName": "alpha.map_r90_norm_point",
"plainName": "R90 norm point",
"changeType": "EXTEND",
"source": "Alpha R90/RIT90 extrapolation over NWEA-published RIT50 norms",
"storage": "Single surface-hosted R90 table versioned by norms_set and calculator_version.",
"meaning": "The one R90 table used by effective grade, GOALS, and related MAP calculators; no local copies.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"alphaName": "alpha.report_group_growth_x",
"plainName": "Group Growth X report",
"changeType": "EXTEND",
"source": "Results report-ready view over per-student alpha.map_growth_window.growth_x rows",
"storage": "Report-ready read view; stores/returns average of student ratios, not total observed / total projected.",
"meaning": "Cohort Growth X answer for school level, tenure, brand, modality, school, or cohort groupings.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"alphaName": "alpha.map_percentile_translation",
"plainName": "Percentile/RIT translation",
"changeType": "EXTEND",
"source": "NWEA published norms plus Alpha calculator config",
"storage": "Surface-owned calculator read model; no app-local norms table.",
"meaning": "Converts percentile to RIT or RIT to percentile under one subject, grade, season, and norms set.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"alphaName": "alpha.map_r90_norm_point",
"plainName": "R90 norm point",
"changeType": "EXTEND",
"source": "Alpha R90/RIT90 extrapolation over NWEA-published RIT50 norms",
"storage": "Legacy Results MAP report fixture rows, not the GOALS grade2RIT/R90 source.",
"meaning": "Legacy R90 fixture row for Results report compatibility. GOALS grade2RIT/R90 uses the skill-seeded NWEAMAP master directly or through Analytics.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
},
{
"alphaName": "alpha.report_group_growth_x",
"plainName": "Group Growth X report",
"changeType": "EXTEND",
"source": "Results report-ready view over per-student alpha.map_growth_window.growth_x rows",
"storage": "Report-ready read view; stores/returns average of student ratios, not total observed / total projected.",
"meaning": "Cohort Growth X answer for school level, tenure, brand, modality, school, or cohort groupings.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"alphaName": "alpha.pp100_attempt",
"plainName": "PowerPath 100 attempt",
"changeType": "EXTEND",
"source": "Curriculum gate plus Content blueprint and exact adaptive-bank pool authority",
"storage": "Results-owned frozen pool, deterministic selection seed, score walk, and session state",
"meaning": "One authoritative PP100 score-to-100 lesson mastery walk, preserved across remediation pauses.",
"architectureItd": "loop/context/powerpath100-decision.md"
},
{
"alphaName": "alpha.pp100_response",
"plainName": "PowerPath 100 first response",
"changeType": "EXTEND + RESTRICT",
"source": "Student evidence graded against Content-owned answer key",
"storage": "Immutable Results-owned response row",
"meaning": "The one countable first response and server-derived score transition at an exact adaptive sequence.",
"architectureItd": "loop/context/powerpath100-decision.md"
}
]crossRules
[
{
"index": 1,
"rule": "Tag registry vs. real column",
"application": "Results uses real columns for every relationship, join key, sort key, computed input, uniqueness key, and not-null fact: student_id, content_id, kc_id, track_id, current_track_level_id, current_segment_id, subject, term_id, school_year, result_kind, source_adapter_id, xp_award_id, content_effectiveness_id, test_result_component_id, ai_grading_audit_id, course_id, transcript_record_id, academic_record_id, credit_type, and outcome_status. If the column is sourced from OneRoster, NWEAMap, or Ed-Fi it is a view column; if Alpha creates it, it is an extension column. Ed-Fi descriptors resolve through edfi.descriptor_code, never a local Results tag table."
},
{
"index": 2,
"rule": "Point-in-time default",
"application": "Report cards, transcripts, course grades, student_track_state, working grade, gate pass state, student_kc_state, XP awards, content effectiveness, and MAP term facts are read by asOfDate. begin_date NULL means the row has no locatable start and is excluded from point-in-time computation; end_date NULL means active for any asOfDate on or after begin_date; both NULL means excluded; is_time_locatable is exposed on effective-dated Results rows. Current reads are asOfDate reads, not a separate current-only shortcut."
},
{
"index": 3,
"rule": "Typed field, no read-time parsing",
"application": "subject, canonical_term_id, term_season, school_year, result_kind, source_kind, test_type, growth_window, norms_set, initial_mastery, current_retention, durable_mastery, fluency_state, next_task_type, track_status, gate_status, xp_award_reason, course_attempt_result, grade_type, credit_type, and transcript_term are typed fields with alias folds or descriptor resolution at write/view time. Consumers never parse test names, NWEA TermName, Ed-Fi descriptor labels, URLs, or free comments."
},
{
"index": 4,
"rule": "Policy numbers are config",
"application": "mastery cutoff, retention model, stuck-attempt threshold, gate retake cooldown, proxy-subject rules, XP award formula, first-attempt accuracy thresholds, perfect-accuracy boost, repeat-attempt discount, effort signal weighting, Growth X target, RIT calculator coefficients, 99-level thresholds, school-year boundaries, progress XP-remaining precedence, pacing thresholds, rewards, and mastery decay are alpha.policy.* config read by the owning surface."
},
{
"index": 5,
"rule": "Event, result, gradebook are not collapsed",
"application": "Events records moments; Results records settled outcomes and scores; gradebook/report-card rows are rollups that may reference results. Results never stores launch, view, hint, or scrub moments as results."
},
{
"index": 6,
"rule": "Two graphs, two homes",
"application": "Curriculum owns the shared curriculum graph. Results owns alpha.student_kc_state, the per-student overlay over that graph, with four named states on one row: initial_mastery, current_retention, durable_mastery, and fluency_state. Mastery is never a field on the student record and the shared map is never copied into Results."
},
{
"index": 7,
"rule": "NWEA account boundary",
"application": "Results reads the NWEA account through the stock OneRoster org tree: type=district means Brand x Modality and carries alpha.org.nwea_district_id. Results does not create a second NWEA account source of truth."
},
{
"index": 8,
"rule": "Secrets are not fields or tags",
"application": "Results rows may record that a third-party producer generated an outcome, but credentials stay in alpha.app_credential and secret vault references. No result, MAP score, or adapter row stores a credential value."
},
{
"index": 9,
"rule": "Tenure bands are config",
"application": "If Results filters or groups outcome reports by tenure, it reads alpha.policy.tenure_buckets and student admission_date from People & Orgs instead of hardcoding band edges."
},
{
"index": 10,
"rule": "Content effectiveness is derived from Results",
"application": "Results is the system of record for outcome evidence and recomputes alpha.content_effectiveness after each scored result that references the content the student used. The read is keyed to Content items and carries validated_by_count, failed_by_count, and effectiveness_rate. Apps never increment counters and Results never copies Content title/body/kind fields."
},
{
"index": 11,
"rule": "Test result hierarchy is first-class Results",
"application": "A settled assessment result exposes test, section, part, and question_response rows through alpha.test_result_component. result_record.canonical_response remains audit/source evidence; consumers read the component hierarchy instead of parsing JSON, QTI runtime state, class/course/org/event rows, or Content's blank instrument structure."
},
{
"index": 12,
"rule": "AI grading audit is first-class Results",
"application": "A completed assessment's AI feedback exposes overall, question, and question_part audit rows through alpha.ai_grading_audit. Rows record provider/model/version, grader and prompt refs, prompt hash, input evidence, output feedback, score/rubric/confidence, revision chain, and human override fields. Consumers read this audit instead of parsing canonical_response, QTI runtime state, app logs, or private grader logs."
},
{
"index": 13,
"rule": "External results enter through named adapters",
"application": "College Board, AP Classroom, Barron's, Princeton Review, NWEA, Ed-Fi student academic record imports, and platform-native producers enter through named adapters that write either the proper 1EdTech base surface or Alpha extension storage at the boundary, including the QTI EAP5/EAP6 canonical response plus isCorrect when item-level response evidence exists. When producer data includes item/question responses, adapters also materialize alpha.test_result_component rows. When producer data includes AI grading evidence, adapters materialize alpha.ai_grading_audit rows. App code never half-maps producer results or transcript rows."
},
{
"index": 14,
"rule": "Test type is typed on test object",
"application": "Results reads test_type and is_mastery_gate from Content/QTI objects through references to the content/test version in force when the result settled. It never infers them from display names and never stores copied Content/QTI source fields in Alpha extension tables."
},
{
"index": 15,
"rule": "XP ledger is immutable history",
"application": "Awarded XP lives in alpha.xp_ledger as a ledger, not as mutable state or event rows. It is computed by the Results surface per attempt from Content/Curriculum expected_xp or a documented raw-import expected_xp_ref basis, per-attempt accuracy evidence, effort signals, repeat-attempt discount, passive-activity verification, and cheating/gaming penalties. For lesson-tier gated articles/videos, alpha.policy.xp_award_formula pins >=80% first-attempt accuracy to full expected_xp, <80% to 0, 100% first-attempt accuracy to expected_xp * 1.25, and focused mastery on redo1 / redo2 / redo3+ to 50% / 25% / 0% without a perfect bonus. Raw TimeBack imports distinguish content_expected_xp, source_expected_xp, source_xp, and adapter_default provenance; gates, events, engines, renderers, and apps never write canonical XP awards."
},
{
"index": 16,
"rule": "Course and grade progress are Results reads",
"application": "Results exposes alpha.student_course_progress and alpha.student_grade_level_progress as the student-facing answers for course progress, grade-level progress, remaining XP, and pacing. Analytics completion/XP rollups, Curriculum main-course expected-XP structure, Events Caliper progress evidence, and People & Orgs calendar/enrollment facts are inputs. Clients call Results and never join those modules to compute progress."
},
{
"index": 17,
"rule": "Locked vocabulary",
"application": "student_kc_state and student_track_state are state; alpha.xp_ledger is a ledger; working grade, advancement, course progress, and content effectiveness are measures; report-ready reads are views; GOALS hours-to-target-date is a prediction. Results does not use projection except for event-sourcing internals."
}
]modulePlacementQc
[
{
"check": "Mastery is not on the student record",
"result": "alpha.student_kc_state lives in Results. People & Orgs can link to it but cannot store mastery fields."
},
{
"check": "Curriculum graph is not student knowledge graph",
"result": "Curriculum owns alpha.curriculum_graph. Results owns the per-student overlay with mastery, confidence, decay, and evidence pointers."
},
{
"check": "Event is not result",
"result": "Events feed Results. A launch, answer, hint, attendance occurrence, discipline incident, or video-scrub event becomes result evidence only after a surface-owned scorer, Ed-Fi academic-record view, or adapter settles it."
},
{
"check": "Content is not attempt",
"result": "Content holds blank lessons, questions, articles, tests, videos, expected_xp, and item metadata. Results holds answers, scores, outcome records, XP ledger entries, MAP scores, report card lines, and gate passes."
},
{
"check": "Track definitions are not track state",
"result": "Curriculum owns track, track_level, track_level_segment, course, and course_component definitions. Results owns alpha.student_track_state for one student's current track position and switch history."
},
{
"check": "Next-task selection is not app logic",
"result": "Results owns the one-call next-task decision. Apps render typed task refs; they never choose the frontier lesson, most-due review, fluency practice, or gate retry themselves."
},
{
"check": "Progress is not a client join",
"result": "Course and grade-level progress must be read from Results progress endpoints. Analytics, Curriculum, Events, and People & Orgs may supply evidence, but consumers do not rebuild the progress formula."
}
]apiEndpoints
[
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/map-scores",
"object": "alpha.map_score",
"purpose": "Returns the student's term-scoped highest-RIT MAP test-of-record row for the typed subject, term, and norms set. Use current-map, not this endpoint, for the GOALS/student-facing current MAP context.",
"parameters": [
"studentId",
"subject",
"canonicalTermId",
"normsSet",
"sittingScope",
"modifiedSince"
],
"responseGrain": "One row per (student_id, subject_id, canonical_term_id, norms_set), defaulting to sittingScope=test_of_record.",
"rawDbTwin": "Read alpha.map_score with the same tenant_id, student_id, subject_id, canonical_term_id, and norms_set for term/report answers. Do not sort or dedupe raw NWEA sittings.",
"example": "/alpha/results/v1/students/stu_sophia_demo/map-scores?subject=math&canonicalTermId=term_2025_26_spring&normsSet=2025&sittingScope=test_of_record",
"responseFields": [
"student_id",
"subject_id",
"canonical_term_id",
"norms_set",
"rit",
"percentile",
"test_of_record_reason"
],
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-map-scores",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/current-map",
"object": "alpha.map_current_score",
"purpose": "Returns the GOALS/student-facing current MAP context: latest active Growth MAP by test date, with latest active screener/non-growth fallback only when no Growth MAP exists.",
"parameters": [
"studentId",
"subject",
"normsSet",
"modifiedSince"
],
"responseGrain": "One current row per (student_id, subject_id, norms_set), selected by latest-growth-first policy.",
"rawDbTwin": "Read alpha.map_current_score with the same tenant_id, student_id, subject_id, and norms_set. Do not use alpha.map_score, local date sorting, or a client GrowthMeasureYN branch for GOALS current MAP.",
"example": "/alpha/results/v1/students/stu_timeback_10017/current-map?subject=math&normsSet=2025",
"responseFields": [
"student_id",
"subject_id",
"norms_set",
"rit",
"percentile",
"growth_measure_yn",
"current_map_reason",
"test_start_at",
"policy_ref"
],
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-current-map",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/growth-windows",
"object": "alpha.map_growth_window",
"purpose": "Returns observed growth, projected growth, and Growth X for one typed growth window. This is the API path for Growth X.",
"parameters": [
"studentId",
"subject",
"canonicalTermId",
"normsSet",
"growthWindow",
"modifiedSince"
],
"responseGrain": "One row per (student_id, subject_id, canonical_term_id, norms_set, growth_window).",
"rawDbTwin": "Read alpha.map_growth_window at the same key. Do not compute observed_growth / projected_growth in the consumer.",
"example": "/alpha/results/v1/students/stu_sophia_demo/growth-windows?subject=math&canonicalTermId=term_2025_26_spring&normsSet=2025&growthWindow=fall_to_spring",
"responseFields": [
"observed_growth",
"projected_growth",
"growth_x",
"growth_x_target",
"on_track_for_growth_x_target"
],
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-growth-windows",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/highest-mastered-grade",
"object": "alpha.highest_mastered_grade",
"purpose": "Returns highest mastered grade as of a date, with actual mastery-test results winning over summaries and placements.",
"parameters": [
"studentId",
"subject",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One row per (student_id, subject_id, as_of_date).",
"rawDbTwin": "Read alpha.highest_mastered_grade with the same as_of_date and verify evidence_source before using fallback rows.",
"example": "/alpha/results/v1/students/stu_sophia_demo/highest-mastered-grade?subject=math&asOfDate=2026-06-05",
"responseFields": [
"highest_mastered_grade",
"evidence_source",
"mastery_cutoff_policy_ref",
"source_mastery_ledger_ids"
],
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-highest-mastered-grade",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/working-grade",
"object": "alpha.working_grade",
"purpose": "Returns the student's working grade for the subject as a Results-owned point-in-time answer.",
"parameters": [
"studentId",
"subject",
"asOfDate",
"modifiedSince"
],
"responseGrain": "Latest valid row for (student_id, subject_id) at asOfDate.",
"rawDbTwin": "Read alpha.working_grade using the point-in-time rule and do not derive the value from course placement when test results exist.",
"example": "/alpha/results/v1/students/stu_sophia_demo/working-grade?subject=math&asOfDate=2026-06-05",
"responseFields": [
"working_grade",
"input_kind",
"formula_version",
"source_evidence_refs"
],
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Advancement Are Surface-Owned Metrics",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-working-grade",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/track-state",
"object": "alpha.student_track_state",
"purpose": "Returns the student's current track position: track, current level, current segment, placement evidence, status, and switch target when present.",
"parameters": [
"studentId",
"subject",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One current point-in-time row per active (student_id, track_id), filtered to the requested subject when supplied.",
"rawDbTwin": "Read alpha.student_track_state with the same subject_id and asOfDate. Apply begin_date/end_date/is_time_locatable and use status=active for current progress visualizations; never infer track position from Events or copy Curriculum track definitions.",
"example": "/alpha/results/v1/students/stu_sophia_demo/track-state?subject=math&asOfDate=2026-06-05",
"responseFields": [
"track_id",
"current_track_level_id",
"current_segment_id",
"placement_evidence",
"status",
"switched_to_track_id",
"effective_at"
],
"itds": [
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-track-state",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/course-progress",
"object": "alpha.student_course_progress",
"purpose": "Returns the student-facing course progress answer: XP remaining, total XP, percent complete, evidence kind, and source refs. This is the preferred API path for course progress consumers.",
"parameters": [
"studentId",
"subject",
"courseId",
"gradeLevel",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One row per (student_id, subject_id, course_id, as_of_date), optionally narrowed by gradeLevel.",
"rawDbTwin": "Read alpha.student_course_progress with the same tenant_id, student_id, subject_id, course_id, and as_of_date. Do not call Analytics completion-rollups or walk Curriculum trees as the final consumer contract.",
"example": "/alpha/results/v1/students/stu_timeback_10017/course-progress?subject=math&courseId=course_math_grade_7_main&asOfDate=2026-06-03",
"responseFields": [
"course_id",
"grade_level",
"xp_remaining",
"total_xp",
"percent_complete",
"progress_source_kind",
"evidence_kind",
"policy_ref",
"source_analytics_rollup_refs",
"source_curriculum_refs"
],
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
},
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-course-progress",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/grade-level-progress",
"object": "alpha.student_grade_level_progress",
"purpose": "Returns the student-facing grade-level progress and pacing answer: active-path XP remaining, main-sequence total XP, percent complete, elapsed school-year percent, and pacing status.",
"parameters": [
"studentId",
"subject",
"gradeLevel",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One row per (student_id, subject_id, grade_level, as_of_date).",
"rawDbTwin": "Read alpha.student_grade_level_progress with the same tenant_id, student_id, subject_id, grade_level, and as_of_date. Use grade_level_xp_remaining over main_sequence_total_xp; do not derive grade progress from MAP/RIT/R90, Analytics rows, local calendars, or Curriculum joins.",
"example": "/alpha/results/v1/students/stu_timeback_10017/grade-level-progress?subject=math&gradeLevel=7&asOfDate=2026-06-03",
"responseFields": [
"grade_level",
"working_grade",
"active_path_state",
"grade_level_xp_remaining",
"main_sequence_total_xp",
"percent_complete",
"elapsed_school_year_percent",
"pacing_status",
"policy_ref",
"source_course_progress_refs",
"source_analytics_rollup_refs",
"source_calendar_refs"
],
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
},
{
"id": "ritd-032-student-track-state",
"title": "Student Track State Is Results State",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-032-student-track-state"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-grade-level-progress",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/kc-state",
"object": "alpha.student_kc_state",
"purpose": "Returns the four named KC-state fields for each KC visible to the student and subject as of a date.",
"parameters": [
"studentId",
"subject",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One point-in-time row per (student_id, kc_id), with the four state fields kept separate.",
"rawDbTwin": "Read alpha.student_kc_state with the same point-in-time rule. Do not blend initial_mastery, current_retention, durable_mastery, and fluency_state.",
"example": "/alpha/results/v1/students/stu_sophia_demo/kc-state?subject=math&asOfDate=2026-06-05",
"responseFields": [
"kc_id",
"initial_mastery",
"current_retention",
"durable_mastery",
"fluency_state",
"next_due_at"
],
"itds": [
{
"id": "ritd-004-student-knowledge-graph",
"title": "Student Knowledge Graph Lives In Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-kc-state",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/xp-ledger",
"object": "alpha.xp_ledger",
"purpose": "Returns immutable XP ledger rows for one student. This is the API path for awarded XP history and awarded-XP-this-week checks.",
"parameters": [
"studentId",
"limit",
"cursor",
"sort"
],
"responseGrain": "One row per XP award, discount, penalty, or reversal. Rows are append-only and include negative/reversal rows in totals.",
"rawDbTwin": "Read alpha.xp_ledger for the same tenant and student, window by created_at for weekly totals, and sum awarded_xp including reversal rows. Never compute XP from Events, gates, Content expected_xp, or engine output.",
"example": "/alpha/results/v1/students/stu_sophia_demo/xp-ledger",
"responseFields": [
"xp_award_id",
"result_record_id",
"awarded_xp",
"award_reason",
"created_at",
"reversal_of_xp_award_id"
],
"itds": [
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-xp-ledger",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/results",
"object": "alpha.result_record",
"purpose": "Returns settled outcome records for the student. The XP recipe uses this endpoint only to restrict ledger rows to same-subject result records; it does not compute XP formulas.",
"parameters": [
"studentId",
"subject",
"canonicalTermId",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One row per settled result_record visible to the caller.",
"rawDbTwin": "Read alpha.result_record at the same tenant, student, subject, and term grain.",
"example": "/alpha/results/v1/students/stu_sophia_demo/results?subject=math&canonicalTermId=term_2025_26_spring&asOfDate=2026-06-05",
"responseFields": [
"result_record_id",
"student_id",
"subject_id",
"canonical_term_id",
"outcome_status",
"score_percent"
],
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-results",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/test-result-components",
"object": "alpha.test_result_component",
"purpose": "Returns first-class rows for a stored test result hierarchy across tests, sections, parts, and question responses.",
"parameters": [
"studentId",
"resultRecordId",
"subject",
"contentId",
"componentRole",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One hierarchy row per test, section, part, or question_response component.",
"rawDbTwin": "Read alpha.test_result_component with the same tenant/result/student filters. Do not parse alpha.result_record.canonical_response JSON or join class/course/org/event tables to recover item responses.",
"example": "/alpha/results/v1/test-result-components?resultRecordId=018f4b4e-9c7a-7d3d-8b2f-2f673a000101&componentRole=question_response",
"responseFields": [
"test_result_component_id",
"result_record_id",
"component_role",
"parent_test_result_component_id",
"question_id",
"response_identifier",
"response_value",
"is_correct"
],
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-test-result-components",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/test-result-components",
"object": "alpha.test_result_component",
"purpose": "Returns one student's stored test-result hierarchy without requiring class/course/org/event joins.",
"parameters": [
"studentId",
"resultRecordId",
"subject",
"contentId",
"componentRole",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One hierarchy row per test, section, part, or question_response component for the path student.",
"rawDbTwin": "Read alpha.test_result_component where student_id matches the path student. The parent_test_result_component_id chain gives test -> section -> part -> question_response.",
"example": "/alpha/results/v1/students/stu_sophia_demo/test-result-components?subject=math&componentRole=question_response",
"responseFields": [
"test_result_component_id",
"result_record_id",
"component_role",
"parent_test_result_component_id",
"question_id",
"response_identifier",
"response_value",
"is_correct"
],
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-test-result-components",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/ai-grading-audit",
"object": "alpha.ai_grading_audit",
"purpose": "Returns first-class AI grader audit rows for overall and question-level feedback, including model, prompt, revision, status, and human override provenance.",
"parameters": [
"studentId",
"resultRecordId",
"testResultComponentId",
"subject",
"contentId",
"gradingStage",
"gradingStatus",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One AI grading audit revision row per result record, grading stage, test-result component, and revision number.",
"rawDbTwin": "Read alpha.ai_grading_audit with the same tenant/result/student/component filters. Do not inspect private AI grader logs, parse alpha.result_record.canonical_response JSON, or use Content/QTI rows as the audit log.",
"example": "/alpha/results/v1/ai-grading-audit?resultRecordId=018f4b4e-9c7a-7d3d-8b2f-2f673a000101&gradingStage=question",
"responseFields": [
"ai_grading_audit_id",
"result_record_id",
"test_result_component_id",
"grading_stage",
"grading_status",
"ai_provider",
"ai_model",
"prompt_hash",
"output_feedback",
"revision_number",
"human_override_reason"
],
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-ai-grading-audit",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/ai-grading-audit",
"object": "alpha.ai_grading_audit",
"purpose": "Returns one student's AI-graded test feedback audit trail without requiring private logs, result JSON parsing, or class/course/org/event joins.",
"parameters": [
"studentId",
"resultRecordId",
"testResultComponentId",
"subject",
"contentId",
"gradingStage",
"gradingStatus",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One AI grading audit revision row visible for the path student.",
"rawDbTwin": "Read alpha.ai_grading_audit where student_id matches the path student and apply the same result/component/stage/status filters.",
"example": "/alpha/results/v1/students/stu_sophia_demo/ai-grading-audit?subject=math&gradingStage=question&gradingStatus=accepted",
"responseFields": [
"ai_grading_audit_id",
"result_record_id",
"test_result_component_id",
"grading_stage",
"grading_status",
"ai_provider",
"ai_model",
"prompt_hash",
"output_feedback",
"revision_number",
"human_override_reason"
],
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-ai-grading-audit",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/result-records",
"object": "alpha.result_record",
"purpose": "Reads tenant-scoped settled results. qtiAttemptId selects exactly one QTI-backed result through the tenant-unique typed attempt key and returns results.qti_attempt_result.v1 with Results-owned component, gate, mastery, KC, and content-evidence rows.",
"parameters": [
"qtiAttemptId",
"studentId",
"subject",
"canonicalTermId",
"modifiedSince",
"limit",
"cursor",
"sort"
],
"responseGrain": "Without qtiAttemptId, a paginated result_record collection. With qtiAttemptId, zero or one result whose typed identifiers and evidence arrays can be dereferenced without a tenant scan, producer_result_id guess, or shadow correlation table.",
"rawDbTwin": "Resolve alpha.result_record_extension by the unique (tenant_id, qti_attempt_id) index, then compare related rows by result_record_id in alpha.test_result_component, alpha.gate_pass, alpha.mastery_ledger, alpha.result_kc_evidence, alpha.student_kc_state.source_result_refs, and alpha.result_content_evidence.",
"example": "/alpha/results/v1/result-records?qtiAttemptId=qti-attempt-alex-001",
"responseFields": [
"result_record_id",
"qti_attempt_id",
"administration_id",
"qti_session_id",
"qti_test_id",
"qti_artifact_version_id",
"content_test_spec_id",
"test_kind"
],
"problemCodes": [
"results:authentication_required",
"results:validation_failed",
"results:authorization_failed"
],
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
],
"anchor": "endpoint-get-alpha-results-v1-result-records"
},
{
"method": "POST",
"path": "/alpha/results/v1/result-records",
"object": "alpha.result_record",
"purpose": "Creates a direct public Results record for the public result_kind vocabulary. Adapter-owned MAP and mastery-gate kinds use POST /imports instead. Every accepted public write receives a typed XP disposition. A fully_graded row with numeric score_percent, content_id, source_adapter_id, producer_result_id, and a Content/Curriculum expected_xp basis atomically earns exactly one alpha.xp_ledger verified_attempt award. Adapter registration is an audit/discovery contract, not an XP allowlist, and track enrollment is not required.",
"parameters": [
"Idempotency-Key"
],
"responseGrain": "One created alpha.result_record row, replayable by the same Idempotency-Key and same body. The same transaction writes exactly one alpha.xp_ledger row per (tenant_id, source_adapter_id, producer_result_id) for awardable work; ineligible accepted work remains durable with xp_disposition=not_awarded and a typed xp_non_award_reason.",
"rawDbTwin": "Read alpha.result_record by result_record_id or producer_result_id after the write and inspect xp_disposition, xp_award_id, and xp_non_award_reason. Awarded rows have one alpha.xp_ledger row with award_reason=verified_attempt, the active alpha.policy.xp_award_formula reference, Content/Curriculum expected_xp_ref, and matching source_adapter_id plus producer_result_id evidence. Replays cannot add another award.",
"example": "/alpha/results/v1/result-records",
"responseFields": [
"result_record_id",
"student_id",
"result_kind",
"subject_id",
"score_percent",
"source_adapter_id",
"producer_result_id",
"xp_disposition",
"xp_award_id",
"xp_non_award_reason"
],
"problemCodes": [
"results:validation_failed",
"results:idempotency_conflict",
"results:authorization_failed"
],
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-018-axis-write-granularity",
"title": "API Axis: Write Granularity",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-018-axis-write-granularity"
},
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
],
"anchor": "endpoint-post-alpha-results-v1-result-records"
},
{
"method": "PATCH",
"path": "/alpha/results/v1/result-records/{resultRecordId}",
"object": "alpha.result_record",
"purpose": "Corrects or soft-deletes one Alpha-owned result record without last-write-wins. The exact tenant/result row is locked before the public row is read and If-Match is validated, so simultaneous different-key corrections carrying one current ETag permit at most one committed mutation.",
"parameters": [
"resultRecordId",
"Idempotency-Key",
"If-Match"
],
"responseGrain": "One corrected alpha.result_record row. ETag echoes the validated If-Match value and X-Results-Current-ETag identifies the committed row version. Correction-owned modified_at advances monotonically by at least one millisecond, including for unchanged-score corrections within one clock tick. A stale contender returns and permanently replays one typed 412 receipt without changing the row.",
"rawDbTwin": "Within one transaction, lock alpha.result_record_extension by the exact (tenant_id, result_record_id) primary key, read the matching alpha.result_record public projection, compare its current ETag, and update only after the comparison succeeds. The lock predicate cannot scan, lock the table, or include another tenant/result id.",
"example": "/alpha/results/v1/result-records/018f4b4e-9c7a-7d3d-8b2f-2f673a000101",
"responseFields": [
"result_record_id",
"student_id",
"result_kind",
"subject_id",
"score",
"score_percent",
"text_score",
"outcome_status",
"superseded_by_result_record_id",
"modified_at",
"deleted_at"
],
"problemCodes": [
"results:validation_failed",
"results:precondition_required",
"results:precondition_failed",
"results:idempotency_conflict",
"results:idempotency_in_progress",
"results:idempotency_key_expired",
"results:correction_lock_timeout",
"results:authorization_failed",
"results:not_found"
],
"itds": [
{
"id": "ritd-018-axis-write-granularity",
"title": "API Axis: Write Granularity",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-018-axis-write-granularity"
},
{
"id": "ritd-021-axis-concurrency-model",
"title": "API Axis: Concurrency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-021-axis-concurrency-model"
},
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
],
"anchor": "endpoint-patch-alpha-results-v1-result-records-resultrecordid"
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/report-card",
"object": "alpha.report_card_entry",
"purpose": "Returns current report-card entries for the student and subject as of a date.",
"parameters": [
"studentId",
"subject",
"asOfDate",
"modifiedSince"
],
"responseGrain": "Effective-dated report-card rows keyed by reporting period and subject.",
"rawDbTwin": "Read alpha.report_card_entry using the point-in-time rule.",
"example": "/alpha/results/v1/students/stu_sophia_demo/report-card?subject=math&asOfDate=2026-06-05",
"responseFields": [
"report_card_entry_id",
"grade_value",
"narrative",
"status",
"reporting_period_id"
],
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-report-card",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/gate-passes",
"object": "alpha.gate_pass",
"purpose": "Returns durable gate pass/fail/cooldown/retry rows for the student and subject as of a date.",
"parameters": [
"studentId",
"subject",
"asOfDate",
"modifiedSince"
],
"responseGrain": "Effective-dated gate rows keyed by student, gate_content_id, subject, and gate status.",
"rawDbTwin": "Read alpha.gate_pass using the point-in-time rule. Do not let gates mutate XP directly.",
"example": "/alpha/results/v1/students/stu_sophia_demo/gate-passes?subject=math&asOfDate=2026-06-05",
"responseFields": [
"gate_pass_id",
"gate_content_id",
"gate_status",
"next_eligible_at",
"attempt_count"
],
"itds": [
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
},
{
"id": "ritd-033-xp-ledger",
"title": "XP Ledger Is The Source Of Truth For Awarded XP",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-033-xp-ledger"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-gate-passes",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/reports/closed-loop-reconciliation",
"object": "alpha.report_closed_loop_reconciliation",
"purpose": "Returns old-vs-Alpha reconciliation rows for one typed metric, including single-student cutover checks.",
"parameters": [
"studentId",
"metricKind",
"subject",
"canonicalTermId",
"normsSet",
"growthWindow",
"modifiedSince"
],
"responseGrain": "One row per documented reconciliation metric key.",
"rawDbTwin": "Read alpha.report_closed_loop_reconciliation with the same metricKind and typed filters. studentId is a supported filter.",
"example": "/alpha/results/v1/reports/closed-loop-reconciliation?studentId=stu_timeback_10017&metricKind=growth_x&subject=math&canonicalTermId=term_2025_26_spring&normsSet=2025",
"responseFields": [
"metric_kind",
"student_id",
"subject_id",
"reconcile_status",
"old_value",
"alpha_value"
],
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-reports-closed-loop-reconciliation",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "POST",
"path": "/alpha/results/v1/imports",
"object": "raw_ingest_response",
"purpose": "Accepts source-shaped TimeBack or NWEA rows and materializes Results rows server-side.",
"parameters": [
"sourceShape",
"Idempotency-Key"
],
"responseGrain": "One import receipt per idempotent source batch, with materialized public-row counts and reconciliation_url.",
"rawDbTwin": "A successful non-dry-run import must create readable rows in the documented public objects; accepted_count=0 is not success.",
"example": "/alpha/results/v1/imports",
"responseFields": [
"import_id",
"status",
"accepted_count",
"materialized",
"diagnostics",
"reconciliation_url"
],
"problemCodes": [
"results:validation_failed",
"results:adapter_rejected",
"results:idempotency_conflict",
"results:authorization_failed"
],
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-018-axis-write-granularity",
"title": "API Axis: Write Granularity",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-018-axis-write-granularity"
},
{
"id": "ritd-022-axis-idempotency-model",
"title": "API Axis: Idempotency Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-022-axis-idempotency-model"
},
{
"id": "ritd-025-axis-error-envelope",
"title": "API Axis: Error Envelope",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-025-axis-error-envelope"
}
],
"anchor": "endpoint-post-alpha-results-v1-imports"
},
{
"method": "GET",
"path": "/alpha/results/v1/source-adapters",
"object": "alpha.source_adapter",
"purpose": "Lists the tenant's Results producer registry for audit and discovery. Consumers can verify that ap-one-bff is active, but must not treat registration as an XP award allowlist.",
"parameters": [
"limit",
"cursor",
"sort"
],
"responseGrain": "One row per tenant and source_adapter_id, including adapter kind, canonical-response capability, active state, and last successful write timestamp.",
"rawDbTwin": "Read alpha.source_adapter for the same tenant. ap-one-bff must be active with adapter_kind=qti_scorer and writes_canonical_response=true. Award eligibility remains governed by alpha.policy.xp_award_formula, not membership in this registry.",
"example": "/alpha/results/v1/source-adapters?limit=100",
"responseFields": [
"source_adapter_id",
"tenant_id",
"adapter_kind",
"display_name",
"writes_canonical_response",
"active",
"last_success_at",
"modified_at"
],
"problemCodes": [
"results:authorization_failed",
"results:unsupported_parameter"
],
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
],
"anchor": "endpoint-get-alpha-results-v1-source-adapters"
},
{
"method": "GET",
"path": "/alpha/results/v1/policy-config",
"object": "alpha.policy_config",
"purpose": "Returns Results policy_config rows such as alpha.policy.xp_award_formula so consumers can inspect policy-owned thresholds and formula payloads without hardcoding them.",
"parameters": [
"policyName",
"configVersion",
"status",
"asOfDate",
"limit",
"cursor",
"sort"
],
"responseGrain": "One row per tenant, policy_name, and config_version. Effective-dated filters use begin_date/end_date/is_time_locatable.",
"rawDbTwin": "Read alpha.policy_config for the same tenant and policy_name, require status='active' and the documented asOfDate predicate for point-in-time use. Do not read policy thresholds from renderer/player code or consumer constants.",
"example": "/alpha/results/v1/policy-config?policyName=alpha.policy.xp_award_formula&configVersion=2026-07-27.issue-1500&asOfDate=2026-07-22",
"responseFields": [
"tenant_id",
"policy_name",
"config_version",
"schema_name",
"value_json",
"status",
"begin_date",
"end_date",
"is_time_locatable",
"owner"
],
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-policy-config",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/assessment-finalizations",
"object": "alpha.assessment_finalization",
"purpose": "Reads durable placement/test-out finalizations across authorized students.",
"parameters": [
"studentId",
"subject",
"taskType",
"taskId",
"gateContentId",
"attemptId",
"resultRecordId",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One row per finalized task/form/gate/attempt.",
"rawDbTwin": "Read alpha.assessment_finalization with the same tenant, student, subject, and attempt filters; do not recompute finalization locally.",
"example": "/alpha/results/v1/assessment-finalizations?studentId=stu_timeback_10018&subject=science&taskType=test_out",
"responseFields": [
"finalization_id",
"tenant_id",
"student_id",
"subject_id",
"task_type",
"task_id",
"form_id",
"gate_content_id",
"attempt_id",
"result_record_id",
"evidence_result_record_ids",
"evidence_hash",
"declared_question_count",
"answered_question_count",
"correct_count",
"score_percent",
"passing_criteria_ref",
"passing_score_percent",
"on_fail",
"outcome_status",
"passed",
"placed_grade_level",
"attempted_grade_level",
"working_grade_before",
"working_grade_after",
"advancement_value",
"selected_remediation",
"source_adapter_id",
"producer_result_id",
"source_evidence_refs",
"policy_version",
"as_of_date",
"finalized_at",
"modified_at"
],
"anchor": "endpoint-get-alpha-results-v1-assessment-finalizations",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/assessment-finalizations",
"object": "alpha.assessment_finalization",
"purpose": "Reads the same durable placement/test-out finalization state for student or guide-facing Progress readback.",
"parameters": [
"studentId",
"subject",
"taskType",
"taskId",
"gateContentId",
"attemptId",
"resultRecordId",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One row per finalized task/form/gate/attempt for the path student.",
"rawDbTwin": "Read alpha.assessment_finalization with the same tenant, path student, subject, and attempt filters.",
"example": "/alpha/results/v1/students/stu_timeback_10018/assessment-finalizations?subject=science&taskType=test_out",
"responseFields": [
"finalization_id",
"tenant_id",
"student_id",
"subject_id",
"task_type",
"task_id",
"form_id",
"gate_content_id",
"attempt_id",
"result_record_id",
"evidence_result_record_ids",
"evidence_hash",
"declared_question_count",
"answered_question_count",
"correct_count",
"score_percent",
"passing_criteria_ref",
"passing_score_percent",
"on_fail",
"outcome_status",
"passed",
"placed_grade_level",
"attempted_grade_level",
"working_grade_before",
"working_grade_after",
"advancement_value",
"selected_remediation",
"source_adapter_id",
"producer_result_id",
"source_evidence_refs",
"policy_version",
"as_of_date",
"finalized_at",
"modified_at"
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-assessment-finalizations",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "POST",
"path": "/alpha/results/v1/assessment-finalizations/finalize",
"object": "alpha.assessment_finalization",
"purpose": "Freezes the exact active question_result set for a student, subject date, task, form, gate, attempt, and source adapter; applies the owning published Curriculum gate's passing criteria and on_fail semantics server-side; and returns the authoritative placement/test-out outcome.",
"parameters": [
"Idempotency-Key",
"student_id",
"subject_id",
"task_type",
"task_id",
"form_id",
"gate_content_id",
"attempt_id",
"attempted_grade_level",
"declared_question_count",
"evidence_result_record_ids",
"as_of_date",
"source_adapter_id"
],
"responseGrain": "One durable finalization/result reference for the attempt.",
"rawDbTwin": "Writes alpha.assessment_finalization plus owned Results materializations; raw readers verify the same finalization_id/result_record_id.",
"example": "/alpha/results/v1/assessment-finalizations/finalize",
"responseFields": [
"finalization_id",
"tenant_id",
"student_id",
"subject_id",
"task_type",
"task_id",
"form_id",
"gate_content_id",
"attempt_id",
"result_record_id",
"evidence_result_record_ids",
"evidence_hash",
"declared_question_count",
"answered_question_count",
"correct_count",
"score_percent",
"passing_criteria_ref",
"passing_score_percent",
"on_fail",
"outcome_status",
"passed",
"placed_grade_level",
"attempted_grade_level",
"working_grade_before",
"working_grade_after",
"advancement_value",
"selected_remediation",
"source_adapter_id",
"producer_result_id",
"source_evidence_refs",
"policy_version",
"as_of_date",
"finalized_at",
"modified_at"
],
"anchor": "endpoint-post-alpha-results-v1-assessment-finalizations-finalize",
"problemCodes": [
"results:validation_failed",
"results:adapter_rejected",
"results:idempotency_conflict",
"results:conflict",
"results:authorization_failed"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/grades-mastered",
"object": "alpha.advancement",
"purpose": "Default grades-mastered read. Returns mastery-pure grades_mastered_sytd plus the explicitly named MAP-baseline placement delta, tenant, as-of date, evidence refs, and both formula versions.",
"parameters": [
"studentId",
"subject",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One named grade movement row per tenant, student, subject, and as-of date.",
"rawDbTwin": "Read alpha.advancement under the same tenant/student/as-of filters; use grades_mastered_sytd for grades mastered and never rename map_baseline_grade_delta_not_grades_mastered.",
"example": "/alpha/results/v1/students/stu_timeback_10018/grades-mastered?subject=science&asOfDate=2026-07-17",
"responseFields": [
"tenant_id",
"student_id",
"subject_id",
"as_of_date",
"current_working_grade",
"map_baseline_placement_grade",
"baseline_effective_grade",
"sy_start_working_grade",
"grades_mastered_sytd",
"map_baseline_grade_delta_not_grades_mastered",
"advancement_value",
"grades_mastered_sytd_formula_version",
"map_baseline_grade_delta_not_grades_mastered_formula_version",
"formula_version",
"source_evidence_refs",
"null_reason"
],
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Named Grade Movement Metrics Are Surface-Owned",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-grades-mastered",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/students/{studentId}/advancement",
"object": "alpha.advancement",
"purpose": "Deprecated route alias of /grades-mastered. It returns the identical alpha.advancement row and cannot select a different formula.",
"parameters": [
"studentId",
"subject",
"asOfDate",
"modifiedSince"
],
"responseGrain": "One named grade movement row per tenant, student, subject, and as-of date.",
"rawDbTwin": "Read alpha.advancement under the same tenant/student/as-of filters; use grades_mastered_sytd for grades mastered and never rename map_baseline_grade_delta_not_grades_mastered.",
"example": "/alpha/results/v1/students/stu_timeback_10018/grades-mastered?subject=science&asOfDate=2026-07-17",
"responseFields": [
"tenant_id",
"student_id",
"subject_id",
"as_of_date",
"current_working_grade",
"map_baseline_placement_grade",
"baseline_effective_grade",
"sy_start_working_grade",
"grades_mastered_sytd",
"map_baseline_grade_delta_not_grades_mastered",
"advancement_value",
"grades_mastered_sytd_formula_version",
"map_baseline_grade_delta_not_grades_mastered_formula_version",
"formula_version",
"source_evidence_refs",
"null_reason"
],
"itds": [
{
"id": "ritd-014-working-grade-advancement",
"title": "Working Grade And Named Grade Movement Metrics Are Surface-Owned",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-014-working-grade-advancement"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
],
"anchor": "endpoint-get-alpha-results-v1-students-studentid-advancement",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:unsupported_parameter"
]
},
{
"method": "POST",
"path": "/alpha/results/v1/pp100/attempts",
"object": "alpha.pp100_attempt",
"purpose": "Resume the one active or paused student/gate score walk, or resolve and freeze an authority-proven PP100 v2 gate, exact adaptive bank, eligible question pool, and deterministic selection seed.",
"parameters": [
"Idempotency-Key",
"student_id",
"gate_component_id"
],
"responseGrain": "One frozen PP100 attempt plus created/resumed disposition, accepted responses, current score, next selected question, and exact bank ref. Historical v1 attempts may also carry an exact form ref.",
"rawDbTwin": "alpha.pp100_attempt; partial unique key (tenant_id, student_id, gate_component_id) WHERE status IN ('in_progress','paused')",
"example": "/alpha/results/v1/pp100/attempts",
"responseFields": [
"attempt_id",
"tenant_id",
"student_id",
"subject_id",
"gate_component_id",
"lesson_component_id",
"bank_content_id",
"bank_version_id",
"form_content_id",
"form_version_id",
"policy_ref",
"question_plan",
"selection_seed",
"current_score",
"session_started_at_response",
"pause_count",
"prerequisite",
"status",
"terminal_reason",
"answered_count",
"correct_count",
"hard_answered_count",
"hard_correct_count",
"mastered",
"next_question_index",
"started_at",
"completed_at",
"modified_at"
],
"anchor": "endpoint-post-alpha-results-v1-pp100-attempts",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:conflict"
]
},
{
"method": "GET",
"path": "/alpha/results/v1/pp100/attempts/{attemptId}",
"object": "alpha.pp100_attempt",
"purpose": "Read one student-owned PP100 attempt, immutable responses, and replayed deterministic evaluation.",
"parameters": [
"attemptId",
"studentId"
],
"responseGrain": "One PP100 attempt with responses.",
"rawDbTwin": "alpha.pp100_attempt joined to alpha.pp100_response",
"example": "/alpha/results/v1/pp100/attempts/{attemptId}?studentId={studentId}",
"responseFields": [
"attempt_id",
"tenant_id",
"student_id",
"subject_id",
"gate_component_id",
"lesson_component_id",
"bank_content_id",
"bank_version_id",
"form_content_id",
"form_version_id",
"policy_ref",
"question_plan",
"selection_seed",
"current_score",
"session_started_at_response",
"pause_count",
"prerequisite",
"status",
"terminal_reason",
"answered_count",
"correct_count",
"hard_answered_count",
"hard_correct_count",
"mastered",
"next_question_index",
"started_at",
"completed_at",
"modified_at"
],
"anchor": "endpoint-get-alpha-results-v1-pp100-attempts-attemptid",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:not_found",
"results:conflict"
]
},
{
"method": "POST",
"path": "/alpha/results/v1/pp100/attempts/{attemptId}/responses",
"object": "alpha.pp100_response",
"purpose": "Grade and immutably persist the next exact server-selected first response, apply the governed score transition, pause the same walk after 30 responses in one session, and create a gate pass plus spaced-retrieval eligibility only at score 100.",
"parameters": [
"Idempotency-Key",
"attemptId",
"student_id",
"sequence_index",
"question_content_id",
"question_version_id",
"response_identifier",
"response_value",
"assisted"
],
"responseGrain": "One immutable response plus the updated attempt evaluation.",
"rawDbTwin": "alpha.pp100_response and alpha.pp100_attempt; score-100 writes also create alpha.result_record and alpha.gate_pass, while a 30-response session boundary preserves the attempt as paused",
"example": "/alpha/results/v1/pp100/attempts/{attemptId}/responses",
"responseFields": [
"response_id",
"tenant_id",
"attempt_id",
"student_id",
"sequence_index",
"question_content_id",
"question_version_id",
"response_identifier",
"response_value",
"is_correct",
"assisted",
"score_before",
"score_delta",
"score_after",
"selection_json",
"result_record_id",
"responded_at",
"modified_at"
],
"anchor": "endpoint-post-alpha-results-v1-pp100-attempts-attemptid-responses",
"problemCodes": [
"results:validation_failed",
"results:authorization_failed",
"results:conflict",
"results:idempotency_conflict"
]
}
]apiParameters
[
{
"name": "studentId",
"anchor": "field-api-parameters-studentid",
"type": "TEXT",
"nullability": "Required on student sub-collection routes.",
"key": "Not a key",
"meaning": "TimeBack student id. Never use NWEA StudentID in public Alpha requests.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Text within documented constraints.",
"relationship": "Filters Results rows and closed-loop reconciliation to one TimeBack student resolved by People & Orgs; it never accepts NWEA StudentID.",
"allowedValues": [],
"example": "stu_timeback_10017",
"invalidWhen": "Invalid when the id is absent on student routes, belongs to another tenant, names a non-student user, or uses a raw NWEA StudentID.",
"edgeCases": "Authorized staff may see joined student_email, but studentId remains the stable key for cohort queries, single-student migration cutover checks, and skill-pack examples. It is a supported typed filter on alpha.report_closed_loop_reconciliation; returning results:unsupported_parameter solely because studentId is present is a contract failure.",
"provenance": {
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
},
"upstreamSource": "OneRoster user plus NWEA StudentID source evidence",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "resultRecordId",
"anchor": "field-api-parameters-resultrecordid",
"type": "UUID",
"nullability": "Required on result detail routes; optional filter on component/audit routes.",
"key": "Not a key",
"meaning": "Alpha result_record_id for one settled outcome. Use this instead of joining class/course/org/event rows to find a test result.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "PostgreSQL UUID.",
"relationship": "Attribute on api-parameters; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for resultRecordId.",
"allowedValues": [],
"example": "018f4b4e-9c7a-7d3d-8b2f-2f673a000101",
"invalidWhen": "Invalid when resultRecordId is missing, violates its documented constraints: Validated at the API boundary.; Invalid values return typed RFC 7807 problems..",
"edgeCases": "resultRecordId follows the api-parameters lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.",
"provenance": {
"label": "Canonical result",
"changeType": "RENAME + EXTEND",
"basis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"upstream": "oneroster.results plus Alpha extension",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
},
"upstreamSource": "oneroster.results plus Alpha extension",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "OneRoster result is renamed and extended for self-paced and external outcomes.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "testResultComponentId",
"anchor": "field-api-parameters-testresultcomponentid",
"type": "TEXT",
"nullability": "Optional filter on test-result and AI-grading audit routes.",
"key": "Not a key",
"meaning": "Stable test_result_component_id for a test, section, part, question_response, or question_part feedback target.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Text within documented constraints.",
"relationship": "Attribute on api-parameters; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for testResultComponentId.",
"allowedValues": [],
"example": "trc_alex_unit_1_q_response",
"invalidWhen": "Invalid when testResultComponentId violates its documented constraints: Validated at the API boundary.; Invalid values return typed RFC 7807 problems..",
"edgeCases": "testResultComponentId follows the api-parameters lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.",
"provenance": {
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
},
"upstreamSource": "Alpha extension over settled result evidence",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "contentId",
"anchor": "field-api-parameters-contentid",
"type": "TEXT",
"nullability": "Optional filter.",
"key": "Not a key",
"meaning": "Content item/test id carried by the settled result when known. It is not a class, course, or organization id.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Text within documented constraints.",
"relationship": "Attribute on api-parameters; not a foreign key, and any grouping or filtering behavior must follow the documented constraints for contentId.",
"allowedValues": [],
"example": "content_linear_equations_quiz",
"invalidWhen": "Invalid when contentId violates its documented constraints: Validated at the API boundary.; Invalid values return typed RFC 7807 problems..",
"edgeCases": "contentId follows the api-parameters lifecycle; corrections supersede, void, or recompute the row through the surface rather than client-side patching.",
"provenance": {
"label": "Content evidence boundary",
"changeType": "RESTRICT",
"basis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"upstream": "Alpha result evidence for Content module",
"itds": [
{
"id": "ritd-016-content-effectiveness-derived-read",
"title": "Content Effectiveness Is A Results-Derived Read On Content Items",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-016-content-effectiveness-derived-read"
}
]
},
"upstreamSource": "Alpha result evidence for Content module",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Results stores result-to-content evidence links that feed the Results-owned content_effectiveness rollup.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "componentRole",
"anchor": "field-api-parameters-componentrole",
"type": "TEXT enum",
"nullability": "Optional filter on test-result component routes.",
"key": "Not a key",
"meaning": "Closed component role for stored test-result hierarchy rows.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Governed value on api-parameters; no free-text relationship, and consumers must use the documented enum values.",
"allowedValues": [
{
"value": "test",
"meaning": "Root row for one stored test result.",
"useWhen": "Root row for one stored test result.",
"invalidWhen": "Invalid when test does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "section",
"meaning": "Section-level result row under the test root.",
"useWhen": "Section-level result row under the test root.",
"invalidWhen": "Invalid when section does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "part",
"meaning": "Part-level result row under a section.",
"useWhen": "Part-level result row under a section.",
"invalidWhen": "Invalid when part does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "question_response",
"meaning": "Question-level response row with response/correctness fields.",
"useWhen": "Question-level response row with response/correctness fields.",
"invalidWhen": "Invalid when question_response does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "question_response",
"invalidWhen": "Invalid when componentRole is not one of test, section, part, question_response, or when a source display string bypasses write-time alias folding.",
"edgeCases": "Alias folding happens before api-parameters is written; adding a new componentRole value requires a governed registry or architecture update, not consumer parsing.",
"provenance": {
"label": "Test result component hierarchy",
"changeType": "EXTEND",
"basis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"upstream": "Alpha extension over settled result evidence",
"itds": [
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
},
"upstreamSource": "Alpha extension over settled result evidence",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "A stored assessment result exposes test, section, part, and question_response rows instead of requiring JSON parsing or QTI runtime replay.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "gradingStage",
"anchor": "field-api-parameters-gradingstage",
"type": "TEXT enum",
"nullability": "Optional filter on AI grading audit routes.",
"key": "Not a key",
"meaning": "Closed AI grading audit stage: overall, question, or question_part.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Governed value on api-parameters; no free-text relationship, and consumers must use the documented enum values.",
"allowedValues": [
{
"value": "overall",
"meaning": "Audit row for the overall test/result grade and feedback.",
"useWhen": "Audit row for the overall test/result grade and feedback.",
"invalidWhen": "Invalid when overall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "question",
"meaning": "Audit row for a single question response.",
"useWhen": "Audit row for a single question response.",
"invalidWhen": "Invalid when question does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "question_part",
"meaning": "Audit row for one part of a multi-part question.",
"useWhen": "Audit row for one part of a multi-part question.",
"invalidWhen": "Invalid when question_part does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "question",
"invalidWhen": "Invalid when gradingStage is not one of overall, question, question_part, or when a source display string bypasses write-time alias folding.",
"edgeCases": "Alias folding happens before api-parameters is written; adding a new gradingStage value requires a governed registry or architecture update, not consumer parsing.",
"provenance": {
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
},
"upstreamSource": "Alpha extension over settled result/grader evidence",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "gradingStatus",
"anchor": "field-api-parameters-gradingstatus",
"type": "TEXT enum",
"nullability": "Optional filter on AI grading audit routes.",
"key": "Not a key",
"meaning": "Closed AI grading audit lifecycle status: proposed, accepted, superseded, or overridden.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Governed value on api-parameters; no free-text relationship, and consumers must use the documented enum values.",
"allowedValues": [
{
"value": "proposed",
"meaning": "AI output was produced but has not become the accepted feedback.",
"useWhen": "AI output was produced but has not become the accepted feedback.",
"invalidWhen": "Invalid when proposed does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "accepted",
"meaning": "AI output is the accepted grader feedback for this stage/revision.",
"useWhen": "AI output is the accepted grader feedback for this stage/revision.",
"invalidWhen": "Invalid when accepted does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "superseded",
"meaning": "A later AI or human-reviewed revision replaced this output.",
"useWhen": "A later AI or human-reviewed revision replaced this output.",
"invalidWhen": "Invalid when superseded does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "overridden",
"meaning": "A human override replaced this AI output for display or scoring.",
"useWhen": "A human override replaced this AI output for display or scoring.",
"invalidWhen": "Invalid when overridden does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "accepted",
"invalidWhen": "Invalid when gradingStatus is not one of proposed, accepted, superseded, overridden, or when a source display string bypasses write-time alias folding.",
"edgeCases": "Alias folding happens before api-parameters is written; adding a new gradingStatus value requires a governed registry or architecture update, not consumer parsing.",
"provenance": {
"label": "AI grading audit",
"changeType": "EXTEND",
"basis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"upstream": "Alpha extension over settled result/grader evidence",
"itds": [
{
"id": "ritd-038-ai-grading-audit",
"title": "AI Grading Feedback Has A First-Class Audit",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-038-ai-grading-audit"
},
{
"id": "ritd-037-test-result-component-hierarchy",
"title": "Stored Test Results Have A First-Class Component Hierarchy",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-037-test-result-component-hierarchy"
},
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
}
]
},
"upstreamSource": "Alpha extension over settled result/grader evidence",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Overall and question-level AI grader feedback is stored as a first-class audit row with model, prompt, revision, status, and override provenance.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "subject",
"anchor": "field-api-parameters-subject",
"type": "TEXT enum",
"nullability": "Optional filter unless endpoint requires subject.",
"key": "Not a key",
"meaning": "Canonical alpha.subject id after write-time alias folding. MAP endpoints accept the MAP-measured subset; vocabulary/writing source subjects proxy to language for MAP reads, and FastMath source aliases proxy to math without becoming a public subject.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Filters Results rows by the governed six-value alpha.subject registry after write-time source alias folding.",
"allowedValues": [
{
"value": "math",
"meaning": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"useWhen": "Canonical mathematics subject. MAP-measured; FastMath source aliases proxy to math for MAP reporting but never persist as subject_id=fastmath.",
"invalidWhen": "Invalid when math does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "reading",
"meaning": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"useWhen": "Canonical reading subject. MAP-measured; reading, phonics, phonetic, and oral-reading source aliases fold here when the adapter can resolve them.",
"invalidWhen": "Invalid when reading does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "language",
"meaning": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"useWhen": "Canonical language arts subject. MAP-measured; English and Language Arts aliases fold here, and vocabulary/writing proxy here for MAP RIT and Growth X reporting.",
"invalidWhen": "Invalid when language does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "science",
"meaning": "Canonical science subject. MAP-measured.",
"useWhen": "Canonical science subject. MAP-measured.",
"invalidWhen": "Invalid when science does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "vocabulary",
"meaning": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical vocabulary subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when vocabulary does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "writing",
"meaning": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"useWhen": "Canonical writing subject for curriculum/result records. For MAP RIT and Growth X, the proxy subject is language.",
"invalidWhen": "Invalid when writing does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "math",
"invalidWhen": "Invalid when the value is not one of math, reading, language, science, vocabulary, or writing; when a source display value such as Mathematics bypasses alias folding; or when fastmath/social_studies/bare ELA is sent as a public subject.",
"edgeCases": "For MAP RIT and Growth X, allowed reporting subjects are math, reading, language, and science. Vocabulary and writing proxy to language; FastMath source rows proxy to math but are never returned as subject=fastmath.",
"provenance": {
"label": "Typed subject",
"changeType": "RESTRICT",
"basis": "Subject is a canonical governed id with alias folding at write time.",
"upstream": "NWEA Subject and Alpha subject registry",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
},
"upstreamSource": "NWEA Subject and Alpha subject registry",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Subject is a canonical governed id with alias folding at write time.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "asOfDate",
"anchor": "field-api-parameters-asofdate",
"type": "DATE",
"nullability": "Optional; defaults are endpoint-specific.",
"key": "Not a key",
"meaning": "Point-in-time date used for highest mastered grade, working grade, report cards, gate passes, track state, and mastery state.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "ISO 8601 calendar date.",
"relationship": "Controls point-in-time reads for effective-dated Results rows; it is a filter date, not a relationship.",
"allowedValues": [],
"example": "2026-06-03",
"invalidWhen": "Invalid when it is not an ISO calendar date or when a consumer expects current-only shortcuts instead of the point-in-time contract.",
"edgeCases": "Rows with begin_date NULL are excluded for every asOfDate even if end_date is null.",
"provenance": {
"label": "Point-in-time parameter",
"changeType": "RESTRICT",
"basis": "Current and historical reads use the same asOfDate shape.",
"upstream": "Cross-cutting rule 2",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
},
{
"id": "ritd-015-report-card-gates",
"title": "Report Cards And Gate Passes Are Durable Results",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-015-report-card-gates"
}
]
},
"upstreamSource": "Cross-cutting rule 2",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Current and historical reads use the same asOfDate shape.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "canonicalTermId",
"anchor": "field-api-parameters-canonicaltermid",
"type": "TEXT",
"nullability": "Optional filter.",
"key": "Not a key",
"meaning": "Typed term id used instead of parsing NWEA TermName.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Text within documented constraints.",
"relationship": "Filters by the canonical academic term resolved from People & Orgs and NWEA TermName at write time.",
"allowedValues": [],
"example": "term_2025_26_spring",
"invalidWhen": "Invalid when it is not a known tenant term or when a consumer supplies a display string such as Spring 2025-2026.",
"edgeCases": "Term season and school_year are typed row fields where reports need them; clients do not parse canonicalTermId.",
"provenance": {
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
},
"upstreamSource": "OneRoster academicSession and NWEA TermName",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "normsSet",
"anchor": "field-api-parameters-normsset",
"type": "TEXT enum",
"nullability": "Required on norm-sensitive report views.",
"key": "Not a key",
"meaning": "Selects 2020 or 2025 NWEA norms. Changing this parameter regenerates a report under another norms set.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Selects the NWEA norms set used by normed MAP reads and report views.",
"allowedValues": [
{
"value": "2020",
"meaning": "Use NWEA 2020 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2020 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2020 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "2025",
"meaning": "Use NWEA 2025 norms for achievement and growth comparisons.",
"useWhen": "Use NWEA 2025 norms for achievement and growth comparisons.",
"invalidWhen": "Invalid when 2025 does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "2025",
"invalidWhen": "Invalid when the value is not 2020 or 2025, or when a request tries to mix norms sets in one row.",
"edgeCases": "A report is regenerated under another norms set by changing this one parameter; the skill pack carries no norms table.",
"provenance": {
"label": "Norms discipline",
"changeType": "RESTRICT",
"basis": "Every normed MAP output carries exactly one norms_set.",
"upstream": "NWEA NormsReferenceData plus Alpha restriction",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
}
]
},
"upstreamSource": "NWEA NormsReferenceData plus Alpha restriction",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Every normed MAP output carries exactly one norms_set.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "growthWindow",
"anchor": "field-api-parameters-growthwindow",
"type": "TEXT enum",
"nullability": "Required on growth-window reads when not implied by term pair.",
"key": "Not a key",
"meaning": "Typed growth window. Clients never switch over NWEA growth-column names.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Selects one typed growth-window row instead of positional NWEA growth columns.",
"allowedValues": [
{
"value": "fall_to_fall",
"meaning": "Growth measured from Fall to next Fall.",
"useWhen": "Growth measured from Fall to next Fall.",
"invalidWhen": "Invalid when fall_to_fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_winter",
"meaning": "Growth measured from Fall to Winter.",
"useWhen": "Growth measured from Fall to Winter.",
"invalidWhen": "Invalid when fall_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "fall_to_spring",
"meaning": "Growth measured from Fall to Spring.",
"useWhen": "Growth measured from Fall to Spring.",
"invalidWhen": "Invalid when fall_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_winter",
"meaning": "Growth measured from Winter to next Winter.",
"useWhen": "Growth measured from Winter to next Winter.",
"invalidWhen": "Invalid when winter_to_winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter_to_spring",
"meaning": "Growth measured from Winter to Spring.",
"useWhen": "Growth measured from Winter to Spring.",
"invalidWhen": "Invalid when winter_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring_to_spring",
"meaning": "Growth measured from Spring to next Spring.",
"useWhen": "Growth measured from Spring to next Spring.",
"invalidWhen": "Invalid when spring_to_spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "fall_to_spring",
"invalidWhen": "Invalid when the value is not a documented growth window or when a client chooses columns such as FallToSpringProjectedGrowth directly.",
"edgeCases": "When an endpoint can infer a report window, the response still returns the resolved growth_window field if the row's key depends on it.",
"provenance": {
"label": "Growth X",
"changeType": "EXTEND",
"basis": "Growth X and 2X target are first-class stored Results fields.",
"upstream": "NWEA observed/projected growth plus Alpha policy",
"itds": [
{
"id": "ritd-009-growth-x-target",
"title": "Growth X And 2X Target Are First-Class Result Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
}
]
},
"upstreamSource": "NWEA observed/projected growth plus Alpha policy",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Growth X and 2X target are first-class stored Results fields.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "gradeLevel",
"anchor": "field-api-parameters-gradelevel",
"type": "NUMERIC(4,1)",
"nullability": "Required on percentile/RIT translation reads and grade-level progress reads; optional on course-progress reads.",
"key": "Not a key",
"meaning": "Typed grade level used for percentile/RIT translation or for Results grade-level progress/pacing reads. It is never inferred from MAP/RIT/R90 grade-band percent.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Decimal number within documented constraints.",
"relationship": "Part of the percentile/RIT translation key for MAP/norm calculators and part of the Results grade-level progress key for actual course-work progress.",
"allowedValues": [],
"example": "7.0",
"invalidWhen": "Invalid when missing on translation or grade-level-progress reads, outside the supported grade range, or inferred by a client from MAP/RIT/R90 grade-band percent or a display string.",
"edgeCases": "GOALS may ask for a future target grade in translation calls; actual progress calls use the student's Results/Curriculum grade-level state and return unknown rather than inferring from RIT.",
"provenance": {
"label": "Student progress read",
"changeType": "EXTEND",
"basis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"upstream": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"itds": [
{
"id": "ritd-036-course-grade-progress",
"title": "Course And Grade Progress Are Results Reads",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-036-course-grade-progress"
}
]
},
"upstreamSource": "Derived Results read over Analytics/Curriculum/Events/People & Orgs source references",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Course and grade-level progress are student-facing Results answers over Analytics evidence, Curriculum structure, Events progress evidence, and People & Orgs calendar/enrollment context.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "termSeason",
"anchor": "field-api-parameters-termseason",
"type": "TEXT enum",
"nullability": "Required on percentile/RIT translation reads.",
"key": "Not a key",
"meaning": "MAP season used for percentile <-> RIT translation; clients do not parse this from term strings.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Part of the percentile/RIT translation key; it is a governed season value, not parsed from NWEA TermName by consumers.",
"allowedValues": [
{
"value": "fall",
"meaning": "Fall MAP season.",
"useWhen": "Fall MAP season.",
"invalidWhen": "Invalid when fall does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "winter",
"meaning": "Winter MAP season.",
"useWhen": "Winter MAP season.",
"invalidWhen": "Invalid when winter does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "spring",
"meaning": "Spring MAP season.",
"useWhen": "Spring MAP season.",
"invalidWhen": "Invalid when spring does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "summer",
"meaning": "Summer MAP season.",
"useWhen": "Summer MAP season.",
"invalidWhen": "Invalid when summer does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "spring",
"invalidWhen": "Invalid when not one of fall, winter, spring, or summer.",
"edgeCases": "canonicalTermId can imply a season on some report reads, but translation endpoints still expose the resolved termSeason in the answer.",
"provenance": {
"label": "Typed term",
"changeType": "RESTRICT",
"basis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"upstream": "OneRoster academicSession and NWEA TermName",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
},
"upstreamSource": "OneRoster academicSession and NWEA TermName",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Term is a typed canonical id plus season and school_year, never read-time parsing.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "translationDirection",
"anchor": "field-api-parameters-translationdirection",
"type": "TEXT enum",
"nullability": "Required on percentile/RIT translation reads.",
"key": "Not a key",
"meaning": "Chooses percentile_to_rit or rit_to_percentile so one endpoint can serve both GOALS conversions.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Chooses which side of alpha.map_percentile_translation is input and which side is output.",
"allowedValues": [
{
"value": "percentile_to_rit",
"meaning": "Input is a percentile; the surface returns the corresponding RIT under the selected norms set.",
"useWhen": "Input is a percentile; the surface returns the corresponding RIT under the selected norms set.",
"invalidWhen": "Invalid when percentile_to_rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "rit_to_percentile",
"meaning": "Input is a RIT score; the surface returns the corresponding percentile under the selected norms set.",
"useWhen": "Input is a RIT score; the surface returns the corresponding percentile under the selected norms set.",
"invalidWhen": "Invalid when rit_to_percentile does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "percentile_to_rit",
"invalidWhen": "Invalid when not percentile_to_rit or rit_to_percentile, or when the request supplies the wrong input field for the direction.",
"edgeCases": "Percentile 99 is a ceiling; above-ceiling growth is returned by alpha.map_99_level, not by inventing percentile 100+.",
"provenance": {
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
},
"upstreamSource": "NWEA published norms plus Alpha calculator output",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "inputPercentile",
"anchor": "field-api-parameters-inputpercentile",
"type": "INTEGER",
"nullability": "Required only when translationDirection=percentile_to_rit.",
"key": "Not a key",
"meaning": "Percentile to translate to RIT using the surface norms calculator.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Integer within documented constraints.",
"relationship": "Input value for percentile_to_rit translation; it is not stored as an app-local norms lookup.",
"allowedValues": [],
"example": "99",
"invalidWhen": "Invalid when omitted for percentile_to_rit, present for rit_to_percentile, or outside 1 through 99.",
"edgeCases": "GOALS target-percentile requests call the surface with this field and use output_rit; no norms table ships with the app.",
"provenance": {
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
},
"upstreamSource": "NWEA published norms plus Alpha calculator output",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "inputRit",
"anchor": "field-api-parameters-inputrit",
"type": "INTEGER",
"nullability": "Required only when translationDirection=rit_to_percentile.",
"key": "Not a key",
"meaning": "RIT score to translate to percentile using the surface norms calculator.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Integer within documented constraints.",
"relationship": "Input value for rit_to_percentile translation.",
"allowedValues": [],
"example": "252",
"invalidWhen": "Invalid when omitted for rit_to_percentile, present for percentile_to_rit, or outside 100 through 350.",
"edgeCases": "RIT values above the percentile ceiling can still translate to percentile 99; alpha.map_99_level carries the additional signal.",
"provenance": {
"label": "Percentile/RIT translation",
"changeType": "EXTEND",
"basis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"upstream": "NWEA published norms plus Alpha calculator output",
"itds": [
{
"id": "ritd-010-norms-discipline",
"title": "Norms And Growth Windows Are Typed Inputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-010-norms-discipline"
},
{
"id": "ritd-011-rit-effective-grade",
"title": "RIT50, RIT90, Effective Grade, Minimum RIT, And Predicted RIT Are Surface Outputs",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-011-rit-effective-grade"
}
]
},
"upstreamSource": "NWEA published norms plus Alpha calculator output",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Percentile-to-RIT and RIT-to-percentile translation is a surface output using NWEA-published norms; apps never ship norms tables.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "groupDimension",
"anchor": "field-api-parameters-groupdimension",
"type": "TEXT enum",
"nullability": "Required on group Growth X report reads.",
"key": "Not a key",
"meaning": "Cohort dimension used by alpha.report_group_growth_x.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Selects the cohort dimension for alpha.report_group_growth_x.",
"allowedValues": [
{
"value": "school_level",
"meaning": "Group by the locked WL/LL/L1/L2/MS/HS school-level tag from People & Orgs.",
"useWhen": "Group by the locked WL/LL/L1/L2/MS/HS school-level tag from People & Orgs.",
"invalidWhen": "Invalid when school_level does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "tenure_bucket",
"meaning": "Group by the locked tenure bucket computed by the surface from admission_date and alpha.policy.tenure_buckets.",
"useWhen": "Group by the locked tenure bucket computed by the surface from admission_date and alpha.policy.tenure_buckets.",
"invalidWhen": "Invalid when tenure_bucket does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "brand",
"meaning": "Group by the locked brand tag at the NWEA-account boundary.",
"useWhen": "Group by the locked brand tag at the NWEA-account boundary.",
"invalidWhen": "Invalid when brand does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "modality",
"meaning": "Group by physical or virtual modality at the NWEA-account boundary.",
"useWhen": "Group by physical or virtual modality at the NWEA-account boundary.",
"invalidWhen": "Invalid when modality does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "school",
"meaning": "Group by the enrolled school sourcedId through People & Orgs.",
"useWhen": "Group by the enrolled school sourcedId through People & Orgs.",
"invalidWhen": "Invalid when school does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "cohort",
"meaning": "Group by an authorized named cohort returned by People & Orgs.",
"useWhen": "Group by an authorized named cohort returned by People & Orgs.",
"invalidWhen": "Invalid when cohort does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "school_level",
"invalidWhen": "Invalid when the dimension is not documented or the caller tries to group by a free-text label not returned by People & Orgs/policy.",
"edgeCases": "school_level and tenure_bucket are locked registries; brand and modality follow the NWEA account boundary.",
"provenance": {
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
},
"upstreamSource": "Alpha report view extension",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Report outputs are surface-owned so skill packs carry no report logic.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "groupKey",
"anchor": "field-api-parameters-groupkey",
"type": "TEXT",
"nullability": "Required on group Growth X report reads.",
"key": "Not a key",
"meaning": "Value of the selected groupDimension, such as MS for school_level or 1-2_years for tenure_bucket.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Text within documented constraints.",
"relationship": "Value of groupDimension for alpha.report_group_growth_x.",
"allowedValues": [],
"example": "MS",
"invalidWhen": "Invalid when groupDimension=school_level and groupKey is not WL, LL, L1, L2, MS, or HS, or when groupDimension=tenure_bucket and groupKey is not an active policy bucket.",
"edgeCases": "The surface computes group membership; consumers do not parse school names or calculate tenure bands.",
"provenance": {
"label": "People & Orgs alias",
"changeType": "RENAME",
"basis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"upstream": "OneRoster user plus NWEA StudentID source evidence",
"itds": [
{
"id": "ritd-006-map-identity-cohort",
"title": "MAP Scores Use TimeBack Student Identity And Cohort Fields",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
},
"upstreamSource": "OneRoster user plus NWEA StudentID source evidence",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "TimeBack student identity replaces source-specific student identifiers in public Alpha views.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "sittingScope",
"anchor": "field-api-parameters-sittingscope",
"type": "TEXT enum",
"nullability": "Optional; defaults to test_of_record.",
"key": "Not a key",
"meaning": "Controls whether MAP reads return the selected test of record or all sittings. On alpha.map_sitting, all requires ordinary Results read authority plus the exact results:audit scope and returns the audit-only source_evidence, deleted_at, and delete_reason fields.",
"constraints": [
"Must appear at most once and use exactly test_of_record or all.",
"all on alpha.map_sitting requires ordinary Results read authority plus the exact results:audit scope; roles and results:* do not substitute for results:audit.",
"Audit authority never bypasses tenant or student visibility.",
"Invalid values return typed RFC 7807 problems before repository reads."
],
"range": "One documented enum value.",
"relationship": "Chooses the MAP sitting scope for reads: current test_of_record or authorized all-sittings audit.",
"allowedValues": [
{
"value": "test_of_record",
"meaning": "Return the selected highest-RIT current row only.",
"useWhen": "Return the selected highest-RIT current row only.",
"invalidWhen": "Invalid when test_of_record does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "all",
"meaning": "Return audit sittings including retakes and soft-deleted rows when the token has ordinary Results read authority plus the exact results:audit scope.",
"useWhen": "Use only with the exact results:audit scope when retakes or soft-delete evidence is required.",
"invalidWhen": "Invalid when all does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "test_of_record",
"invalidWhen": "Invalid when repeated, outside the two exact enum values, or when all is requested on alpha.map_sitting without ordinary read authority and the exact results:audit scope.",
"edgeCases": "test_of_record applies highest-RIT selection and omits source_evidence/deleted_at/delete_reason; all includes those three bounded audit fields without widening tenant or student visibility.",
"provenance": {
"label": "MAP audit view",
"changeType": "RENAME + RESTRICT",
"basis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"upstream": "nweamap.raw_assessment_results",
"itds": [
{
"id": "ritd-007-map-test-of-record",
"title": "MAP Test Of Record Is The Results Default",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"id": "ritd-028-axis-privacy-retention",
"title": "API Axis: Privacy And Retention",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-028-axis-privacy-retention"
}
]
},
"upstreamSource": "nweamap.raw_assessment_results",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "All-sittings audit view exposes retakes and soft-deleted rows only when requested.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "courseId",
"anchor": "field-api-parameters-courseid",
"type": "TEXT",
"nullability": "Required on course-transcript detail routes; optional filter on transcript lists.",
"key": "Not a key",
"meaning": "Platform3 course sourcedId used for Ed-Fi course transcript answers. It resolves through OneRoster/People & Orgs and never through a local Results course table.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Text within documented constraints.",
"relationship": "Filters Ed-Fi transcript views through platform3 course sourcedIds resolved from the approved OneRoster/People & Orgs boundary.",
"allowedValues": [],
"example": "course_algebra_1",
"invalidWhen": "Invalid when the id belongs to another tenant, cannot be joined to a platform3 course sourcedId, or names a local Ed-Fi-only course key that bypasses the roster boundary.",
"edgeCases": "Transferred-course rows may include external institution text, but the public course filter still uses course_id when a platform3 course exists.",
"provenance": {
"label": "Ed-Fi roster reference",
"changeType": "RENAME + RESTRICT",
"basis": "Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.",
"upstream": "edfi.canonical_record references plus OneRoster sourcedIds",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-001-results-boundary-alias-map",
"title": "Results Boundary And Alias Map",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
}
]
},
"upstreamSource": "edfi.canonical_record references plus OneRoster sourcedIds",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Ed-Fi student, school, course, class, section, and enrollment references resolve through platform3 sourcedIds.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "includeSourceEvidence",
"anchor": "field-api-parameters-includesourceevidence",
"type": "BOOLEAN",
"nullability": "Optional; defaults to false.",
"key": "Not a key",
"meaning": "When true with ordinary Results read authority plus the exact results:audit scope, transcript endpoints add only this audit projection: academic_record_view adds term_descriptor, source_canonical_record_id, canonical_state, deleted_at; course_transcript_view adds source_canonical_record_id, canonical_state, deleted_at; course_grade_view adds gradebook_entry_id, source_canonical_record_id, canonical_state, deleted_at; transcript_result_view adds source_record_id and source_evidence. source_evidence is limited to resource, canonical_record_id, and grade_canonical_record_id string-or-null keys. Raw payload blobs and secrets are never returned.",
"constraints": [
"Must appear at most once and use exact lowercase true or false.",
"true requires ordinary Results read authority plus the exact results:audit scope; roles and results:* do not substitute for results:audit.",
"Audit authority never bypasses tenant or student visibility.",
"Invalid values and unauthorized true requests return typed RFC 7807 problems before repository reads."
],
"range": "true or false.",
"relationship": "Controls the bounded response projection only; it does not change storage, source precedence, tenant scope, or student visibility.",
"allowedValues": [
{
"value": "false",
"meaning": "Omit every documented audit-only field.",
"useWhen": "Use for ordinary transcript reads; omission of the parameter is equivalent.",
"invalidWhen": "Invalid when repeated or not exact lowercase false."
},
{
"value": "true",
"meaning": "Include the bounded audit-only projection.",
"useWhen": "Use only with ordinary Results read authority plus the exact results:audit scope.",
"invalidWhen": "Invalid when the token lacks ordinary read authority or the exact results:audit scope, or the value is repeated."
}
],
"example": "false",
"invalidWhen": "Invalid when repeated, not exact lowercase true/false, true without ordinary read authority and the exact results:audit scope, or when a consumer expects raw payload_json rather than the typed projection.",
"edgeCases": "Absent and false have the same evidence-free shape. results:* and roles do not substitute for results:audit. results:audit does not substitute for ordinary read authority or bypass tenant/student visibility, and the ordinary demo token is not granted it.",
"provenance": {
"label": "Ed-Fi academic record view",
"changeType": "RENAME + RESTRICT",
"basis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"upstream": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"itds": [
{
"id": "ritd-031-edfi-academic-record-transcript",
"title": "Ed-Fi Academic Record And Transcript Are Results Views",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
},
"upstreamSource": "edfi.canonical_record payload_json plus edfi.descriptor_code",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Student Academic Record transcript facts are Results views over edfi.canonical_record, not Alpha copies.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "metricKind",
"anchor": "field-api-parameters-metrickind",
"type": "TEXT enum",
"nullability": "Optional filter on closed-loop reconciliation.",
"key": "Not a key",
"meaning": "Typed reconciliation metric. Use this instead of separate report-specific endpoints for RIT, Growth X, HMG, KC state, or minutes cutover checks.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Filters alpha.report_closed_loop_reconciliation by the documented metric grain.",
"allowedValues": [
{
"value": "rit",
"meaning": "RIT per student, subject, and term.",
"useWhen": "RIT per student, subject, and term.",
"invalidWhen": "Invalid when rit does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "growth_x",
"meaning": "Growth X per student, subject, term, growth window, and norms set.",
"useWhen": "Growth X per student, subject, term, growth window, and norms set.",
"invalidWhen": "Invalid when growth_x does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "highest_mastered_grade",
"meaning": "Highest mastered grade per student, subject, and as-of date.",
"useWhen": "Highest mastered grade per student, subject, and as-of date.",
"invalidWhen": "Invalid when highest_mastered_grade does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "student_kc_state",
"meaning": "Four-state KC state per student and KC.",
"useWhen": "Four-state KC state per student and KC.",
"invalidWhen": "Invalid when student_kc_state does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "minutes",
"meaning": "Minutes per student and activity date, sourced from Events but reconciled in the report row.",
"useWhen": "Minutes per student and activity date, sourced from Events but reconciled in the report row.",
"invalidWhen": "Invalid when minutes does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "growth_x",
"invalidWhen": "Invalid when the value is not one of rit, growth_x, highest_mastered_grade, student_kc_state, or minutes, or when a caller sends a display label instead of the typed metric id.",
"edgeCases": "For one-student reconciliation, combine metricKind with studentId and the metric's typed grain fields. The surface returns rows or a typed Problem; clients do not branch into separate local reconciliation code.",
"provenance": {
"label": "Report-ready view",
"changeType": "EXTEND",
"basis": "Report outputs are surface-owned so skill packs carry no report logic.",
"upstream": "Alpha report view extension",
"itds": [
{
"id": "ritd-017-report-ready-views-skill-pack-gate",
"title": "Report-Ready Views Replace Skill-Pack Logic",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-017-report-ready-views-skill-pack-gate"
},
{
"id": "ritd-030-axis-report-oracle",
"title": "API Axis: Report Oracle And Golden Cells",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-030-axis-report-oracle"
}
]
},
"upstreamSource": "Alpha report view extension",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Report outputs are surface-owned so skill packs carry no report logic.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "sourceShape",
"anchor": "field-api-parameters-sourceshape",
"type": "TEXT enum",
"nullability": "Required in raw import request bodies.",
"key": "Not a key",
"meaning": "Names the producer row shape carried in records[]. It tells Results which server-side adapter to run; it is not a request to pre-normalize rows in the caller.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented enum value.",
"relationship": "Selects the named raw-ingest adapter for records[]; the adapter writes source evidence and canonical rows server-side.",
"allowedValues": [
{
"value": "timeback_assessment_result",
"meaning": "Raw TimeBack Production assessment/result row. The caller sends the source row as-is; Results resolves student, subject, term, content/test family, score evidence, KC evidence, mastery, XP, and report rows server-side.",
"useWhen": "Raw TimeBack Production assessment/result row. The caller sends the source row as-is; Results resolves student, subject, term, content/test family, score evidence, KC evidence, mastery, XP, and report rows server-side.",
"invalidWhen": "Invalid when timeback_assessment_result does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "nwea_map_assessment_result",
"meaning": "Raw NWEA MAP Growth CDF AssessmentResults row. The caller sends NWEA field names such as StudentID, TermName, Subject, TestID, TestRITScore, NormsReferenceData, and GoalN fields; Results routes through the NWEAMap base contract and materializes public MAP reads server-side.",
"useWhen": "Raw NWEA MAP Growth CDF AssessmentResults row. The caller sends NWEA field names such as StudentID, TermName, Subject, TestID, TestRITScore, NormsReferenceData, and GoalN fields; Results routes through the NWEAMap base contract and materializes public MAP reads server-side.",
"invalidWhen": "Invalid when nwea_map_assessment_result does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
},
{
"value": "results_next_task_decision",
"meaning": "Optional production next-task cache seed. The caller sends an already platform-produced exact-date decision with task_type, task_ref_type, task_ref_id, reason, policy_version, and source_state_refs; Results materializes alpha.next_task so an exact cache hit can be rendered without recomputation. Missing rows are computed by the next-task read and never require an operator seed per date.",
"useWhen": "Use for migration or cutover cache seeding of an already governed exact-date decision; do not use it as the only way new dates receive a decision.",
"invalidWhen": "Invalid when results_next_task_decision does not match the documented row state or configured policy.",
"provenance": {
"label": "Alpha restricted value",
"basis": "Results Alpha data dictionary governed enum.",
"itd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture"
}
}
],
"example": "results_next_task_decision",
"invalidWhen": "Invalid when omitted from POST /alpha/results/v1/imports, when the value is not documented, or when records[] already contains only pre-normalized canonical Results rows instead of the source-shaped producer rows.",
"edgeCases": "A single import batch uses one sourceShape. Use separate import calls for TimeBack assessment rows, NWEA MAP CDF rows, and Results next-task decision rows so each adapter owns normalization, dedupe, materialization, and cache/readback semantics.",
"provenance": {
"label": "Source adapter extension",
"changeType": "EXTEND",
"basis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"upstream": "Alpha-only; no upstream",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-000-alpha-storage-model",
"title": "Alpha Results Uses Views Plus Extension Tables",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-000-alpha-storage-model"
}
]
},
"upstreamSource": "Alpha-only; no upstream",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "The adapter registry is a Results-owned extension with no OneRoster, NWEA, or Ed-Fi source column.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "modifiedSince",
"anchor": "field-api-parameters-modifiedsince",
"type": "TIMESTAMPTZ",
"nullability": "Optional polling filter.",
"key": "Not a key",
"meaning": "Returns rows changed after this UTC timestamp.",
"constraints": [
"Validated at the API boundary.",
"Invalid values return typed RFC 7807 problems."
],
"range": "UTC timestamp.",
"relationship": "Poll filter over modified_at fields on Results rows; it does not create a source relationship.",
"allowedValues": [],
"example": "2026-06-03T18:55:00Z",
"invalidWhen": "Invalid when it is not a UTC timestamp or when a consumer treats it as an exclusive cursor without handling equal-timestamp rows.",
"edgeCases": "Use a stable cursor with modified_at plus the table key when polling high-volume report views.",
"provenance": {
"label": "Query parameter",
"changeType": "EXTEND",
"basis": "Poll-only eventing uses modifiedSince.",
"upstream": "Results API axis",
"itds": [
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
},
"upstreamSource": "Results API axis",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Poll-only eventing uses modifiedSince.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "policyName",
"anchor": "field-api-parameters-policyname",
"type": "TEXT enum",
"nullability": "Optional filter.",
"key": "Filter key",
"meaning": "Policy key to read, such as alpha.policy.xp_award_formula.",
"constraints": [
"Must be one documented alpha.policy.* value when present.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented policy_name value.",
"relationship": "Filters alpha.policy_config.policy_name.",
"allowedValues": [],
"example": "alpha.policy.xp_award_formula",
"invalidWhen": "Invalid when omitted by a consumer that needs a specific policy or when clients infer policy by scanning unrelated rows.",
"edgeCases": "Use configVersion with policyName to inspect a superseded historical policy; use asOfDate to resolve the active point-in-time row.",
"provenance": {
"label": "Policy config parameter",
"changeType": "RESTRICT",
"basis": "Policy reads are named by alpha.policy.* key.",
"upstream": "alpha.policy_config.policy_name",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
},
"upstreamSource": "alpha.policy_config.policy_name",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Policy reads are named by alpha.policy.* key.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "configVersion",
"anchor": "field-api-parameters-configversion",
"type": "TEXT",
"nullability": "Optional filter.",
"key": "Filter key",
"meaning": "Stable policy config version to read with policyName.",
"constraints": [
"Use ISO date or semantic version.",
"Invalid values return typed RFC 7807 problems."
],
"range": "Text within documented constraints.",
"relationship": "Filters alpha.policy_config.config_version.",
"allowedValues": [],
"example": "2026-07-27.issue-1500",
"invalidWhen": "Invalid when a client hardcodes a version but ignores status or asOfDate for point-in-time reads.",
"edgeCases": "Use configVersion for audit/debug reads; ordinary current reads should use policyName plus asOfDate/status.",
"provenance": {
"label": "Policy config parameter",
"changeType": "RESTRICT",
"basis": "Policy reads are versioned for reproducibility.",
"upstream": "alpha.policy_config.config_version",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
},
"upstreamSource": "alpha.policy_config.config_version",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Policy reads are versioned for reproducibility.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "status",
"anchor": "field-api-parameters-status",
"type": "TEXT enum",
"nullability": "Optional filter.",
"key": "Filter key",
"meaning": "Policy lifecycle status filter.",
"constraints": [
"Allowed values: draft, active, superseded, deprecated.",
"Invalid values return typed RFC 7807 problems."
],
"range": "One documented status value.",
"relationship": "Filters alpha.policy_config.status.",
"allowedValues": [
{
"value": "draft",
"meaning": "Config is being prepared and is not used by surface computations."
},
{
"value": "active",
"meaning": "Config is the current value read by the surface for its effective window."
},
{
"value": "superseded",
"meaning": "Config has been replaced but remains available for historical answers."
},
{
"value": "deprecated",
"meaning": "Config should not be used for new calculations and remains only for audit."
}
],
"example": "active",
"invalidWhen": "Invalid when a current computation reads draft, superseded, or deprecated policy rows without an audit reason.",
"edgeCases": "Historical replay can read superseded rows by explicit configVersion.",
"provenance": {
"label": "Policy config parameter",
"changeType": "RESTRICT",
"basis": "Policy config lifecycle is explicit.",
"upstream": "alpha.policy_config.status",
"itds": [
{
"id": "ritd-005-policy-config",
"title": "Policy Numbers Are Results Surface Config",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-005-policy-config"
},
{
"id": "ritd-020-axis-query-model",
"title": "API Axis: Query Model",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-020-axis-query-model"
}
]
},
"upstreamSource": "alpha.policy_config.status",
"privacyTag": "PII: No",
"indexPolicy": "Index only when this field appears in the table key, documented unique constraint, or listed query model.",
"sourceBasis": "Policy config lifecycle is explicit.",
"storageBehavior": "Request parameter; no database storage."
},
{
"name": "qtiAttemptId",
"anchor": "field-api-parameters-qtiattemptid",
"type": "TEXT",
"nullability": "Optional exact filter on GET /alpha/results/v1/result-records.",
"key": "Exact tenant-scoped lookup key",
"meaning": "Stable producer QTI attempt id. Results resolves it to zero or one settled result_record inside the authenticated tenant.",
"constraints": [
"1 to 255 printable characters.",
"Exact match only; no prefix, fuzzy, or producer_result_id fallback."
],
"range": "Text within documented constraints.",
"relationship": "Maps to alpha.result_record.qti_attempt_id under the JWT tenant_id.",
"allowedValues": [],
"example": "qti-attempt-alex-001",
"invalidWhen": "Invalid when blank, contains control characters, exceeds 255 characters, or is used without an authenticated tenant.",
"edgeCases": "An unknown or unauthorized attempt returns an empty exact collection and never reveals cross-tenant existence.",
"provenance": {
"label": "Canonical QTI result reference",
"changeType": "EXTEND",
"basis": "Results preserves typed QTI/administration/Content identities required to dereference one settled attempt without consumer correlation state.",
"upstream": "QTI attempt and administration producer envelope",
"itds": [
{
"id": "ritd-003-canonical-result-shape",
"title": "Canonical Result Shape For Self-Paced And External Outcomes",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-003-canonical-result-shape"
},
{
"id": "ritd-002-gradebook-result-boundary",
"title": "Gradebook Items, Results, And Score Scales Stay Distinct",
"href": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
}
]
},
"upstreamSource": "QTI attempt.attempt_id",
"privacyTag": "PII: No",
"indexPolicy": "Backed by the unique partial (tenant_id, qti_attempt_id) index.",
"sourceBasis": "Typed producer identity is preserved at the Results adapter boundary; Results does not copy QTI or Content-owned semantics.",
"storageBehavior": "Request parameter; exact match against Results extension storage."
}
]cutRegisters
{
"nweaPublicHandling": [
{
"sourceField": "TermName",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "DistrictName",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "District_StateID",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "SchoolName",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "School_StateID",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "StudentID",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "Student_StateID",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "Subject",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "Course",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "GrowthMeasureYN",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "NormsReferenceData",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "WISelectedAYFall",
"changeType": "CUT",
"handling": "Cut from public Alpha fields; remains available through NWEAMap 1EdTech audit evidence and authorized map_sitting.source_evidence.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "WISelectedAYWinter",
"changeType": "CUT",
"handling": "Cut from public Alpha fields; remains available through NWEAMap 1EdTech audit evidence and authorized map_sitting.source_evidence.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "WISelectedAYSpring",
"changeType": "CUT",
"handling": "Cut from public Alpha fields; remains available through NWEAMap 1EdTech audit evidence and authorized map_sitting.source_evidence.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "WIPreviousAYFall",
"changeType": "CUT",
"handling": "Cut from public Alpha fields; remains available through NWEAMap 1EdTech audit evidence and authorized map_sitting.source_evidence.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "WIPreviousAYWinter",
"changeType": "CUT",
"handling": "Cut from public Alpha fields; remains available through NWEAMap 1EdTech audit evidence and authorized map_sitting.source_evidence.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "WIPreviousAYSpring",
"changeType": "CUT",
"handling": "Cut from public Alpha fields; remains available through NWEAMap 1EdTech audit evidence and authorized map_sitting.source_evidence.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "TestType",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "TestName",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "TestID",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "TestStartDate",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "TestStartTime",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "TestDurationMinutes",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "TestRITScore",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "TestStandardError",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "TestPercentile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "AchievementQuintile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "PercentCorrect",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-007-map-test-of-record"
},
{
"sourceField": "RapidGuessingPercentage",
"changeType": "CUT",
"handling": "Cut from public Alpha fields; remains available through NWEAMap 1EdTech audit evidence and authorized map_sitting.source_evidence.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "FallToFallProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToFallObservedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToFallObservedGrowthSE",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToFallMetProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToFallConditionalGrowthIndex",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToFallConditionalGrowthPercentile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToFallGrowthQuintile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToWinterProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToWinterObservedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToWinterObservedGrowthSE",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToWinterMetProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToWinterConditionalGrowthIndex",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToWinterConditionalGrowthPercentile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToWinterGrowthQuintile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToSpringProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToSpringObservedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToSpringObservedGrowthSE",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToSpringMetProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToSpringConditionalGrowthIndex",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToSpringConditionalGrowthPercentile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "FallToSpringGrowthQuintile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToWinterProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToWinterObservedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToWinterObservedGrowthSE",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToWinterMetProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToWinterConditionalGrowthIndex",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToWinterConditionalGrowthPercentile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToWinterGrowthQuintile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToSpringProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToSpringObservedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToSpringObservedGrowthSE",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToSpringMetProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToSpringConditionalGrowthIndex",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToSpringConditionalGrowthPercentile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "WinterToSpringGrowthQuintile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "SpringToSpringProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "SpringToSpringObservedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "SpringToSpringObservedGrowthSE",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "SpringToSpringMetProjectedGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "SpringToSpringConditionalGrowthIndex",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "SpringToSpringConditionalGrowthPercentile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "SpringToSpringGrowthQuintile",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "LexileScore",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "LexileMin",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "LexileMax",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "QuantileScore",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "QuantileMin",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "QuantileMax",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "Goal1Name",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal1RitScore",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal1StdErr",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal1Range",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal1Adjective",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal2Name",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal2RitScore",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal2StdErr",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal2Range",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal2Adjective",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal3Name",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal3RitScore",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal3StdErr",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal3Range",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal3Adjective",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal4Name",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal4RitScore",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal4StdErr",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal4Range",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal4Adjective",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal5Name",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal5RitScore",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal5StdErr",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal5Range",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal5Adjective",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal6Name",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal6RitScore",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal6StdErr",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal6Range",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal6Adjective",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal7Name",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal7RitScore",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal7StdErr",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal7Range",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal7Adjective",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal8Name",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal8RitScore",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal8StdErr",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal8Range",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "Goal8Adjective",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-008-map-goal-strands"
},
{
"sourceField": "TypicalFallToFallGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "TypicalFallToWinterGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "TypicalFallToSpringGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "TypicalWinterToWinterGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "TypicalWinterToSpringGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "TypicalSpringToSpringGrowth",
"changeType": "RENAME + RESTRICT",
"handling": "Renamed, restricted, or folded into typed Results fields; public consumers use the Alpha field, not the raw NWEA column.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-009-growth-x-target"
},
{
"sourceField": "ProjectedProficiencyStudy1",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel1",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyStudy2",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel2",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyStudy3",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel3",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyStudy4",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel4",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyStudy5",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel5",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyStudy6",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel6",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyStudy7",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel7",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyStudy8",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel8",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyStudy9",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel9",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyStudy10",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
},
{
"sourceField": "ProjectedProficiencyLevel10",
"changeType": "CUT",
"handling": "Audit-only in Alpha. The raw value is retained for source traceability but is not a public report field.",
"evidenceLocation": "alpha.map_sitting.source_evidence or NWEAMap 1EdTech raw_assessment_results",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-006-map-identity-cohort"
}
],
"oneRosterHandling": [
{
"sourceTable": "oneroster.line_items",
"sourceField": "tenant_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "uuid",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "import_batch_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "sourced_id",
"alphaHandling": "Renamed to alpha.gradebook_item.gradebook_item_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "status",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "date_last_modified",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "timestamptz",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "title",
"alphaHandling": "Pass-through meaning on alpha.gradebook_item.title.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "description",
"alphaHandling": "Pass-through meaning on alpha.gradebook_item.description.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "assign_date",
"alphaHandling": "Pass-through meaning on alpha.gradebook_item.assign_date.",
"upstreamType": "date",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "due_date",
"alphaHandling": "Pass-through meaning on alpha.gradebook_item.due_date.",
"upstreamType": "date",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "class_sourced_id",
"alphaHandling": "Renamed to alpha.gradebook_item.class_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "category_sourced_id",
"alphaHandling": "Renamed to alpha.gradebook_item.category_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "academic_session_sourced_id",
"alphaHandling": "Renamed to alpha.gradebook_item.academic_session_id and canonical_term_id in reports.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "result_value_min",
"alphaHandling": "Pass-through meaning on alpha.gradebook_item.result_value_min.",
"upstreamType": "double precision",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "result_value_max",
"alphaHandling": "Pass-through meaning on alpha.gradebook_item.result_value_max.",
"upstreamType": "double precision",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.line_items",
"sourceField": "school_sourced_id",
"alphaHandling": "Renamed to alpha.gradebook_item.school_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "tenant_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "uuid",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "import_batch_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "sourced_id",
"alphaHandling": "Renamed to alpha.result_record.source_sourced_id and Alpha result_record_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "status",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "date_last_modified",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "timestamptz",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "line_item_sourced_id",
"alphaHandling": "Renamed to alpha.result_record.gradebook_item_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "student_sourced_id",
"alphaHandling": "Renamed to alpha.result_record.student_id using TimeBack student identity.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "score_status",
"alphaHandling": "Folded into alpha.result_record.outcome_status.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "score",
"alphaHandling": "Pass-through meaning on alpha.result_record.score with score-scale enforcement.",
"upstreamType": "double precision",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "score_date",
"alphaHandling": "Folded into alpha.result_record.occurred_on.",
"upstreamType": "date",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "comment",
"alphaHandling": "Cut from public Alpha result_record; retained as authorized source evidence or report-card narrative only when explicitly published.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "text_score",
"alphaHandling": "Pass-through meaning on alpha.result_record.text_score.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "class_sourced_id",
"alphaHandling": "Read by joining gradebook_item/class; not duplicated as a public result field.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "in_progress",
"alphaHandling": "Folded into outcome_status/workflow evidence; not a separate public field.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "incomplete",
"alphaHandling": "Folded into outcome_status/workflow evidence; not a separate public field.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "late",
"alphaHandling": "Folded into workflow evidence or report policy; not a separate public result field.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.results",
"sourceField": "missing",
"alphaHandling": "Folded into alpha.result_record.outcome_status=missing.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-001-results-boundary-alias-map"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "tenant_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "uuid",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "import_batch_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "sourced_id",
"alphaHandling": "Renamed to alpha.score_scale.score_scale_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "status",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "date_last_modified",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "timestamptz",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "title",
"alphaHandling": "Pass-through meaning on alpha.score_scale.title.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "type",
"alphaHandling": "Restricted to alpha.score_scale.scale_type.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "org_sourced_id",
"alphaHandling": "Folded into alpha.score_scale.scope_kind/scope_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "course_sourced_id",
"alphaHandling": "Folded into alpha.score_scale.scope_kind/scope_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "class_sourced_id",
"alphaHandling": "Folded into alpha.score_scale.scope_kind/scope_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.score_scales",
"sourceField": "score_scale_value",
"alphaHandling": "Parsed into alpha.score_scale.value_map before public reads.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.line_item_score_scales",
"sourceField": "tenant_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "uuid",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.line_item_score_scales",
"sourceField": "import_batch_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.line_item_score_scales",
"sourceField": "sourced_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.line_item_score_scales",
"sourceField": "status",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.line_item_score_scales",
"sourceField": "date_last_modified",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "timestamptz",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.line_item_score_scales",
"sourceField": "title",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.line_item_score_scales",
"sourceField": "line_item_sourced_id",
"alphaHandling": "Folded into alpha.score_scale scope binding for gradebook_item.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.line_item_score_scales",
"sourceField": "score_scale_sourced_id",
"alphaHandling": "Folded into alpha.score_scale effective binding.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.result_score_scales",
"sourceField": "tenant_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "uuid",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.result_score_scales",
"sourceField": "import_batch_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.result_score_scales",
"sourceField": "sourced_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.result_score_scales",
"sourceField": "status",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.result_score_scales",
"sourceField": "date_last_modified",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "timestamptz",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.result_score_scales",
"sourceField": "title",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.result_score_scales",
"sourceField": "result_sourced_id",
"alphaHandling": "Folded into alpha.result_record.effective_score_scale_id selection.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.result_score_scales",
"sourceField": "score_scale_sourced_id",
"alphaHandling": "Folded into alpha.result_record.effective_score_scale_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-002-gradebook-result-boundary"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "tenant_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "uuid",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "import_batch_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "sourced_id",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "status",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "text",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "date_last_modified",
"alphaHandling": "Cut from public Alpha; retained in OneRoster 1EdTech data dictionary and source evidence when authorized.",
"upstreamType": "timestamptz",
"upstreamRequired": "Yes for Delta",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "result_sourced_id",
"alphaHandling": "Renamed to alpha.result_kc_evidence.result_record_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "source",
"alphaHandling": "Restricted to explicit KC source/provenance in alpha.result_kc_evidence.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "learning_objective_id",
"alphaHandling": "Renamed to alpha.result_kc_evidence.kc_id.",
"upstreamType": "text",
"upstreamRequired": "Yes",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "score",
"alphaHandling": "Renamed to alpha.result_kc_evidence.score_percent when numeric and applicable.",
"upstreamType": "double precision",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
},
{
"sourceTable": "oneroster.result_learning_objective_ids",
"sourceField": "text_score",
"alphaHandling": "Retained in source evidence unless a score scale maps it to structured KC evidence.",
"upstreamType": "text",
"upstreamRequired": "No",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-004-student-knowledge-graph"
}
],
"edFiTranscriptHandling": [
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "Student",
"jsonElement": "StudentReference",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Renamed to alpha.academic_record_view.student_id/student_sourced_id through platform3 sourcedId joins.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "EducationOrganization",
"jsonElement": "EducationOrganizationReference",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Renamed to alpha.academic_record_view.school_sourced_id through the People & Orgs org boundary.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "SchoolYear",
"jsonElement": "SchoolYearTypeReference",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Renamed to alpha.academic_record_view.school_year and inherited by transcript answers.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "Term",
"jsonElement": "TermDescriptor",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "Term",
"alphaHandling": "Resolved through edfi.descriptor_code and folded into alpha.academic_record_view.canonical_term_id plus term_descriptor.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "AcademicHonor",
"jsonElement": "AcademicHonors",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Available only as authorized source evidence unless a future Results ITD publishes an honors view.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "ClassRanking",
"jsonElement": "ClassRanking",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Restricted to alpha.academic_record_view.class_rank when present.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "CumulativeAttemptedCredits",
"jsonElement": "CumulativeAttemptedCredits",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.academic_record_view.cumulative_attempted_credits.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "CumulativeEarnedCredits",
"jsonElement": "CumulativeEarnedCredits",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.academic_record_view.cumulative_earned_credits.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "SessionAttemptedCredits",
"jsonElement": "SessionAttemptedCredits",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.academic_record_view.session_attempted_credits.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "SessionEarnedCredits",
"jsonElement": "SessionEarnedCredits",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.academic_record_view.session_earned_credits.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "Diploma",
"jsonElement": "Diplomas",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Cut from public Alpha Results; retained as Ed-Fi source evidence until a graduation-specific ITD ships.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "GradePointAverage",
"jsonElement": "GradePointAverages",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Restricted to alpha.academic_record_view.gpa plus source evidence when multiple GPA components exist.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "ProjectedGraduationDate",
"jsonElement": "ProjectedGraduationDate",
"upstreamType": "DATE",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.academic_record_view.projected_graduation_date.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "Recognition",
"jsonElement": "Recognitions",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Cut from public Alpha Results; retained as Ed-Fi source evidence.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "StudentAcademicRecord",
"sourceField": "ReportCard",
"jsonElement": "ReportCards",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Relationship evidence only; Alpha report_card_entry remains a Results extension object.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "CourseAttemptResult",
"jsonElement": "CourseAttemptResultDescriptor",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "CourseAttemptResult",
"alphaHandling": "Resolved through edfi.descriptor_code as alpha.course_transcript_view.course_attempt_result and alpha.transcript_result_view.course_attempt_result.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "AttemptedCredits",
"jsonElement": "AttemptedCredits",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_transcript_view.attempted_credits and transcript_result_view.attempted_credits.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "EarnedCredits",
"jsonElement": "EarnedCredits",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_transcript_view.earned_credits and transcript_result_view.earned_credits.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "EarnedAdditionalCredits",
"jsonElement": "EarnedAdditionalCredits",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Retained as authorized source evidence unless a future credit-detail ITD publishes it.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "WhenTakenGradeLevel",
"jsonElement": "WhenTakenGradeLevelDescriptor",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "WhenTakenGradeLevel",
"alphaHandling": "Descriptor-resolved source evidence; not a public Results filter unless a future ITD ships it.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "MethodCreditEarned",
"jsonElement": "MethodCreditEarnedDescriptor",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "MethodCreditEarned",
"alphaHandling": "Resolved through edfi.descriptor_code as alpha.course_transcript_view.method_credit_earned.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "FinalLetterGradeEarned",
"jsonElement": "FinalLetterGradeEarned",
"upstreamType": "VARCHAR(20)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_transcript_view.final_letter_grade and transcript_result_view.final_grade.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "FinalNumericGradeEarned",
"jsonElement": "FinalNumericGradeEarned",
"upstreamType": "DECIMAL(9, 2)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_transcript_view.final_numeric_grade and transcript_result_view.final_numeric_grade.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "CourseRepeatCode",
"jsonElement": "CourseRepeatCodeDescriptor",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "CourseRepeatCode",
"alphaHandling": "Resolved through edfi.descriptor_code as alpha.course_transcript_view.course_repeat_code.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "Course",
"jsonElement": "CourseReference",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_transcript_view.course_id through platform3 course sourcedId joins.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "StudentAcademicRecord",
"jsonElement": "StudentAcademicRecordReference",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_transcript_view.academic_record_id relationship.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "Section",
"jsonElement": "Sections",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Source evidence and section joins only; no Results-owned section copy.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "ResponsibleTeacherStaff",
"jsonElement": "ResponsibleTeacherStaffReference",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Cut from public Results; staff belongs in People & Orgs and source evidence.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "CourseProgram",
"jsonElement": "CoursePrograms",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Cut from public Results; program participation belongs in Ed-Fi/People & Orgs views.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "CourseTitle",
"jsonElement": "CourseTitle",
"upstreamType": "VARCHAR(120)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_transcript_view.course_title for display only.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "AlternativeCourseTitle",
"jsonElement": "AlternativeCourseTitle",
"upstreamType": "VARCHAR(120)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Authorized source evidence only.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "ExternalEducationOrganization",
"jsonElement": "ExternalEducationOrganizationReference",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Authorized source evidence only unless transferred-course workflows ship later.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "ExternalEducationOrganizationNameOfInstitution",
"jsonElement": "ExternalEducationOrganizationNameOfInstitution",
"upstreamType": "VARCHAR(75)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Authorized source evidence/display only; not a join key.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "AlternativeCourseIdentificationCode",
"jsonElement": "AlternativeCourseIdentificationCodes",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Authorized source evidence only; course_id remains the public join key.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "AssigningOrganizationIdentificationCode",
"jsonElement": "AssigningOrganizationIdentificationCode",
"upstreamType": "VARCHAR(120)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Authorized source evidence only.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "CourseCatalogURL",
"jsonElement": "CourseCatalogURL",
"upstreamType": "VARCHAR(255)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Cut from public Results; retained in Ed-Fi source evidence.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "CreditCategory",
"jsonElement": "CreditCategories",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "CreditCategories",
"alphaHandling": "Resolved through edfi.descriptor_code as alpha.course_transcript_view.credit_type when used for the answer.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "AcademicSubject",
"jsonElement": "AcademicSubjects",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "AcademicSubjects",
"alphaHandling": "Source evidence only; public subject_id uses the Alpha governed subject registry.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "CourseTranscript",
"sourceField": "PartialCourseTranscriptAwards",
"jsonElement": "PartialCourseTranscriptAwards",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Retained as source evidence unless a future partial-credit ITD publishes a view.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "LetterGradeEarned",
"jsonElement": "LetterGradeEarned",
"upstreamType": "VARCHAR(20)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_grade_view.letter_grade and may feed transcript_result_view.final_grade.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "NumericGradeEarned",
"jsonElement": "NumericGradeEarned",
"upstreamType": "DECIMAL(9, 2)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_grade_view.numeric_grade and may feed transcript_result_view.final_numeric_grade.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "DiagnosticStatement",
"jsonElement": "DiagnosticStatement",
"upstreamType": "VARCHAR(1024)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_grade_view.diagnostic_statement for authorized education-record display only.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "GradeType",
"jsonElement": "GradeTypeDescriptor",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "GradeType",
"alphaHandling": "Resolved through edfi.descriptor_code as alpha.course_grade_view.grade_type.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "PerformanceBaseConversion",
"jsonElement": "PerformanceBaseConversionDescriptor",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "PerformanceBaseConversion",
"alphaHandling": "Authorized source evidence only unless a performance-level ITD publishes it.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "StudentSectionAssociation",
"jsonElement": "StudentSectionAssociationReference",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_grade_view.section_id/student_id through platform3 sourcedId joins.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "GradingPeriod",
"jsonElement": "GradingPeriodReference",
"upstreamType": "object",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_grade_view.grading_period_id.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "LearningStandardGrade",
"jsonElement": "LearningStandardGrades",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Cut from public Results; Curriculum KC evidence remains result_kc_evidence/student_kc_state.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "CurrentGradeIndicator",
"jsonElement": "CurrentGradeIndicator",
"upstreamType": "BOOLEAN",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_grade_view.current_grade_indicator.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "CurrentGradeAsOfDate",
"jsonElement": "CurrentGradeAsOfDate",
"upstreamType": "DATE",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Renamed to alpha.course_grade_view.current_grade_as_of_date.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "Grade",
"sourceField": "GradeEarnedDescription",
"jsonElement": "GradeEarnedDescription",
"upstreamType": "VARCHAR(64)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Authorized source evidence/display only; not used to decide final grade.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "GradebookEntryIdentifier",
"jsonElement": "GradebookEntryIdentifier",
"upstreamType": "VARCHAR(60)",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Source evidence for alpha.course_grade_view.gradebook_entry_id when a Grade references it.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "Namespace",
"jsonElement": "Namespace",
"upstreamType": "VARCHAR(255)",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Source evidence only; not a public Results namespace.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "SourceSectionIdentifier",
"jsonElement": "SourceSectionIdentifier",
"upstreamType": "VARCHAR(255)",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Resolved through platform3 sourcedIds when possible; otherwise source evidence.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "Section",
"jsonElement": "SectionReference",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Relationship evidence only; section belongs in People & Orgs.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "DateAssigned",
"jsonElement": "DateAssigned",
"upstreamType": "DATE",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Cut from public transcript answer; blank assignments belong to gradebook/content boundaries.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "Title",
"jsonElement": "Title",
"upstreamType": "VARCHAR(100)",
"upstreamRequired": "required",
"descriptor": "",
"alphaHandling": "Source evidence only; public gradebook_item.title comes from OneRoster when a gradebook item is needed.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "Description",
"jsonElement": "Description",
"upstreamType": "VARCHAR(1024)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Source evidence only.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "DueDate",
"jsonElement": "DueDate",
"upstreamType": "DATE",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Source evidence only.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "DueTime",
"jsonElement": "DueTime",
"upstreamType": "TIME",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Source evidence only.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "GradebookEntryType",
"jsonElement": "GradebookEntryTypeDescriptor",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "GradebookEntryType",
"alphaHandling": "Descriptor-resolved source evidence only.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "MaxPoints",
"jsonElement": "MaxPoints",
"upstreamType": "DECIMAL(9, 2)",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "Source evidence only; grade math comes from settled Grade/CourseTranscript facts.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "GradingPeriod",
"jsonElement": "GradingPeriodReference",
"upstreamType": "object",
"upstreamRequired": "optional",
"descriptor": "",
"alphaHandling": "May support alpha.course_grade_view.grading_period_id through Grade relationships.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
},
{
"sourceResource": "GradebookEntry",
"sourceField": "LearningStandard",
"jsonElement": "LearningStandards",
"upstreamType": "object",
"upstreamRequired": "optional collection",
"descriptor": "",
"alphaHandling": "Cut from public Results transcript views; KC state lives in alpha.student_kc_state.",
"evidenceLocation": "alpha.* transcript views source_evidence when includeSourceEvidence=true, or Ed-Fi 1EdTech edfi.canonical_record.",
"architectureItd": "https://platform3-andymontgomery-9773s-projects.vercel.app/results/alpha/architecture/#ritd-031-edfi-academic-record-transcript"
}
]
}stats
{
"tableCount": 50,
"fieldCount": 764,
"enumFieldCount": 122,
"nweaRawFieldHandlingCount": 143,
"oneRosterSourceHandlingCount": 69,
"edFiTranscriptSourceHandlingCount": 63,
"subjectSourceValueCount": 159,
"endpointCount": 32
}powerPath100Contract
{
"policy_ref": "alpha.policy.pp100_lesson_mastery.v2",
"goal": "Walk the student from score 0 to exactly 100 as independent initial-mastery evidence for one lesson.",
"evidence": {
"first_response_only": true,
"exact_adaptive_pool_frozen_at_launch": true,
"deterministic_selection_seed": true,
"score_transitions_replay_from_immutable_responses": true,
"assisted_responses_advance_score": false
},
"score_transition": {
"decile": "floor(min(current_score, 99) / 10)",
"independent_correct_delta": "14 - decile",
"incorrect_or_assisted_delta": "-round(0.9 * decile)",
"score_range": "0..100"
},
"adaptive_selection": {
"score_0_39": [
"easy",
"medium",
"hard"
],
"score_40_69": [
"medium",
"hard",
"easy"
],
"score_70_89": [
"hard",
"medium",
"easy"
],
"score_90_99": [
"hard"
],
"unseen_before_repeat": true,
"avoid_immediate_repeat": true,
"hard_rigor_floor": "standardized_test unless the owning blueprint marks a prerequisite lesson"
},
"mastery": {
"predicate": "current_score == 100",
"perfect_walk_response_count": 11,
"gate_pass_at_score": 100,
"retrieval_eligible_at_score": 100
},
"session": {
"response_limit": 30,
"limit_outcome": "resumable remediation pause",
"resume": "same attempt, pool, seed, score, and response history"
},
"historical_v1": {
"policy_ref": "alpha.policy.pp100_lesson_mastery.v1",
"disposition": "immutable replay only; no new gate may bind v1",
"fixed_form_question_count": 10,
"overall_correct_required": 9,
"hard_correct_required": 4,
"early_stop": [
"second overall miss",
"second hard-tier miss"
]
},
"authority": {
"curriculum": "exact gate, v2 policy reference, exact adaptive-bank binding, prerequisite exemption, and remediation route; historical v1 form references remain replay-only",
"content": "exact adaptive pool through immutable bank storage shards and question versions, PP100 blueprint, DOK, KC attribution, rigor evidence, and server-only answer keys; historical v1 forms remain immutable",
"results": "one active frozen walk per student/gate, adaptive next-question selection, immutable first responses and score transitions, score-100 result, and gate pass",
"player": "evidence capture only; never holds an answer key or policy threshold"
},
"exclusions": [
"new gates binding the historical v1 fixed-form policy",
"client grading, scoring, or question selection",
"question shopping or first-response reset through a second active attempt",
"downward fallback at score 90-99 except an explicit prerequisite blueprint",
"PP100 mastery changing HMG or working grade"
]
}