← All topics (review home)

Skill: course-build → write-like-james @ 84b31cb

Grade 3 Science on TimeBack Scroll: the course, its shape, and the ledger you will receive

_For the TimeBack Scroll team, from James Moore. 30 September 2026. A ten-minute read; the machine-facing detail is folded away at the bottom._

The takeaways

The problem this document solves

You need to build the player and the upload path before the course is finished. So this tells you the shape now, with placeholders where content is still coming, and promises that the shape will not change under you.

How a student moves through the course

Course order is strand by strand. Physics first, then Matter, then Earth & Space, then Life.

Each layer has a fixed pattern. Read the tree top-down.

Grade 3 Science

  1. The lesson: video or article, student's choice (learner_choice).
  2. Question 1: the question that used to close the video. Easy, one step, needs the lesson.
  3. The quiz: about ten items, mixed formats (pick one, pick one of two, type a word or number).

Two things the tree hides:

What one lesson looks like in the ledger

Take Topic 21, lesson 1 (Melting). Its rows, in order, all under atom_id = MAT3-040:

element_idelement_typeWhat it isDelivery
g3t21-l01-lesson-p1lessonReading 1 of the article, plus the whole video narration in scriptlearner_choice, video_source_ref = G3T21-L01.mp4
g3t21-l01-lesson-p2 … -p5lessonReadings 2 to 5text_only
g3t21-l01-vq1clozeQuestion 1: the former in-video question, two answers, tap oneassociated_lesson_id = g3t21-l01-lesson-p1
g3t21-l01-q01 … -q12mcq / cloze / frqThe quizsame link

The ids follow one pattern for every lesson in the course: g3t<topic>-l<lesson>-lesson, -vq1, -q01. Topic-level rows are g3t21-intro-lesson, g3t21-intro-poll, g3t21-pr-q01 (practice), g3t21-summary-lesson, g3t21-summary-q1. Strand-level rows are g3-physics-intro-lesson, g3-physics-intro-poll, g3-physics-test-placeholder. The end-of-grade row is g3-grade-test-placeholder.

How the four question shapes are expressed

How a video placeholder works, and how it fills in

Three states, all on the same row, same element_id:

Statelesson_delivery_modevideo_source_typevideo_source_refscript
Video not made yettext_onlyemptyemptythe full narration
Video delivered (today: 148 rows)learner_choiceuploaded_filethe MP4 file name, e.g. G3T21-L01.mp4the full narration
Video hosted by youlearner_choicematt_asset_id or external_urlyour asset id or URLunchanged

The two placeholder rows that are not videos

The end-of-strand tests and the end-of-grade test do not exist yet. Each is marked in the ledger by one lesson row whose element_title begins PLACEHOLDER:, text_only, with a body that says what will replace it. They hold the place in the course order and must be removed or replaced before an upload. There are five: g3-physics-test-placeholder, g3-matter-test-placeholder, g3-earth-space-test-placeholder, g3-life-test-placeholder, g3-grade-test-placeholder.

How the two CSVs relate

What is ready today

Counted from the course repo on 30 September. "Videos" counts one per lesson plus the topic intro and summary. "Delivered" means David's videos file says done and the MP4 exists.

StrandTopicsLessonsVideos wantedDeliveredWith the pipelineNot yet briefedFull PP100 banks (50 or more items)
Physics1574104104004 of 15
Matter6354747000 of 6
Earth & Space10456500650 of 10
Life11446600660 of 11
Whole course4219828215101314 of 42

What will change, and in what format

What we need from you

  1. Does a two-answer cloze render as tap-one-of-two for a grade-3 reader? If you can take a two-option mcq, say so and the exporter emits that instead.
  2. Can the FRQ grader be held to an exact accept list? Every typed item depends on it (413 in the ledger today, 17 of them in Topic 21 alone).
  3. Does a split article work as a toggle? The video sits on reading 1; readings 2 onward are text only. Does the student who chose the video still see readings 2 onward, or should we put the whole article on one row and the video on another?
  4. Can the poll row be shown without right or wrong?
  5. Can a static test form live in the protected bank format, or do you need a different file?

