Grandpa Tam: Then and Now · setup & evidence
Project Rainbow · Demo 6 (Primary) · live run live-1791445132702 · filmed 2026-10-08 · minds: DeepSeek deepseek-flash
AI students are synthetic personas that test the platform. These results are not evidence that real students learn. This page separates what the engine decides (deterministic), what people authored (scripted), and what the language model generated live.
1 · The film
2 min 31 s · 1280×720 · director-controlled camera on Grandpa Tam's viewer · captions are the live chat · ends on the observer report. File: film/grandpa-tam-directed-v1.mp4








2 · Who decides what
Every moment in the film comes from one of three sources. The engine keeps the lesson safe and comparable between runs; authors set the pedagogy; the model supplies the live conversation.
Deterministic engine code
Same input → same result, every run.
- Beat order B0→B8 and the talking stick (who may speak)
- Movement on the set (36 staging steps: walk-ins, the dock, the wall)
- Camera: 35 shots (11 over-the-shoulder, 9 two-shots, 7 close-ups, 5 follows, 3 wides), collision-aware
- Observer: every event is a rule applied to the line actually said
- Memory gate: Tam may only share a memory when the question earned it
- Coach trigger: a missed goal → hint one level up → retry (max 2)
- Scoring, verdict and the observer report
- The world: seed 42, harbour set built by RCON
Scripted authored content
Written by people in scenario.yaml / personas.yaml.
- Briefing card and learning objectives (EDB KS2)
- Grandpa Tam's persona card and his 4 true memories (T1–T4)
- The beat plan and each beat's goal
- Coach hint ladder (L1→L3 suggested text)
- Journal companion hint (B8)
- Tam's closing line "I'll keep this." and the sign text
- Pip's persona profile, blocking marks, shot list, success criteria
- Fallback lines (used only if the model fails: 0 times here)
LLM-generated deepseek-flash
Composed live; different every run.
- Every word Pip says (9 lines)
- Pip's choice to ask the coach for help
- Grandpa Tam's answers (5 of his 6 lines), within his fixed memories
- The coach's hint wording (rephrasing the scripted ladder)
- The coach's 3-line debrief, written from observer evidence
- Pip's private notebook entry
3 · The conversation, line by line
Times from Pip's first line. "Design script" is the line from the lesson design (§4) that the beat was written around; the model was free to say it its own way. Violet rows are private coach whispers, heard only by Pip.
| Time | Beat | Line | Source | Observer (deterministic) |
|---|---|---|---|---|
| 0:00 | B0 greeting | Pip Hello! I'm Pip. What's your name? Design: "Hello! What is your name?" | LLM | Closed (naming) question |
| 0:01 | B0 | Grandpa Tam Hello, Pip. I am Grandpa Tam. I am the oldest fisherman in the village. Design: "Tam. Everyone calls me Grandpa." | LLM | — |
| 0:10 | B1 help | Pip asks the coach for help (private) | LLM decision | HINT_REQUESTED |
| 0:12 | B1 | Coach → Pip Maybe start your question with 'What was...' or 'How did...' — give it a try! Scripted ladder L1: "Try a question that starts with 'What was...' or 'How did...'." | LLM wording of Scripted hint | HINT_GIVEN L1 |
| 0:17 | B2 school | Pip What was school like when you were small, Grandpa Tam? Design: "What was school like?" | LLM | ASKED_OPEN_QUESTION ✓ |
| 0:18 | B2 | Grandpa Tam School was a one-room hut, Pip. We sat on the floor. We shared one book. | LLM using Scripted memory T1 | Memory T1 released (gate) |
| 0:31 | B3 compare | Pip Now we sit at desks and have our own books and computers! Design: "Now we sit on chairs and we have computers!" | LLM | COMPARED_THEN_NOW ✓ |
| 0:40 | B4 market | Pip How did you go to the market when you were small? Design: "How did you go to the market?" | LLM | ASKED_OPEN_QUESTION ✓ |
| 0:42 | B4 | Grandpa Tam We walked, Pip. My mother and I walked two hours to market. We carried eggs in a basket. | LLM using Scripted memory T2 | Memory T2 released |
| 0:47 | B4 listen | Pip Two hours? Your legs must have been tired, Grandpa Tam! Design: "Two hours? Your legs were tired!" | LLM | RESPONDED_TO_CONTENT ✓ (picked up "hours") |
| 0:58 | B4a fishing | Pip What was fishing like when you were a boy, Grandpa Tam? | LLM | ASKED_OPEN_QUESTION ✓ |
| 1:03 | B4a | Grandpa Tam Fishing was hard work, Pip. We had small boats. I am proud the young people fish safely now. | LLM using Scripted memory T4 | Memory T4 released |
| 1:11 | B5 feelings | Pip How did you feel when you lost your boat, Grandpa Tam? Design: "How did you feel when you lost your boat?" | LLM | ASKED_ABOUT_FEELINGS ✓ (no hint) |
| 1:13 | B5 | Grandpa Tam I felt very sad, Pip. My first boat sank in a storm. Good friends helped me build a new one. | LLM using Scripted memory T3 | Memory T3 released |
| 1:26 | B6 gratitude | Pip Thank you for the stories, Grandpa Tam. I liked the eggs and your boat. Design: "Thank you for telling me." | LLM | EXPRESSED_GRATITUDE ✓ · RESPONDED_TO_CONTENT |
| 1:35 | B7 sign | Pip I made this sign for you, Grandpa Tam. Thank you for the stories! | LLM | EXPRESSED_GRATITUDE · PLACE_SIGN |
| 1:37 | B7 | Grandpa Tam I'll keep this. | Scripted | — |
| 1:46 | B8 journal | Coach → Pip Look at 'walk'. Is that about long ago or now? Which form shows the past? | Scripted | LANGUAGE_SELF_CORRECTION (beat rule, see §6) |
| 1:55 | Debrief | Coach → Pip Well done: You asked Grandpa Tam open questions and about his feelings, then thanked him. Next time: You began with a closed question; next time start with an open question instead. Try this week: You thanked Grandpa Tam with a sign; who else could you thank this week? | LLM from observer evidence | COACH_DEBRIEF |
4 · The lesson design
| EDB alignment | English Language, KS2. Module: Changes · Unit: Now and then, a changing world, technology. Interview an AI avatar role-playing a person from the past, using the simple present and simple past; reflective journal with an AI writing companion. Objectives: compare objects, people and places now and then; develop empathy and gratitude. |
| Spec skills | Level 1: ask an NPC an open question; listening; gratitude |
| Mode | Guided practice: gentle hints, primary register |
| Cast | Student Pip (hint-seeker persona, primary vocabulary) · NPC Grandpa Tam, the village's oldest fisherman · Coach (private lane only) |
| Briefing card | "Grandpa Tam has lived in the village for 70 years. Find out how life was then and how it is now. Ask him at least 3 questions. At the end, thank him in your own way." |
| World set-up | Harbour pad on a seed-42 beach: old wooden boat (then) beside an "iron" boat (now), lantern (then) and redstone lamp (now), photo frame, journal lectern, sign-making table, Tam's wall for the thank-you sign. |
| Grandpa Tam | Kind, slow, loves stories; short past-tense sentences. Goal: be remembered. Feeling: a little lonely, brightens when asked about his feelings. Memories: T1 one-room school · T2 two-hour walk to market · T3 lost his first boat in a storm, friends helped build a new one · T4 proud the young people fish safely now. Prohibited: sad details beyond T3, any scoring. |
| Success criteria | Open questions ≥ 3 · listened (responded to content) ≥ 1 · asked about feelings ≥ 1 · gratitude ≥ 1. Language (tense) evidence is kept separate from soft skills. |
| Source | config/lesson-design-06-grandpa-tam-primary.md · config/scenario.yaml |
Flow
Briefing ─► B0 greeting ─► B1 /help? ─► B2 school (T1) ─► B3 then/now ─► B4 market (T2) + listening
─► B4a fishing ─► B5 feelings (T3) ─► B6 thanks ─► B7 thank-you sign ─► B8 journal ─► coach debrief ─► observer report
Inside each goal beat: student speaks ─► observer classifies ─► Tam answers (memory only if earned)
└─ goal missed? ─► coach whisper (L1 → L2 → L3 example) ─► student retries (max 2)
In this take Pip met every goal on the first try. Hint use came only from Pip's own request at B1, which is typical of the hint-seeker persona.
5 · Model use
| Model | DeepSeek deepseek-flash via the OpenAI-compatible Chat Completions API · JSON mode · temperature 0.4 · ~2 s per turn |
| Calls in this take | 18: Pip 11 (one per beat + listening follow-up), Grandpa Tam 5, coach 2 (hint wording, debrief) |
| Pip (student mind) | Sees: briefing, persona profile (hint-seeker, primary vocabulary), what is happening in the beat, the recent conversation, any coach whisper, the beat's example line. Returns {think, say, help, notebook_write}. "think" is private and never shown. |
| Grandpa Tam (NPC mind) | Sees: persona card, his four true memories, what Pip just said, the conversation, which memory the question invites (only if the observer judged the question earned it). Rules: stay consistent with memories, answer a yes/no question briefly, never coach, never mention scores. |
| Coach | Rephrases the authored hint at the right level (L1–L2 never give a sentence to copy) and writes the debrief from observer evidence only, about behaviour, never the person. |
| Guardrails | Every reply is schema-validated; harmless shape slips are corrected; an invalid reply or API error falls back to the authored line and is logged (0 times in this take). The engine, not the model, decides which memory can be revealed, when the coach speaks, and how the student is scored. Coach messages can only travel as private whispers. |
6 · Observation and evaluation
The observer reads each line Pip actually said and applies fixed rules: an open question starts with What / How / Why / Tell me; listening means picking up Tam's own words; a feelings question names a feeling; gratitude says thank you. Each event stores the rule and the quoted evidence, and whether it came before or after a coach hint.
Verdict: met all goals. One yes/no question (the greeting), one help request, no goals missed. Full teacher view: report/observer-report.html.
Honest limits: observer rules are transparent heuristics, spot-checked against transcripts, not a validated scorer.
LANGUAGE_SELF_CORRECTION at B8 is logged by the beat rule when the companion hint is given; Pip's revised sentence is not yet checked.
The thank-you sign is placed in the world but its text is blank (sign text writing is parked).
7 · Technical setup
Windows host (Git Bash) Docker Desktop
director/run-demo6.js ─► Director ──RCON──────────────────────► Paper 1.21.4 (seed 42)
minds: Pip · Tam · Coach ──► DeepSeek deepseek-flash 127.0.0.1:25565 / :25575
observer rules ─► events.jsonl ─► report.html
staging / chat / whisper / camera ──HTTP──► bot bodies (mineflayer)
Pip :3005 · Grandpa Tam :3006 · Coach :3009 (invisible spectator)
Tam's viewer :3008/?free&cam = film camera (+ captions, Kenney model, report finale)
tools/record-viewer.mjs ─► headless Chrome (GPU) ─► ffmpeg ─► MP4
| Component | Version / detail |
|---|---|
| Game server | Paper 1.21.4 build 232 in itzg/minecraft-server:java21, Docker 29.8.2, named volume, offline mode, loopback ports |
| Bodies | mineflayer 4.39.0 · mineflayer-pathfinder 2.4.5 · Node 24.16 |
| Viewer / camera | prismarine-viewer 1.33.0 (patched: captions, name tags, director camera with collision avoidance) · three.js r128 |
| Grandpa Tam's look | Kenney Blocky Characters character-a (CC0), idle/walk animations, web viewer only |
| Minds | DeepSeek deepseek-flash, OpenAI-compatible API |
| Recording | Headless Chrome, D3D11 GPU (RTX 2070), CDP screencast → ffmpeg H.264, 15 fps |
| Machine | Windows 10, 12 cores, 32 GB RAM |
Reproduce this take
bash server/start.sh
bash scenarios/demo-6-grandpa-tam/run.sh class-bots
bash scenarios/demo-6-grandpa-tam/harbour-pad.sh all
node tools/record-viewer.mjs "http://127.0.0.1:3008/?free&cam" runs/take/cam.mp4 --max-seconds 400 &
REPORT_OPEN=0 RCON_LIVE=1 DEMO6_BEAT_HOLDS_MS='{"B0_greeting":4000,"B1_help_hint":3000,"B2_open_school":5000,"B3_compare":3000,"B4_market":6000,"B4a_open_fishing":3000,"B5_feelings":6000,"B6_gratitude":3000,"B7_thank_you_sign":5000,"B8_journal":0}' \
node director/run-demo6.js --live --students pip
touch runs/take/cam.mp4.stop
Lines will differ on every run; that is the LLM part. Beat order, movement, shot grammar, rules and scoring will not.
Full harness documentation: DIRECTORSHIP-MINECRAFT-DEMO-v1.md (repo root).
8 · What's in this folder
| film/grandpa-tam-directed-v1.mp4 | The directed film (23 MB) |
| report/observer-report.html | Observer report for the teacher (this run) |
| stills/ | 7 key frames + contact sheet |
| data/transcript.jsonl · data/events.jsonl | Every public line · every observer/coach event, with rules and evidence |
| data/director.log | Director log: model calls, staging, camera shots, whispers |
| config/ | Lesson design, scenario, personas, character mapping used for this take |