Skill: course-build → write-like-james @ c83cbd2 (OPS TASK: packaging of existing content; nothing authored)
Grade 4 Science: the TimeBack package is built and checked. It waits on your word to leave the machine.
_8 October 2026. Synced to Drive and emailed to Aiden and Kirsten at 20:01 on James's word ("Sync and email now", 16:10); see the last section._
The takeaways
- The whole Grade 4 course is in one package, the same shape as Grade 3's, and it passes the platform's own check: 0 schema errors, 0 cross-check errors, every picture present.
- Every lesson has its row. The videos are in for every topic but three. Topics 4 and 17 have their batches written and not yet rendered; Topic 11's five videos exist under the demo code and are not yet pointed at Topic 11 (detail below). Those 15 rows carry the narration and flip to video when the file lands, same id.
- The tests are built but not in the package. The platform has not said where a fixed test form lives (ask 13), so the four strand tests and the end-of-grade test stay in the course folder and the ledger carries a marked placeholder row where each sits.
- Two decisions for you before it goes, cards below: the PP100 banks are now smaller than the 50 we promised, and most of the pictures carry a failed sharpness check.
- The folder to sync is
handoff/COURSE_LEDGER_G4/(everything in it except_topics/). The full path is at the bottom.
Two decisions before the package leaves the machine
1. Do the PP100 banks ship at 30 to 49 items a topic, or do we top them up to 50 first?
The course promised the platform a bank of at least 50 items a topic.
Today the strand tests and the end-of-grade test took 413 bank items for their fixed forms (348 and 65), and a test item is never served as practice, so those items left the PP100 draw.
Every one of the 38 banks is now below 50; the smallest (Topics 13 and 36) hold 30.
My recommendation: ship now. A PP100 of 30 to 49 still draws a fresh test every time; topping up is new authoring and can follow as its own drop, the way Grade 3's 24 test-out items did.
Ship now / Top up first
2. Do the pictures ship as rendered, with the picture pass still running behind?
Every real-world picture in Grade 4 (391 of them) went through David's pack and its independent judge.
287 carry a FAIL verdict, 251 of them on one check: the background is soft-focused, so the picture is not "crisp everywhere". The beaver dam in Topic 26 is one of these: the scene is right, the pond behind it is soft.
The exporter ships whatever picture the figure has, so all 287 are in the package as rendered.
My recommendation: ship as rendered. A soft background is how a photograph looks; the judge's sharpness rule is stricter than a child's eye. The 36 fails that name something other than sharpness (a brake photo with lettering on the arm, for one) go back to the picture pass as retakes, and a retake keeps its file name.
Ship as rendered / Hold the package
_Applied without asking: your 8 Oct ruling that Design and build is a Physics unit (Topics 11 and 12 sit inside Physics; four strands, four strand-test placeholders); the 7 Oct text-is-cheap and fixes-forward rules._
What the package holds
- One activity ledger (the platform's v3 shape): every strand intro, topic intro and poll, lesson, attached question, quiz, mixed practice, summary and its checks, in course order. Strand by strand: Physics, Matter, Earth and Space, Living things.
- One PP100 bank (the v1 shape): every topic's mastery items, with the test items withdrawn.
images/: every drawing and picture a row names, prefixed by topic code.videos/: every video the ledger names, as a relative link to the one master file on disk (handoff/G4TNN/videos/). No copy, nothing in git, Spotlight told to leave the folder alone.- Beside the CSVs, as in Grade 3's package:
atom_standards.csv(TEKS, NGSS, Florida, Arizona per atom),lesson_standards_G4.csv(one row per lesson),VIDEO_IDS.md(every Peps id, for edits), the contract files,validate_export.py, andBUILD_REPORT.mdwith the full counts.
Typed answers carry the widened accept lists Grade 3's do. Written answers carry the model answer and the points line, but no rubric lines: the rubric table was written for Grade 3's items. That is authoring work, listed under what happens next.
What is withheld, and why
- The five tests. Four strand tests (three fixed forms each) and the end-of-grade test (three forms) are built, blind-read and at 0 FAIL, and sit in
grade4/strand_tests/andgrade4/grade_test/. The platform has no confirmed slot for a fixed form, so they are an open ask, not exported rows. Their format is still pending Becky. - 30 written test questions, two per form, held until the platform's marker has been checked against a human marker on 50 children's answers.
- Topic 5, Lesson 1's video edit. The row points at the live file, which still says "it hands over some of its energy". Your 7 Oct note ("it transfers some of its energy TO the pins") is queued with the pipeline as an edit by id. When it lands the file name does not change, so the row stands.
- Topic 11's five videos. They are live under the demo code (
handoff/G4DEMO/videos/), with your 7 Oct edits owed by id. Topic 11's own videos file still says "ready for video", so its five rows are text-only today. The fix is the video session's: point Topic 11's videos file at those five files and re-run the ledger; no id changes. I did not edit that record. - Four strand intro videos. Scripts written, nothing rendered; four text-only rows carry the narration.
- Items with no platform type. 11 reorder items are out of the bank; 34 "choose two" items are in as their pair MCQ until the platform confirms a multi-select type.
Open asks for the platform
These are the asks in TIMEBACK_SCROLL_ASKS.md that Grade 4 now leans on hardest:
- Ask 13, where a fixed test form lives. It now blocks five built tests, not a proposal.
- Ask 2, multi-select. 34 Grade 4 bank items wait in pair form.
- A reorder type. 11 bank items wait.
- Asks 17 and 17b, typed answers held to an accept list, with a spelling allowance. 92 ledger rows and 158 bank items depend on it.
- The videos folder. Grade 3's package carries its videos inside the Drive folder; this package is laid out the same way.
The folder you would sync
/Users/jamesmoore/Documents/G3-5 Science/handoff/COURSE_LEDGER_G4/
Sync everything in it except _topics/ (the per-topic cache). A Drive name in Grade 3's pattern would be "Grade 4 Science - TimeBack Scroll (full package, 2026-10-08)".
It is a sibling of Grade 3's folder, not a sub-folder, on purpose: the Grade 3 folder is the one re-synced to Aiden and Kirsten, and a Grade 4 folder inside it would ride along on the next Grade 3 sync without your word.
What happens next
- You rule on the two cards. Then you say the word and the folder goes to Drive; the update email to Aiden and Kirsten is a new authorisation, not the Grade 3 one.
- The video session points Topic 11 at its live files, and Topics 4 and 17 render; each landing flips five rows, same ids.
- Grade 4's written-answer rubrics are authored (70 items) and the ledger is re-run; the rows keep their ids.
- When the platform answers ask 13, the five tests go in and the five placeholder rows come out.
Depth: counts
| What | Count |
|---|---|
| Topics / lessons | 38 / 162 |
| Ledger rows | 3,417 (885 lesson, 1,335 mcq, 1,035 cloze, 162 frq) |
| Lesson rows with a video | 223 of 238 wanted (15 waiting: Topics 4, 11, 17) |
| Lesson rows text-only | 662 (later readings of split articles, the 15 above, 4 strand intros, 5 test placeholders) |
| PP100 bank items | 1,573 across 38 topics; 30 to 49 a topic |
| Bank items withdrawn to tests | 413 (348 strand tests, 65 end-of-grade) |
| Bank items with no platform type | 11 reorder (out); 34 multi-select (in as pair MCQ) |
| Typed-answer rows | 92 in the ledger, 158 in the bank |
| Written-answer rows | 70, model answer and points line, no rubric |
| Images | 1,263 PNG, every one referenced |
| Pictures judged / FAIL / FAIL on sharpness only | 391 / 287 / 251 |
| Register atoms in the ledger | listed in atom_standards.csv; 4 lessons carry an atom with no standards code yet |
| Held written test questions | 30 (24 on the twelve strand forms, 6 on the three grade-test forms) |
Depth: validator and checks run
- Per-topic hand-over folders: all 38 rebuilt today (
build_tools_handoff.py, 11:19 to 11:22), each with its own export andvalidate_export.pyat RESULT: PASS. - Course ledger:
build_tools_course_ledger.py --grade=4 --out=handoff/COURSE_LEDGER_G4, 11:31. Validator output:
`
ledger header matches template: True (58 columns)
pp100 header matches template: True (34 columns)
ledger schema errors: 0
pp100 schema errors: 0
cross-check errors: 0
ledger rows 3417, pp100 items 1573, images referenced 1263, images present 1263
RESULT: PASS
`
- The standalone copy (
cd handoff/COURSE_LEDGER_G4 && python3 validate_export.py) gives the same PASS. - Player mimic:
build_tools_timeback_mimic.pyre-rendered all 38 topics tosite_review/g4/topicNN/timeback/;build_tools_verify_timeback_mimic.pyexit 0 on all 38 (every lesson: video card first, the attached question, every article line once and in order, every figure, every quiz item; intro, practice, summary, PP100 note). - Video links: 223 references, 223 relative symlinks made, 0 master files missing, 223 resolve.
.metadata_never_indexpresent;videos/,images/and_topics/git-ignored inside the package. - No content file changed after the exports ran (checked by modification time against every topic's content folder).
Depth: tool-side changes made today (uncommitted, for the next commit)
build_tools_export_timeback.py: the exporter skipped bank items markedstrand_testbut not those markedgrade_test, so the 65 end-of-grade items would have been served as practice. One matching line added. Grade 3 has nograde_testmarks, so its export is unchanged. The Grade 3 session should know, since the tool is shared.build_tools_course_ledger.py: the package.gitignorenow also listsvideos/.- Not changed, for the site owner:
build_tools_build_topic_site.pyhidesstrand_testitems from the PP100 tab but notgrade_testitems, so the review site still shows those 65 as practice. - Not changed, for the video session:
handoff/G4T11/videos.json(see Topic 11 above).
Depth: the package tree
`
handoff/COURSE_LEDGER_G4/
g4-science.activity-ledger-v3.csv
g4-science.pp100-bank-v1.csv
atom_standards.csv
lesson_standards_G4.csv
VIDEO_IDS.md
BUILD_REPORT.md
validate_export.py
contract/ the two schemas and two templates
images/ 1,263 PNG (git-ignored)
videos/ 223 relative symlinks + .metadata_never_index (git-ignored)
_topics/ per-topic export cache (git-ignored; do not sync)
`
Synced and emailed (8 October 2026)
On James's word ("Sync and email now", 16:10), the package went to a new Drive folder beside Grade 3's, "Grade 4 Science - TimeBack Scroll (full package, 2026-10-08)", everything in handoff/COURSE_LEDGER_G4/ except _topics/, with the video links copied as files. The copy ran from 17:26 to 19:56 (one restart at 18:56 after the background time limit; the checksum pass carried on from file 853) and the videos/ folder was re-synced at 19:56 so Topic 5 Lesson 1 carries the fresh render (md5 1e1eb12d…). Verified: 1,497 files on Drive, 1,497 local (223 videos, 1,263 images, the two CSVs, the four contract files and the five files beside them); a whole-package checksum check found 0 differences, 1,497 matching; six spot md5s (three videos, three images) all match the local masters. The Grade 3 folder was not touched (280 videos, as before). The email went to Aiden and Kirsten at 20:01 via Mail.app from james.moore@alpha.school; its text is handoff/COURSE_LEDGER/DROP_NOTES/2026-10-08_grade4_package_email.md. It names the folder, what to import, what is withheld (the five tests, Topic 4 Lesson 2's fresh render tonight, the fifteen lessons and four strand intros without video, and the PP100 banks growing in a follow-up because the test items go back into them), and the four platform asks. Still owed after this drop: Topic 4's five videos landed locally after the 11:57 export and are not yet linked in the package; the next ledger re-run picks them up.
Follow-up update (8 October 2026, late)
The follow-up the 20:01 email promised. The export was re-run the same way (build_tools_course_ledger.py --grade=4 --out=handoff/COURSE_LEDGER_G4, 20:18 to 20:24), the validator passed, the package was re-synced to the same Drive folder, and the email went to Aiden and Kirsten at 20:34. Nothing under grade4/strand_tests/ or grade4/grade_test/ was touched, and the PP100 banks have not yet taken the test items back.
What changed since the 11:57 export
- Topic 3 has a new lesson, L03b "Why a magnet always pulls steel" (atom FOR4-012b, James's ruling A40): 17 ledger rows added (
g4t03-l03b-lesson-p1to-p6,g4t03-l03b-vq1,g4t03-l03b-q01to-q10), 7 bank items added (g4t03-pp-7631258f,-e8403ca6,-4a3a7ed2,-22b56fee,-804e282b,-60a14dfd,-d2eecbc0), 6 new pictures (g4t03_clip_far,g4t03_clip_headache,g4t03_clip_poles_N__clip_poles_S,g4t03_magnet_own_poles,g4t03_rule_l03b,g4t03_seq_clip_N__seq_clip_S__seq_magnet_SS), its videoG4T03-L03b.mp4(Peps idvideo_1791473006717_6ef2b24073a12b93dfb7), and one new row inatom_standards.csv(FOR4-012b: TEKS-G4-7A, Arizona 4.P2U1.3). No id in Topic 3 changed; the 40 rows after Lesson 3 (L04, L05, practice) keep their ids and element_order, and only theiratom_ordermoves along by one. - Ten lesson rows flipped from text_only to learner_choice: Topic 4 (
g4t04-intro-lesson,g4t04-l01-lesson-p1,g4t04-l02-lesson-p1,g4t04-l03-lesson-p1,g4t04-summary-lesson→G4T04-INTRO/L01/L02/L03/SUMMARY.mp4) and Topic 17 (the same five forg4t17→G4T17-*.mp4).G4T04-L02.mp4is the fresh render (md5388a16fa90a29304f48f1f5ce8d2d692, Peps idvideo_1791473046932_bd2f6702a0b3dd5d9eb6, supersedingvideo_1791453556955_2064c7cface7bd2c7a81); the earlier render was never on Drive, since Topic 4 was text-only this morning. - Topic 11's five video files went up for the first time. The 11:57 ledger already carried them as learner_choice with
G4T11-*.mp4refs (the Topic 11 note above was written before the 11:54 relink and is out of date on that point), but the videos folder staged at 11:39 held 223 links, so Drive lacked those five files. They are relative links to the G4DEMO renders and are on Drive now. - Four pictures replaced under the same filename (the one-character picture pass committed at 12:04, after the morning export):
g4t12_test_cartoon__test_table_headache.png,g4t14_lemonade_cartoon.png,g4t14_peanut_pick_cartoon.png,g4t14_two_glasses_cartoon__two_glasses.png. - Three rows with small text changes:
g4t18-l04-lesson-p2andg4t23-l01-lesson-p1(drawing captions renamed to the one child),g4t04-l02-lesson-p1(narrationscript, a few characters). - No rows removed, no bank item changed, no id moved; the order of every pre-existing row and item is unchanged.
lesson_standards_G4.csvunchanged.VIDEO_IDS.mdandBUILD_REPORT.mdrefreshed.
Counts verified
- Validator: ledger 3,434 rows (was 3,417), bank 1,580 items (was 1,573), images referenced 1,269 = present 1,269 (was 1,263); schema errors 0, cross-check errors 0, RESULT: PASS (both the tool's run and the standalone copy).
- Video links: 239 refs in the ledger, 239 relative symlinks, 0 masters missing, 239 resolve (16 made tonight: Topics 3 L03b, 4, 11, 17).
- Drive:
rclone sync20:27 to 20:31 (same flags as the morning: copy-links, checksum, two transfers,_topics/,.gitignoreand.metadata_never_indexexcluded); two picture uploads hit a transient network error and were re-sent by rclone's own retry inside the same run; exit 0.rclone checkby checksum: 0 differences, 1,519 matching (was 1,497: +16 videos, +6 images). Drive holds 239 videos and 1,269 images; local count excluding_topics/is 1,519. Spot md5s on Drive match the masters:G4T04-L02.mp4388a16fa…,G4T04-INTRO.mp4e38ca609…,G4T17-INTRO.mp453d17a2e…,G4T03-L03b.mp493d26f6a…,G4T11-L01.mp4230916ec…; the two retried pictures also match. Both CSVs on Drive carry the new md5s (ledger bfba753a…, bank 700a51f4…). The Grade 3 folder was not touched (280 videos, as before). - Email:
handoff/COURSE_LEDGER/DROP_NOTES/2026-10-08_grade4_update2_email.md, sent 20:34 via Mail.app from james.moore@alpha.school.
Still owed after this drop: Topic 11's rows already point at the demo renders, so the fifteen "no video yet" lessons named in the 20:01 email are down to none, and only the four strand intros remain text-only; the five tests wait for a slot; the PP100 bank top-up (test items returning to the banks) comes in a later update with its own email.