Validation and contact

Depth: the 58 ledger columns, column by column

Column names are verbatim from your v3 template, in template order.

ColumnWhat we put in it
course_id, course_title, gradeg3-science, Grade 3 Science, 3 on every row
domain_id, domain_title, domain_orderThe strand: physics / matter / earth-space / life, its title, 1 to 4
unit_id, unit_title, unit_orderPhysics has three units (g3-motion, g3-forces, g3-energy); the other strands have one unit named after the strand. Strand intro and test rows use the strand as unit
topic_id, topic_title, topic_orderg3t21, Heating and cooling, 21. Strand intros use g3-<strand>-intro, order 0; tests use g3-<strand>-test, order 99
standard_idThe atom's first standards code (TEKS-G3-6C); blank on intro, practice, summary and placeholder atoms
atom_idThe register atom (MAT3-040) for a lesson; g3t21-intro, g3t21-practice, g3t21-summary for the topic-level atoms
atom_title, atom_objective, atom_orderThe register's title and behaviour, repeated on every row of the atom; order within the topic
element_id, element_type, element_title, element_orderCourse-unique id; lesson / mcq / cloze / frq; a human label ("L01 quiz 3 of 12"); position within the atom
required_for_atomtrue everywhere except the two polls
exclude_from_retrievaltrue for lessons, polls, Question 1s, summary checks and scaffold items; false for quiz and practice items, which are eligible for spaced retrieval
promptThe question text (for cloze: "Pick the answer from the word bank.")
scriptThe full narration of the lesson's video, on reading 1 only. Present whether or not the video exists
speaker_description, background_description, b_roll_guidanceBlank. These belong to your legacy generated video type, which we do not use
image_url, image_description/course-assets/g3-science/images/g3t21_<key>.png and the drawing's alt text; one image per row at most
dok_level1 to 3, metadata only
passage_dependentfalse
ai_grading_instructions, accepted_answersfrq rows only: the exact-match rule in plain words (80 characters minimum) and the JSON list of accepted strings
mcq_a … mcq_e, feedback_a … feedback_emcq rows: options with the key first, feedback per option, feedback_a opening "Correct:" (not on polls)
match_pairs, sequence_items, sort_categoriesBlank. Not used yet; a reorder item type waits on your confirmation of sequence
cloze_text, cloze_word_bankcloze rows: stem ending "Answer: {{key}}" and the JSON list of the two answers
lesson_delivery_modelesson rows only: text_only (no video yet, or a later reading) or learner_choice (video delivered)
lesson_body_markdownThe article as safe markdown: # title, ## subtitles, paragraphs, rule, Drawing: caption where a figure sits
video_source_type, video_source_ref, video_aspect_ratio, caption_source_refEmpty until the video exists; then uploaded_file, the MP4 name, auto, empty
associated_lesson_idEvery question points at its lesson's reading-1 row; practice items point at a lesson only where the source names one
activity_feedbackThe explanation for cloze and typed items (MCQs carry it per option instead)
supporting_kc_idsJSON list of the atom's other standards codes (["SC.3.P.9.1"]), [] when none
Depth: the 34 bank columns and the id rules

course_id, chapter_id (= topic id), chapter_title, atom_id, associated_lesson_id, item_id, family_id (question type, type-N), item_type (mcq or frq), primary_kc_id (= atom), supporting_kc_ids, dok_level (easy 1, medium 2, hard 3), difficulty, prompt, image_url, image_description, activity_feedback, option_a … option_e, correct_answer (a letter), feedback_a … feedback_e (key line opens "Correct:", others "Not this one."), accepted_answers, ai_grading_instructions, match_pairs, cloze_text, cloze_word_bank, sequence_items, sort_categories.

Id rules: item_id = g3t<topic>-pp- + 8 hex characters of a hash of stem and options. Reordering the bank does not change ids; rewording an item does. Multi-select items are exported as their pair MCQ until you confirm a select-all type; reorder items are held back until you confirm sequence.

Depth: the files and tools behind this document