Grandpa Tam: Then and Now · setup & evidence

Project Rainbow · Demo 6 (Primary) · live run live-1791445132702 · filmed 2026-10-08 · minds: DeepSeek deepseek-flash

Pip met all goals 14 of 15 public lines LLM-generated 1 scripted line · 0 fallbacks 35 directed camera shots · 20 observer events

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

Opening wide shot of the harbour set with the class waiting
Opening wide · title card
Over-the-shoulder shot of Pip greeting Grandpa Tam
Greeting · over the shoulder
Two-shot during the school question
School · two-shot
Pip listening to the market story
Market · listening
Close-up of Grandpa Tam telling the storm story
Feelings · close-up on Tam
Thank-you sign beat
Thank-you sign
Observer report sliding in over the set
Finale · observer report
Contact sheet of the whole film every 10 seconds
Contact sheet (every 10 s)

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
18model calls (11 Pip, 5 Tam, 2 coach)
0API failures / rejected replies
14 / 15public lines generated live
4 / 5private coach whispers generated live

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.

TimeBeatLineSourceObserver (deterministic)
0:00B0 greetingPip Hello! I'm Pip. What's your name?
Design: "Hello! What is your name?"
LLMClosed (naming) question
0:01B0Grandpa Tam Hello, Pip. I am Grandpa Tam. I am the oldest fisherman in the village.
Design: "Tam. Everyone calls me Grandpa."
LLM—
0:10B1 helpPip asks the coach for help (private)LLM decisionHINT_REQUESTED
0:12B1Coach → 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 hintHINT_GIVEN L1
0:17B2 schoolPip What was school like when you were small, Grandpa Tam?
Design: "What was school like?"
LLMASKED_OPEN_QUESTION ✓
0:18B2Grandpa Tam School was a one-room hut, Pip. We sat on the floor. We shared one book.LLM using Scripted memory T1Memory T1 released (gate)
0:31B3 comparePip Now we sit at desks and have our own books and computers!
Design: "Now we sit on chairs and we have computers!"
LLMCOMPARED_THEN_NOW ✓
0:40B4 marketPip How did you go to the market when you were small?
Design: "How did you go to the market?"
LLMASKED_OPEN_QUESTION ✓
0:42B4Grandpa Tam We walked, Pip. My mother and I walked two hours to market. We carried eggs in a basket.LLM using Scripted memory T2Memory T2 released
0:47B4 listenPip Two hours? Your legs must have been tired, Grandpa Tam!
Design: "Two hours? Your legs were tired!"
LLMRESPONDED_TO_CONTENT ✓ (picked up "hours")
0:58B4a fishingPip What was fishing like when you were a boy, Grandpa Tam?LLMASKED_OPEN_QUESTION ✓
1:03B4aGrandpa Tam Fishing was hard work, Pip. We had small boats. I am proud the young people fish safely now.LLM using Scripted memory T4Memory T4 released
1:11B5 feelingsPip How did you feel when you lost your boat, Grandpa Tam?
Design: "How did you feel when you lost your boat?"
LLMASKED_ABOUT_FEELINGS ✓ (no hint)
1:13B5Grandpa 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 T3Memory T3 released
1:26B6 gratitudePip Thank you for the stories, Grandpa Tam. I liked the eggs and your boat.
Design: "Thank you for telling me."
LLMEXPRESSED_GRATITUDE ✓ · RESPONDED_TO_CONTENT
1:35B7 signPip I made this sign for you, Grandpa Tam. Thank you for the stories!LLMEXPRESSED_GRATITUDE · PLACE_SIGN
1:37B7Grandpa Tam I'll keep this.Scripted—
1:46B8 journalCoach → Pip Look at 'walk'. Is that about long ago or now? Which form shows the past?ScriptedLANGUAGE_SELF_CORRECTION (beat rule, see §6)
1:55DebriefCoach → 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 evidenceCOACH_DEBRIEF

4 · The lesson design

EDB alignmentEnglish 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 skillsLevel 1: ask an NPC an open question; listening; gratitude
ModeGuided practice: gentle hints, primary register
CastStudent 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-upHarbour 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 TamKind, 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 criteriaOpen questions ≥ 3 · listened (responded to content) ≥ 1 · asked about feelings ≥ 1 · gratitude ≥ 1. Language (tense) evidence is kept separate from soft skills.
Sourceconfig/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

ModelDeepSeek deepseek-flash via the OpenAI-compatible Chat Completions API · JSON mode · temperature 0.4 · ~2 s per turn
Calls in this take18: 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.
CoachRephrases 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.
GuardrailsEvery 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.

3/3open questions (all independent)
2/1listened: "two hours", "the eggs and your boat"
1/1asked about feelings (no hint)
2/1showed gratitude

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
ComponentVersion / detail
Game serverPaper 1.21.4 build 232 in itzg/minecraft-server:java21, Docker 29.8.2, named volume, offline mode, loopback ports
Bodiesmineflayer 4.39.0 · mineflayer-pathfinder 2.4.5 · Node 24.16
Viewer / cameraprismarine-viewer 1.33.0 (patched: captions, name tags, director camera with collision avoidance) · three.js r128
Grandpa Tam's lookKenney Blocky Characters character-a (CC0), idle/walk animations, web viewer only
MindsDeepSeek deepseek-flash, OpenAI-compatible API
RecordingHeadless Chrome, D3D11 GPU (RTX 2070), CDP screencast → ffmpeg H.264, 15 fps
MachineWindows 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.mp4The directed film (23 MB)
report/observer-report.htmlObserver report for the teacher (this run)
stills/7 key frames + contact sheet
data/transcript.jsonl · data/events.jsonlEvery public line · every observer/coach event, with rules and evidence
data/director.logDirector log: model calls, staging, camera shots, whispers
config/Lesson design, scenario, personas, character mapping used for this take