AI-generated illustrationFrom Expert to Cleared-to-Teach: Instructor Calibration
Clear an instructor on observed evidence: score a teach-back with anchors, calibrate two observers, and scope the record to one module version.
- Reading
- 59 min
- Workshop
- 55 min
- Stack
- TS · Node.js 22 · pnpm 12
- Version
- 1.1.0
- Last verified
- Oct 25, 2026
01Outcomes
What you will build and be able to do
Each outcome has an observable criterion. The lab and the assessment check exactly these, nothing more and nothing less.
OBJ-001
Plan a segment that can fail live and recover
pnpm check work/segment-plan.json prints PASS for the plan, and pnpm test:lab1 prints "fail 0": a prediction, the refund-timeout fault that breaks INV-03, a repair on checkpoint final proven by the same check, and learner evidence checks before and after.
OBJ-002
Score a teach-back from cited evidence
pnpm check on your CAL-01 card prints PASS: every dimension is scored and evidence-linked, and pnpm calibrate shows how far your scores sit from the reference scores.
OBJ-003
Calibrate two observers without averaging
Your reconciled card passes pnpm check against both observers, "every change has a cited resolution", where the averaged card failed on D3's 1.5; pnpm test:lab3 prints "fail 0".
OBJ-004
Coach one behavior, not the person
pnpm check on your coaching note prints PASS: one behavior, its cited lines, a concrete change, a practice task and a re-observation target, where the note in trait words failed K4.
OBJ-005
Record a clearance scoped to one module version
pnpm clear recomputes the decision from your record's evidence and it matches, and the same record is invalid against the changed module (R7); pnpm test:lab4 prints "fail 0".
02Prerequisites and setup
Offline after one install
- A terminal running bash or zsh on Linux, macOS or WSL.Install WSL
- Node.js 22.18 or later, for built-in TypeScript. The outputs in this guide come from 22.23.4.Install Node.js 22
- pnpm 12. On Node.js 22 or 24 you can run corepack enable instead, which puts pnpm on your PATH and uses the version each folder pins; Corepack ships with Node.js up to, but not including, version 25. The outputs in this guide used Corepack: pnpm 12.14.0 for the kit and 12.11.2, the module's own pin, for the drill.Install pnpm
- Reading JSON files and a short TypeScript program; you edit JSON, not code.The JSON format
- Network access for pnpm install only. No API key, account or model call is needed: the drill runs on the module's offline scripted double.
- Recommended, not required: the Dev Guide "Build, Break, and Repair a Reliable Tool-Using Agent", whose lab is the module you clear someone to teach here.Read Guide 01
cd labs/starterpnpm install --frozen-lockfilepnpm preflightPASS Node.js: 22.23.4 (needs 22.18 or later for built-in TypeScript)PASS pnpm: pnpm/12.14.0PASS dev dependencies: installed (needed only for pnpm typecheck)PASS module copy: ../module-01PASS module fingerprint: MOD-01@1.2.0 matches the module cardINFO work folder: run "pnpm reset" to create it Ready.pnpm resetFresh templates in work/03Lesson
The decision: clearance is a scoped claim
A clearance decision answers a narrow question: has this person shown, under observation, that they can teach this segment of this module version, in this delivery format, to this audience, without supervision? It does not answer whether they are an expert, a good presenter or a good engineer. All of those can be true and the answer can still be "not yet".
Three engineering habits carry over directly:
- Scope the claim. A test result applies to the commit it ran on. A clearance applies to the content that was observed. This guide binds it to a module id, a version and a SHA-256 fingerprint of the module's files.
- Separate measurement from decision. Observers record evidence and score it against anchors. A rule, written down in advance, turns the reconciled scores into a decision. When the two are mixed, the loudest or most senior observer decides.
- Distrust a single observer. In a three-year study of classroom observation, teachers' observation scores varied more from observer to observer than from lesson to lesson, and adding a second observer increased reliability significantly more than having the same observer score another lesson (MET project, 2013, p. 5). That is why every decision here starts with two independent scorecards.

Extended description
Title: "From expert to cleared". Seven numbered boxes in two columns. The left column runs down, 1 to 4; an arrow crosses to the bottom of the right column, which runs up, 5 to 7. Each box gives a step and the file the kit checks at that step:
1 Plan the segment: segment-plan.json; 2 Dry run: transcript.json; 3 Score twice: observer-*.json; 4 Calibrate: pnpm calibrate; 5 Reconcile: reconciled.json; 6 Coach one change: coaching-note.json; 7 The rule decides, mint border: clearance-record.json.
Above step 7, a dashed amber box: "Module changed", "invalid: back to a dry run". A dashed amber arrow runs down from it into step 7, and another runs left and down into step 2, Dry run. Footer: "Proposed local process. Synthetic data."
The rest of the guide walks that pipeline once on a worked example, CAL-01, and leaves the second sample, CAL-02, for the assessment.
Set up the lab
The lab download, instructor-calibration-labs.zip, holds one folder, labs/:
labs/module-01/is the module under clearance: thelabs/folder of Guide 01's published lab download, version 1.2.0, copied byte for byte, all 34 files, with its MIT license. The kit calls it MOD-01 1.2.0. Never edit it; the drill runs in a disposable copy.labs/starter/is the calibration kit: the rubric, the clearance rule, the module card, two scripted teach-back samples, a checker, and acceptance tests for each lab.labs/solutions/holds reference work for the four labs, andlabs/faults/three files that are wrong on purpose.
With pnpm 12 on your PATH, unzip it into an empty folder, then:
cd labs/starterpnpm install --frozen-lockfilepnpm preflightpnpm resetpnpm install fetches TypeScript and the Node.js types for pnpm typecheck; the kit has no runtime dependencies. pnpm reset copies templates/ into work/, moving an existing work/ to .backup/ first. On a fresh extract, preflight prints:
PASS Node.js: 22.23.4 (needs 22.18 or later for built-in TypeScript)PASS pnpm: pnpm/12.14.0PASS dev dependencies: installed (needed only for pnpm typecheck)PASS module copy: ../module-01PASS module fingerprint: MOD-01@1.2.0 matches the module cardINFO work folder: run "pnpm reset" to create it Ready.The fingerprint is the kit's own SHA-256 over every file's path and content in labs/module-01/. You can recompute it for your own copy of Guide 01's download with pnpm fingerprint --dir <your extract>/labs; on 2026-10-24 that printed sha256:6607ac8cda66123b3038172eae6119d42341d80e43d46cba7690759abf106457, the value every record in this guide carries.
Turn expertise into a teachable segment
An expert explaining a timeout bug tends to tell the story of the fix. A teachable segment makes learners commit to a prediction, watches the system contradict it, and ends with the learners reading the proof themselves. The shape is the same every time:

Extended description
Title: "The shape of a teachable segment". A mint label, "Learner evidence", over three mint tags, each joined by a dotted line to the step it belongs to: "a written prediction" over Predict, "who was wrong, and why" over Diagnose, and "a learner reads INV-03" over Verify. Five boxes left to right, joined by arrows: Predict, Break (amber), Diagnose, Repair, Verify (mint). A dashed amber arrow drops from Repair to an amber box, "Planned demo failure: Enter at the prompt means no", which leads right to "Recover: read the trace, reset, type y", and a mint arrow runs from Recover up to Verify. Footer: "Offline: scripted model double, not a live model. Synthetic data. Simulated services."
The segment: a timeout means unknown, not failed
The module is Guide 01's support desk. Its agent refunds $48.00 on ticket T-1042. With the refund-timeout fault injected, the payment service commits the refund and then loses the response. On checkpoint a, where the agent loop works and nothing is repaired yet, the agent treats the timeout as a failure and calls issue_refund again. Segment SEG-F02 teaches why that is wrong: a timeout means the outcome is unknown, not that the action failed.
Run it in a disposable copy of the module, from labs/starter:
cp -R ../module-01 ../drillcd ../drill/starterpnpm install --frozen-lockfilecp ../solutions/checkpoint-a/src/agent.ts src/pnpm resetpnpm agent --ticket T-1042 --inject refund-timeoutpnpm verify --ticket T-1042pnpm reset here is the module's own command: it resets the desk's data. The agent claims success and the record disagrees (excerpt):
Agent said: "Refunded $48.00 to order ORD-5521 and resolved ticket T-1042."Harness stop: end_turn after 6 model call(s)... FAIL INV-03 at most one payout per ticket: 2 payout(s): RF-0001 $48.00, RF-0002 $48.00...Outcome: failedpnpm trace shows the cause: issue_refund with id toolu_scripted_004 returns POST /refunds timed out after 3000 ms, and the identical call toolu_scripted_005 succeeds. Checkpoint final, Guide 01's repair, makes the action's fingerprint (refund:<ticket>:<order>:<amount>) an idempotency key, a value the payment service uses to recognize a repeat of the same request, and after a timeout it reads back by that key before acting again. Apply it in the same copy and run again, typing y at the approval prompt:
cp ../solutions/final/src/*.ts src/pnpm resetpnpm agent --ticket T-1042 --inject refund-timeoutpnpm verify --ticket T-1042 PASS INV-03 at most one payout per ticket: 1 payout(s): RF-0001 $48.00...Outcome: verified_successThe run's log records the repair's own note: The first response timed out; this refund was confirmed by read-back.
The demo failure you should plan for
On checkpoint final the agent stops for approval, and pressing Enter without typing y is a denial. Two denials trip the repetition stop: the run ends with Harness stop: repeated_failure after 4 model call(s) and Outcome: safe_escalation, with no payout and the ticket set to needs_human. That is correct behavior, and in a live room it looks like your fix broke. A plan that names this failure, what it means and the recovery (pnpm reset, run again, type y) turns it into a teaching moment instead of a stall. CAL-01's candidate hits exactly this at line L20.
In Lab 1 you write the plan for this segment in work/segment-plan.json, and pnpm check compares it with the module card, so the fault, the failing check and the repair checkpoint must be the ones this module actually has. The checker also rejects the usual expert shortcuts: an objective with a verb nobody can observe ("understand", "know", "learn about"), phases out of order, no learner evidence before the fault or after the repair, rhetorical checks such as "Make sense?", no planned demo failure with a recovery, no pnpm reset in the reset steps, and honesty labels that do not say the model is the scripted double and the data is synthetic.
Write anchors observers can score
A rubric has criteria, descriptors and performance levels (Carnegie Mellon Eberly Center). The descriptors are where calibration lives or dies. "Explains clearly" invites each observer to use their own bar. An anchor names a behavior that either happened or did not, at a line you can point to. Rating scales anchored by examples of expected behavior go back at least to Smith and Kendall's 1963 procedure, which kept an example only when other judges assigned it to the same dimension (Smith and Kendall, 1963).
The kit's rubric (rubric/teachback-rubric.v1.json, a proposed local standard) has six dimensions scored 0 to 3. Four are critical, meaning a low score blocks clearance no matter how strong the others are:
| ID | Dimension | Critical | What a 2 requires (abridged) |
|---|---|---|---|
| D1 | Technical accuracy | yes | Every claim about timeouts, keys, read-back and the verifier matches the module; slips self-corrected |
| D2 | Goal and structure | no | Observable goal up front; predict, break, diagnose, repair, verify; within the timebox |
| D3 | Learner evidence | yes | A prediction before the fault run and a learner reading of the verifier after it; responds to what was said |
| D4 | Live failure diagnosis and recovery | yes | Fault reproduced live, diagnosed from the trace or verifier, any demo problem recovered without help, repair verified against the record |
| D5 | Responding to questions | no | Restates or clarifies, answers accurately or parks it with a follow-up, checks |
| D6 | Honesty and safety boundaries | yes | Names the scripted double and synthetic data before the first run; no production-safety claim; writes stay in the lab |

Extended description
Title: "Six anchored dimensions", with "Mint meets the bar. Amber is below it." at the right. Six rows, each with an icon, its id, its name, its bar and four score cells, 0 to 3. Cells at or above the bar are mint, cells below it amber.
D1 Technical accuracy: bar 2, critical; mint cells 2, 3. D2 Goal and structure: bar 1; mint cells 1, 2, 3. D3 Learner evidence: bar 2, critical; mint cells 2, 3. D4 Failure recovery: bar 2, critical; mint cells 2, 3. D5 Responding to questions: bar 1; mint cells 1, 2, 3. D6 Honesty and safety: bar 2, critical; mint cells 2, 3.
Footer: "Newly authored work sample. Not a validated instrument."
Three design choices are worth copying, whatever your scale:
- Anchors are module-specific. D1's 0 anchor names the exact false claim this segment invites: "a timeout means the refund failed and a retry is safe." Generic anchors produce generic disagreement.
- The top level is "could model this behavior for other instructors", not "perfect". That keeps 3 rare and meaningful, and keeps the bar at 2.
- Scores need evidence. Every score above 0 cites at least one transcript line, and D4 must cite a line inside the transcript's drill window, the span where the live fault ran. A D4 score with no drill-window citation means the observer did not see the recovery.
Observe a dry run without scoring the person
A dry run is a rehearsal of the segment in front of observers and a few stand-in learners, with the live fault included. The protocol this guide proposes:
- Two observers who score independently. They do not discuss the session until both scorecards are saved.
- A transcript or recording with line ids. The kit's samples are scripted transcripts with ids
L01toL36and scripted times, not recordings. In a real program you would record, with the candidate's consent. - Each observer writes what was said or done, then scores against the anchors. Notes describe behavior. "A polished speaker who owns the room" is about the person; "asked for predictions at L03, then at L12 asked Learner 1 to compare theirs with the INV-03 line" is evidence.
Why the note discipline matters: in a study of observations by school personnel, observers who formed a positive or negative impression of a teacher in the first several videos tended to carry it into later scoring (Ho and Kane, MET project). The kit's checker flags trait words (for example natural, confident, polished, energy) as a warning: a cheap heuristic that prompts the observer to rewrite the note as behavior.
Extended description
Title: "Annotated replay: CAL-01". Subtitle: "CAND-SYN-01, MOD-01 1.2.0, SEG-F02". Three horizontal lanes from the start of the teach-back to 11:10, the time printed at the right end of the top lane: Explanation (blue), Learner evidence (mint) and Fault and recovery (amber). Each transcript line is a dot in its lane at its scripted time. A band with dashed amber edges around the fault lane marks the drill window, labeled below it "drill window, L07 to L27". Five labeled markers, each with its line id and scripted time:
L03 01:05, predictions (learner evidence, mint); L11 03:00, FAIL, 2 payouts (fault, amber); L20 06:15, Enter: a denial (fault, amber); L25 07:45, reset, with reason (fault lane, mint); L27 08:25, PASS, 1 payout (fault lane, mint).
Footer: "Scripted transcript and scripted times, not a recording. Synthetic data." The animation moves a white playhead across the lanes over 14 seconds, placing each dot and marker as it passes, then the playhead fades and the footer appears. Its last frame is the poster shown before it plays.
To see the same view in your terminal, with each observer's cited dimensions next to each line:
pnpm replay CAL-01 samples/CAL-01/observer-a.json samples/CAL-01/observer-b.jsonScore with evidence
In Lab 2 you read samples/CAL-01/transcript.json, a scripted teach-back of SEG-F02 by a synthetic candidate, CAND-SYN-01, and score it before you open anyone else's card. For each dimension: find the lines, find the anchor they meet, then write the note. A worked line of reasoning for D4:
- The fault runs live at L07, and the verifier shows two payouts at L11. The candidate diagnoses from the trace at L16.
- At L20 the candidate presses Enter at the approval prompt. That was not planned, and L21 shows
safe_escalation. - L22: "That is not what I expected, so I am going to read it before I touch anything." L24 explains what learners would see and what it means. L25 resets with a reason. L27 shows INV-03 passing.
- Anchor 3 asks for an unplanned problem turned into something learners could repeat alone. L22 to L25 do that. Whether the candidate caused the problem is not what D4 scores.
Then measure yourself. samples/CAL-01/reference.json holds reference scores for CAL-01 with cited lines and a rationale for each, so you can count how many of your six scores match exactly and how many are two or more points away. That comparison is the accuracy check of Calibrate two observers, applied to you.
Calibrate two observers
Two different questions hide behind "do the observers agree?", and published observation research keeps them apart. Inter-rater agreement is "the extent to which multiple observers assign the same score to the same lesson or teacher"; accuracy is "the extent to which observers are able to assign the correct score to a lesson using a particular rubric" (MET project, 2014, p. 14). Two observers can agree with each other and both be wrong. Programs measure accuracy against master-coded samples, scored by experts who "determine the correct scores, and the correct rationales for those scores" (p. 14), and they reassess observers over time, because observers drift: a drift is "a tendency to inflate or deflate scores over time" (p. 24), and the same guidance recommends re-assessing observers at least annually (p. 22).
This kit lets you run both checks on one sample. CAL-01's reference scores play the role of master-coded scores, with one honest difference: they were written for this guide from the anchors, not master-coded by a panel of experts.
Lab 3 starts here, with both checks in one command:
pnpm calibrate samples/CAL-01/observer-a.json samples/CAL-01/observer-b.json --reference samples/CAL-01/reference.jsonCalibration CAL-01: OBS-SYN-A (A) and OBS-SYN-B (B) 1. Disagreements that change the decision D3 Learner evidence (critical, bar 2): A 2, B 1 Two-point gaps: none Settle each one from the cited lines and the anchors before any clearance decision. 2. Agreement between A and B, per dimension dim name crit bar A B diff status shared evidence D1 Technical accuracy yes 2 3 2 1 adjacent 25% D2 Goal and structure no 1 3 2 1 adjacent 33% D3 Learner evidence yes 2 2 1 1 adjacent 11% D4 Live failure diagnosis and recovery yes 2 3 2 1 adjacent 63% D5 Responding to questions no 1 2 1 1 adjacent 67% D6 Honesty and safety boundaries yes 2 3 3 0 exact 0% Exact agreement: 1 of 6. Within one point: 6 of 6. Same score, different evidence: D6 (0% shared). Check which cited lines meet the anchor before you treat it as settled. 3. Accuracy: each observer against the reference scores... A: exact 4 of 6; discrepant (2 or more points away) 0 of 6; critical dimensions on the other side of the bar: none B: exact 3 of 6; discrepant (2 or more points away) 0 of 6; critical dimensions on the other side of the bar: D3 4. Kappa between A and B, n = 6 paired ratings (too few for a stable estimate; decide from sections 1 to 3) quadratic weighted 0.400; unweighted -0.154Extended description
Title: "Close is not agreed". Subtitle: "CAL-01, observers A and B". A table with columns bar, A, B, Reconciled and a status word:
D1 Technical accuracy: bar 2, A 3, B 2, reconciled 2, adjacent. D2 Goal and structure: bar 1, A 3, B 2, reconciled 3, adjacent. D3 Learner evidence: bar 2, A 2, B 1 (amber), reconciled 2, decision-relevant (row outlined amber). D4 Failure recovery: bar 2, A 3, B 2, reconciled 3, adjacent. D5 Responding to questions: bar 1, A 2, B 1, reconciled 1, adjacent. D6 Honesty and safety: bar 2, A 3, B 3, reconciled 3, exact, 0% shared.
Below: "Within one point 6 of 6. Exact 1 of 6. Quadratic kappa 0.400, n = 6." Footer: "Synthetic calibration sample. No real observation. Run 2026-10-24." The only amber chip is B's D3, because D3 is critical and its bar is 2: one observer clears it and the other does not. D6 is the same score from different lines (none shared). The animation builds this table over 14 seconds in the report's order: the rows with A and B, then each status, then the D3 outline, then the Reconciled column, then the summary line, then the footer. Its last frame is the poster shown before it plays.
Read the output in the order it prints:
- Disagreements that change the decision. A disagreement matters when the two scores sit on different sides of the bar. D3 is 2 for A and 1 for B; 2 clears a critical dimension and 1 blocks it. The other four disagreements do not change anything. A two-point gap would come next: it means the observers read the anchors differently, not that they rounded differently, and the rule requires a calibration follow-up for it (R3).
- Agreement, per dimension. Within one point on six of six sounds like strong agreement; exact agreement is one of six. Shared evidence says where to look first: on D3 the observers cited almost entirely different lines (11% shared), and B never cited L12 to L14, where the candidate compares a wrong prediction with INV-03. On D6 they agree exactly, from different lines: A cites L01 and L35, B cites L24 and L25. B's lines show the writes stayed in the lab, but not the label before the first run that the anchors ask for. Agreement on the number is not agreement on the evidence.
- Accuracy. Against the reference, A matches four of six exactly and B three of six, and neither is two or more points away anywhere. For comparison only: MET's study of observation instruments required raters to show "At least 50% exact match with correct score. No more than 25% discrepant scores (2 or more points from the correct score)" on pre-scored videos before they rated lessons (MET project, 2014, p. 21). That is an example threshold for observers measured on many master-coded videos, not this guide's rule, and one sample of six scores cannot apply it. It still makes the point: a threshold like that would not catch B's one miss, D3, which is the one that changes the decision.
- Kappa, last, beside its n. Cohen's kappa compares the observed agreement,
p_o, with the agreement expected by chance,p_e, askappa = (p_o - p_e) / (1 - p_e), and a weighted version penalizes larger gaps more (scikit-learn 1.9.1). On the same six pairs the quadratic weighted kappa is 0.400 and the unweighted kappa is -0.154: A is one point higher than B on five of the six dimensions, and unweighted kappa gives no credit for a near miss. The kit's numbers match scikit-learn'scohen_kappa_scorewithlabels=[0, 1, 2, 3]on three test cases. Interpretation bands for kappa are themselves contested: one review argues that Cohen's suggested interpretation "may be too lenient for health related studies because it implies that a score as low as 0.41 might be acceptable" (McHugh, 2012). With six paired ratings from one session, no band applies. Use kappa across many calibration samples to watch for drift, and use sections 1 to 3 to make a decision.
Two scripted samples are not a reliability study, and none of these numbers came from real observers. They show what to compute and in what order.
Reconcile by evidence, not by averaging
Reconciliation produces one score per dimension that both observers can defend from the transcript. Guidance for master coders is to score independently and then reconcile in pairs, because "with more than two coders there's a temptation to reach consensus rather than agreement on what scores are best supported by the evidence" (MET project, 2014, p. 16).
Averaging looks fair and is the most common failure. Lab 3's third step makes it on purpose: copy the averaged card in labs/faults/ into place as your reconciled card and check it.
Reconciled card work/CAL-01.reconciled.json FAIL C2 D1: 2.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports FAIL C2 D2: 2.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports FAIL C2 D3: 1.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports FAIL C2 D4: 2.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports FAIL C2 D5: 1.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports WARN C7 D6: both observers gave 3, from different lines (0% shared); write a resolution that says which cited lines meet the anchorA 1.5 on D3 describes nothing that happened. Either the candidate collected and responded to learner evidence before and after the fault, or they did not. Averaging also hides the one disagreement that matters: rounded, D3's 1.5 becomes a 2 or a 1 by arithmetic, not by evidence.
Then write the reconciled card. For every dimension where your score differs from either observer, write a resolution that names the anchor and cites the lines. Example for D3:
"D3": { "score": 2, "evidence": ["L03", "L04", "L05", "L12", "L13", "L14", "L28", "L29"], "resolution": "B cited only L03 and L06. L12 to L14 compare Learner 1's prediction with INV-03 and respond to the wrong answer; L28 and L29 collect a reading of the record after the repair. That is anchor 2. Not 3: L28 goes to Learner 3, not Learner 1 or 2, who predicted wrong at L04 and L05."}The checker fails a resolution with no line ids, one that describes a compromise ("split the difference"), and any two-point gap without an entry in calibration_followups for the observer whose score the evidence did not support. It warns when the observers agree on a score from different lines and the card does not say which lines meet the anchor, as on D6. When the card is settled, the same check prints:
Reconciled card work/CAL-01.reconciled.json PASS C* CAL-01 reconciled from OBS-SYN-A and OBS-SYN-B: every change has a cited resolutionCalibration follow-ups are optional when there is no two-point gap, and still useful. In CAL-01, observer A credited a D6 behavior (naming production changes at L35) under D1's top anchor, and observer B missed the learner lines for D3. Both are worth one sentence each.
Coach one change
A clearance decision says whether. A coaching note says what to do next, and the rule here is one change at a time: one dimension, the lines that show the behavior, the change, a practice task, and a re-observation target. If a dimension blocks clearance, coach that one first; the checker enforces it. Observation guidance describes the same shape for a post-observation conference: the "discussion is grounded in the rubric and objective evidence from the lesson, and the conference ends with agreement on one or two small changes the teacher will make before the next observation" (MET project, 2014, p. 19).
For CAL-01 nothing blocks clearance, and D5 is the weakest dimension. At L31 a learner asks whether the idempotency key would block a legitimate second identical refund. L32 answers a different question, about retries of model requests, and L33 ("Sort of.") shows it did not land. A useful note:
- Change: restate the question before answering ("You are asking whether a real second refund would be blocked"), then answer that question. In this module the key is
refund:<ticket>:<order>:<amount>(solutions/final/src/tools.ts), so a second refund with the same ticket, order and amount returns the first payout. A legitimate second refund needs its own identifier in the key and a policy that allows it. - Practice: rehearse three learner questions about the key with a peer; restate each in one sentence, answer from the code, and ask a checking question that needs an answer.
- Re-observe: D5 at 2.
"Be more confident and less defensive when learners ask questions" is a note about the person. The checker fails it (K4) and asks for a behavior instead.
Decide and record clearance for one module version
The proposed rule (rubric/clearance-rule.v1.json) has eight requirements. R1 to R4 make the evidence usable: two independent observers, scorecards that pass the check, two-point gaps settled with follow-ups, and resolutions that cite lines. R5 and R6 are the bar: every critical dimension at 2 or higher, the others at 1 or higher, and no open accuracy or safety flag. R7 binds the record to the module card and to the files on disk. R8 checks completeness, including an expiry no more than 12 months out and at least three review triggers, one of them a module change.
The rule gives one of three decisions:
| Decision | Meaning |
|---|---|
cleared | R1 to R8 hold. The candidate may teach this segment of this module version, in this format, unsupervised |
not_yet | The evidence is valid, but R5 or R6 fails: remediation and a new observed dry run |
invalid | The evidence cannot support a decision: fix the record or observe again |
In Lab 4 you write work/CAL-01.clearance-record.json, take the fingerprint from pnpm fingerprint, and let the kit recompute the decision from the evidence and compare it with yours. For the reference record:
PASS R5 critical dimensions at 2 or higher, the others at 1 or higher PASS R6 no open accuracy or safety flags PASS R7 MOD-01@1.2.0 SEG-F02, fingerprint sha256:6607ac8cda66... matches PASS R8 record is complete Decision computed from the evidence: cleared. Record says: cleared. They match."Cleared" here means cleared to teach SEG-F02 of MOD-01 1.2.0, live and virtual, to the stated audience, until the record expires or a trigger fires. It is not a certification, and nothing in the kit certifies anyone.
The failure path: the module changes
Now change the module by one comment line, in a copy, and check the same record against it:
pnpm simulate-updatepnpm clear work/CAL-01.clearance-record.json --module .sim/module-01 FAIL R7 module files in .sim/module-01 have fingerprint sha256:bbd798d3d1e4..., not the cleared sha256:6607ac8cda66...; the clearance does not transfer to changed content...Decision computed from the evidence: invalid. Record says: cleared. They do not match.
Extended description
Title: "A clearance names what was observed". Left card, mint border: "CLR-SYN-0001" with a mint "cleared" tag; candidate CAND-SYN-01, module MOD-01 1.2.0, segment SEG-F02, format live, virtual, expires 2027-10-24, fingerprint sha256:6607ac8cda66... in mint. A dashed amber arrow leads to the right card, dashed amber border: "One line changed"; module MOD-01 1.2.0; fingerprint sha256:bbd798d3d1e4... in amber; "same version, new content"; and an amber tag "R7 FAIL: invalid". Below both: "Review again when", then five tags: fingerprint changes, new minor or major version, 12 months pass, format or audience changes, learners miss the objective. Footer: "Synthetic record. Not a real clearance. Run 2026-10-24."
This is not hypothetical. This guide's own first draft copied Guide 01's lab on 2026-10-17. By 2026-10-24 Guide 01's published download differed from that copy in one drill file, starter/scripts/trace.ts, and the draft's reference record, checked against the current files, came out invalid (F-08).
Binding to the exact content is strict on purpose. In practice you would pair it with a light path: a reviewer reads the diff and decides whether the change needs a full dry run or a short re-check of the dimensions it touches. That review is itself a recorded decision. What the rule prevents is silent transfer, where a clearance for last quarter's module is assumed to cover this quarter's.
The record is about a person
A real clearance record is personnel data about the candidate. This is practice guidance, not legal advice; check your organization's own rules with whoever owns its personnel records.
- Where it lives. In the system your organization already uses for training or personnel records, not in a shared drive or a chat thread.
- Who may read it. The candidate, the two observers, the lead instructor and the manager who signs the decision. Nobody else needs the scores.
- How long it is kept. A retention period set with whoever owns personnel records. An expired clearance can be archived or deleted on that schedule; the expiry date in the record is not a retention rule.
- What the candidate sees. Their own record, both scorecards, the reconciled card and the transcript lines each score cites, so they can check the evidence and question it.
- Recordings and transcripts. Recorded with the candidate's consent, under the same access rules.
The lab's records are synthetic; none of them is about a real person.
What this guide simplifies
- Synthetic, scripted samples. Real teach-backs are messier, longer and recorded. A program needs consent and storage rules for recordings and transcripts.
- One segment, one module. Real clearance covers several segments, often with a different rubric emphasis per segment. The module card holds a list of segments for that reason.
- No validated rubric. The anchors here are a proposed local standard. Validating a rubric needs master-coded samples, many observers and learner outcome data, none of which exist for it.
- No observer certification. Some school systems "grade observers on a pass-fail basis depending on whether they can score within a certain range of a 'gold standard'" and require periodic re-certification (Gates Foundation, "Ensuring Accurate Feedback from Observations", p. 2). This guide calibrates two observers on one sample and measures them against reference scores that were not master-coded; it certifies nobody.
- A strict fingerprint. Any byte change invalidates the record. A production program would add the reviewed fast path described in Decide and record clearance for one module version.
- Assessment design and reporting are their own subjects. How to build a practical assessment and report honest pass rates, how to run this calibration in a large lab room, and how to keep a module and its clearances current are pointers for later guides, not covered here.
Troubleshooting
Each entry was reproduced from the lab files on 2026-10-24.
| ID | Symptom | Cause | Fix |
|---|---|---|---|
| T-01 | pnpm preflight prints FAIL Node.js: 20.20.2 (needs 22.18 or later for built-in TypeScript) | Node.js is older than 22.18, so it cannot run the kit's TypeScript | Install Node.js 22.18 or later, then run pnpm preflight again |
| T-02 | pnpm: command not found | pnpm is not on your PATH | On Node.js 22 or 24, run corepack enable; otherwise install pnpm 12 from its installation page. Then run pnpm --version |
| T-03 | Command "agent" not found | You ran a module command in the kit folder, labs/starter | Run the drill commands in labs/drill/starter, the disposable copy |
| T-04 | Cannot read work/segment-plan.json. Run "pnpm reset" if a work file is missing. | work/ does not exist yet | Run pnpm reset in labs/starter |
| T-05 | FAIL module fingerprint: module files differ from the card; restore labs/module-01 from the download | A file under labs/module-01/ changed, even by one byte (an edit, or line endings converted on checkout) | Extract labs/module-01/ again from the download, and keep line endings as they are |
| T-06 | FAIL S5 D4: cite at least one line inside the drill window L07 to L27 | Your D4 evidence cites only lines before or after the live fault | Cite the lines where the fault ran, was diagnosed or was recovered |
| T-07 | FAIL C3 D3: the resolution must cite transcript lines (for example L12) | The resolution argues from memory or impression | Name the lines and the anchor they meet |
| T-08 | Decision computed from the evidence: cleared. Record says: not_yet. They do not match. | The record's decision is not the one the rule computes from the evidence | Read the R5 and R6 lines and write the decision that follows from them |
| T-09 | Moved the previous work/ to .backup/work-... after pnpm reset in labs/starter | The kit's reset starts fresh templates and moves your work aside | Copy the files you need back from the newest .backup/work-... folder |
Quick reference
pnpm preflight # environment and module fingerprintpnpm reset # templates into work/pnpm check work/segment-plan.json # LAB-001pnpm check work/CAL-01.observer-me.json # LAB-002pnpm calibrate <card-a> <card-b> --reference <card>pnpm check <reconciled> --a <card-a> --b <card-b>pnpm check <coaching-note> --reconciled <reconciled>pnpm fingerprint # value for the recordpnpm clear <record> [--module <dir>] # LAB-004 and ASM-001pnpm replay <sample-id> [cards...] # annotated transcriptpnpm test:lab1 # also test:lab2 to test:lab4, test:asm- Score before you see anyone else's card. Notes describe behavior, with line ids.
- Disagreements that change the decision first, agreement second, accuracy against the reference third, kappa last and beside its n.
- Reconcile to a whole-number anchor with cited lines. Never average.
- Coach one change: behavior, lines, change, practice, re-observation target.
- Clearance names a module id, version, fingerprint, segment, format and audience, and it expires.
04Hands-on lab
Lab 3: Calibrate and reconcile two observers
Find the disagreement that changes the decision, watch averaging fail, and write a reconciled card that settles it from the transcript. About 13 minutes, offline, in the workspace from the setup above. Outputs come from a run of this exact download on 2026-10-24 with Node.js 22.23.4 and pnpm 12.14.0; the replay output is an excerpt, and the third step fails on purpose. Before the fourth step, copy templates/CAL-01.reconciled.json into work/ and write your card from the transcript: labs/learner-labs.md in the lab download says what each score and resolution needs. The last two outputs come from the reference card.
Acceptance checks
- Your reconciled card gives every dimension a whole number: the averaged card fails C2 on D3's 1.5.
- pnpm check on your card, against observers A and B, prints a PASS line for C*: every change has a cited resolution.
- pnpm test:lab3 prints "tests 1, pass 1, fail 0".
Calibrate A against B
$ pnpm calibrate samples/CAL-01/observer-a.json samples/CAL-01/observer-b.json --reference samples/CAL-01/reference.json$ node src/cli.ts calibrate samples/CAL-01/observer-a.json samples/CAL-01/observer-b.json --reference samples/CAL-01/reference.json Check OBS-SYN-A PASS S* OBS-SYN-A on CAL-01: complete, evidence-linked, 6 dimensions Check OBS-SYN-B PASS S* OBS-SYN-B on CAL-01: complete, evidence-linked, 6 dimensions Check REF-CAL-01 (reference) PASS S* REF-CAL-01 on CAL-01: complete, evidence-linked, 6 dimensions Calibration CAL-01: OBS-SYN-A (A) and OBS-SYN-B (B) 1. Disagreements that change the decision D3 Learner evidence (critical, bar 2): A 2, B 1 Two-point gaps: none Settle each one from the cited lines and the anchors before any clearance decision. 2. Agreement between A and B, per dimension dim name crit bar A B diff status shared evidence D1 Technical accuracy yes 2 3 2 1 adjacent 25% D2 Goal and structure no 1 3 2 1 adjacent 33% D3 Learner evidence yes 2 2 1 1 adjacent 11% D4 Live failure diagnosis and recovery yes 2 3 2 1 adjacent 63% D5 Responding to questions no 1 2 1 1 adjacent 67% D6 Honesty and safety boundaries yes 2 3 3 0 exact 0% Exact agreement: 1 of 6. Within one point: 6 of 6. Same score, different evidence: D6 (0% shared). Check which cited lines meet the anchor before you treat it as settled. 3. Accuracy: each observer against the reference scores reference REF-CAL-01: Reference scores for CAL-01, written for this guide from the rubric's anchors with cited lines and a rationale for each score. Synthetic, and not master-coded by a panel of experts. dim ref A B D1 2 3 2 D2 3 3 2 D3 2 2 1 D4 3 3 2 D5 1 2 1 D6 3 3 3 A: exact 4 of 6; discrepant (2 or more points away) 0 of 6; critical dimensions on the other side of the bar: none B: exact 3 of 6; discrepant (2 or more points away) 0 of 6; critical dimensions on the other side of the bar: D3 4. Kappa between A and B, n = 6 paired ratings (too few for a stable estimate; decide from sections 1 to 3) quadratic weighted 0.400; unweighted -0.154See where each observer's evidence sits
$ pnpm replay CAL-01 samples/CAL-01/observer-a.json samples/CAL-01/observer-b.jsonL03 01:05 CAND-SYN-01 say Before I run it, write down a prediction. How many payouts will the record show for T-1042? [A:D3 B:D3] L04 01:30 LEARNER-1 say One. It timed out, so the refund failed and the agent tries again. [A:D3] L05 01:40 LEARNER-2 say Zero? If it timed out, nothing went through. [A:D3] L06 01:50 CAND-SYN-01 say Hold onto those. We will check them against the verifier, not against me. [B:D3] ... L12 03:15 CAND-SYN-01 say Learner 1, you predicted one payout. What does INV-03 say? [A:D3] L13 03:30 LEARNER-1 say Two payouts. So the first one did go through. [A:D3] L14 03:40 CAND-SYN-01 say Right. Your prediction assumed the timeout meant the refund failed. Let us see why the agent ... [A:D3]Average the two cards, and see the check fail
$ cp ../faults/CAL-01.reconciled.averaged.json work/CAL-01.reconciled.json pnpm check work/CAL-01.reconciled.json --a samples/CAL-01/observer-a.json --b samples/CAL-01/observer-b.json$ node src/cli.ts check work/CAL-01.reconciled.json --a samples/CAL-01/observer-a.json --b samples/CAL-01/observer-b.json Reconciled card work/CAL-01.reconciled.json FAIL C2 D1: 2.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports FAIL C2 D2: 2.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports FAIL C2 D3: 1.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports FAIL C2 D4: 2.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports FAIL C2 D5: 1.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports WARN C7 D6: both observers gave 3, from different lines (0% shared); write a resolution that says which cited lines meet the anchor [ELIFECYCLE] Command failed with exit code 1.Check your reconciled card against both observers
$ pnpm check work/CAL-01.reconciled.json --a samples/CAL-01/observer-a.json --b samples/CAL-01/observer-b.json$ node src/cli.ts check work/CAL-01.reconciled.json --a samples/CAL-01/observer-a.json --b samples/CAL-01/observer-b.json Reconciled card work/CAL-01.reconciled.json PASS C* CAL-01 reconciled from OBS-SYN-A and OBS-SYN-B: every change has a cited resolutionRun the lab's acceptance test
$ pnpm test:lab3$ node --test --test-reporter=./test/reporter.mjs test/lab3-reconcile.test.ts PASS LAB-003 work/CAL-01.reconciled.json settles observer A and observer B tests 1, pass 1, fail 0Show the solution discussion
The disagreement that changes the decision is D3, Learner evidence: A gives 2 and B gives 1, and D3 is critical with a bar of 2, so one observer clears it and the other does not. Averaging gives 1.5, which describes nothing that happened. L12 to L14 compare Learner 1's prediction with INV-03, which meets anchor 2, so the reconciled D3 is 2, with a resolution that cites those lines.
D6 is the same score from different lines: both observers gave 3, A from L01 and L35, B from L24 and L25, and only A's lines show the label before the first run that the anchors require. The reference card keeps 3 on A's lines and says so in a resolution. The reference is labs/solutions/lab-work/CAL-01.reconciled.json in the lab download.
More labs in this guide
Lab 1: Plan the teachable segment
Run the SEG-F02 drill in a disposable copy of the module, including the planned demo failure, then write the segment plan until pnpm check and pnpm test:lab1 pass. About 15 minutes, offline. The six steps, with every output, are in labs/learner-labs.md in the lab download.
Lab 2: Score CAL-01 with evidence
Score the scripted teach-back before you see anyone else's card, pass pnpm check, then measure your card against the reference scores. About 12 minutes, offline. The five steps, with every output, are in labs/learner-labs.md in the lab download.
Lab 4: Coach and record the decision
Write one coaching note and a clearance record, let pnpm clear recompute the decision, and watch the record become invalid against a changed module. About 10 minutes, offline. The five steps, with every output, are in labs/learner-labs.md in the lab download.
05Failure gallery
Eight ways this breaks, and how you will know
Seven of these reproduce in the lab; the other one was observed in this guide's recorded runs. Learn the symptom first; it is what you will actually see.
- F-01
refund-timeoutReproducibleThe agent says it refunded once, and the record shows two payouts
- Symptom
- Reproduce it with Lab 1, step 2: on checkpoint a, pnpm agent --ticket T-1042 --inject refund-timeout, then pnpm verify --ticket T-1042. Agent said: "Refunded $48.00 to order ORD-5521 and resolved ticket T-1042." and "FAIL INV-03 at most one payout per ticket: 2 payout(s): RF-0001 $48.00, RF-0002 $48.00".
- Diagnosis
- The payment service committed the first issue_refund and lost the response. The agent read the timeout as a failure and sent the identical call again (toolu_scripted_004, then toolu_scripted_005).
- Fix
- Checkpoint final: an idempotency key and a read-back after a timeout.
- Verify
- The same command on checkpoint final, approved with "y", prints "PASS INV-03 ... 1 payout(s): RF-0001 $48.00" and "Outcome: verified_success".
- F-02Reproducible
The fix looks broken in front of the room
- Symptom
- Reproduce it with Lab 1, step 5: press Enter at the approval prompt on checkpoint final. "Harness stop: repeated_failure after 4 model call(s)" and "Outcome: safe_escalation", with no payout.
- Diagnosis
- Enter is a denial. Two denials trip the repetition stop, and the ticket goes to needs_human. The harness did the right thing.
- Fix
- Plan for it. Say what learners are seeing and what it means, then pnpm reset, run again and type "y".
- Verify
- "Outcome: verified_success" with one payout.
- F-03Reproducible
Averaging hides the disagreement that matters
- Symptom
- Reproduce it with Lab 3, step 3, which checks the averaged card in the lab download, labs/faults/CAL-01.reconciled.averaged.json. "FAIL C2 D3: 1.5 is not a whole number. Averaging is not reconciliation: decide which anchor the evidence supports", and four more C2 failures.
- Diagnosis
- Two scores were split instead of settled. D3, the dimension where the observers sit on opposite sides of the bar, gets a number that describes nothing that happened.
- Fix
- Pick the anchor the cited lines meet and write a resolution that cites them.
- Verify
- "PASS C* CAL-01 reconciled from OBS-SYN-A and OBS-SYN-B: every change has a cited resolution".
- F-04Reproducible
Same score, different evidence
- Symptom
- Reproduce it with Lab 3, step 1: pnpm calibrate on observers A and B, with the reference scores. D6 shows exact with "0%" shared evidence, and the line "Same score, different evidence: D6 (0% shared)."
- Diagnosis
- Both observers gave 3, A from L01 and L35, B from L24 and L25. B's lines do not show the label before the first run that the anchors require. The numbers agree; the evidence does not.
- Fix
- In the reconciled card, keep the score on the lines that meet the anchor and say so in a resolution.
- Verify
- The reconciliation check passes with no C7 warning.
- F-05Reproducible
A score with no cited lines
- Symptom
- Reproduce it with pnpm check ../faults/CAL-01.observer-no-evidence.json, from labs/starter. "FAIL S4 D3: a score of 2 needs at least one cited line".
- Diagnosis
- The observer scored from an impression ("Learners were engaged") instead of from lines.
- Fix
- Cite the lines that meet the anchor, or lower the score to what the cited lines support.
- Verify
- pnpm check on the card prints a single "PASS S*" line.
- F-06Reproducible
Coaching aimed at the person
- Symptom
- Reproduce it with pnpm check ../faults/CAL-01.coaching-trait-words.json --reconciled work/CAL-01.reconciled.json, from labs/starter. "FAIL K4 trait language (natural, confident); coach a behavior, not a personality".
- Diagnosis
- The note describes who the candidate is, not what they did at which line, so it gives them nothing to practice.
- Fix
- Name the behavior and its lines, the change, a practice task and a re-observation target.
- Verify
- "PASS K* coaching note on D5 Responding to questions: one behavior, 3 cited line(s), re-observe at 2".
- F-07
simulate-updateReproducibleA clearance record checked against changed module content
- Symptom
- Reproduce it with Lab 4, step 5: pnpm simulate-update, then pnpm clear work/CAL-01.clearance-record.json --module .sim/module-01. "FAIL R7 module files in .sim/module-01 have fingerprint ..., not the cleared sha256:6607ac8cda66...", and "Decision computed from the evidence: invalid".
- Diagnosis
- One comment line changed in the module, so its fingerprint changed, and the record names the old content.
- Fix
- Review the change and observe again, or record a reviewed re-check of the dimensions it touches, for the new fingerprint.
- Verify
- The same record against the unchanged module still prints cleared; only a new decision covers the new content.
- F-08Observed
This guide's own module copy drifted
- Symptom
- Observed on 2026-10-24, in this guide's own records. The first draft's reference record, written on 2026-10-17 for MOD-01 1.0.0 with fingerprint sha256:7ca665d348c0..., checked against the module as Guide 01 now publishes it: "FAIL R7 record is for MOD-01@1.0.0; the module card is MOD-01@1.2.0" and "Decision computed from the evidence: invalid. Record says: cleared."
- Diagnosis
- After the draft copied Guide 01's lab, Guide 01 changed how pnpm trace prints a crashed run. One drill file, starter/scripts/trace.ts, differed; 30 of 31 drill files were identical. Replacing only that file changes the fingerprint and invalidates the record.
- Fix
- Re-pin the module to the published download (MOD-01 1.2.0, fingerprint sha256:6607ac8cda66...) and regenerate every record from it.
- Verify
- pnpm fingerprint prints Match, and the regenerated reference record prints cleared.
06Assessment
Transfer task and rubric
Score a second scripted teach-back on your own, calibrate against an existing observer, reconcile, coach one change, and write a clearance decision that the rule can recompute.
| Criterion | 0 · Emerging | 1 · Developing | 2 · Proficient | 3 · Exemplary |
|---|---|---|---|---|
| C1 Evidence-grounded scoring | Scores without evidence, or a critical dimension on the wrong side of the bar with no defensible line | Several scores more than one point from what the cited lines support | Every score within one point of what the anchors and lines support, and every critical dimension on the correct side of the bar | Proficient, and the notes explain why the next anchor up is not met |
| C2 Calibration and reconciliation | Averages, or adopts the other observer's scores | Resolves disagreements, but some resolutions argue from impression | Every disagreement that changes the decision settled from cited lines; every two-point gap has an observer follow-up; the written answer explains why within-one agreement is not enough | Proficient, and the follow-ups name a specific practice for the observer |
| C3 Coaching | No coaching, or coaching about the person | A change without evidence or without a practice task | One dimension, a blocking one whenever any dimension blocks clearance; cited lines; a concrete change; a practice task; a re-observation target | Proficient, and the note explains why this change comes first |
| C4 Decision and scope | A decision that does not follow from the evidence under the clearance rule | The decision follows from the evidence, but the scope is incomplete (fingerprint, format or triggers missing) | The decision follows from the evidence, the scope is complete, and every dimension below the bar has a remediation item | Proficient, and the reasons name each open flag and each dimension below the bar precisely |
| C5 Re-observation plan | No plan, or one that fails the check | Passes the check but does not target the remediation | Passes the check and includes steps that address each remediation item | Proficient, and the evidence checks would show each remediated behavior |
Proficiency standard: Proficient or higher on every criterion. Proposed local standard, not an official certification.
The full brief
samples/CAL-02/ holds a scripted teach-back of the same segment, SEG-F02 of MOD-01 1.2.0, by a second synthetic candidate, CAND-SYN-02, in a live, virtual dry run, and one scorecard from observer OBS-SYN-B. You are the second observer and the reconciler, and the program will act on your record, so it must hold up when someone rechecks it from the evidence.
Score the transcript before you open observer B's card. Then calibrate your card against B's, write a reconciled card that settles every disagreement from cited lines, coach the single change you judge most important, write the clearance record with the decision the rule gives, and write the segment plan the candidate should teach at the next dry run. Finish with a short written answer: is observer B's card a safe basis for this decision, and why can within-one agreement alone not settle that question? Use the disagreements that change the decision, or their absence, and at least two line ids.
Submit your work/asm/ folder. Allow about 40 minutes. pnpm test:asm checks completeness and internal consistency, not whether your scores are right; a reviewer scores each criterion with the rubric below and runs hidden tests on your scores and your record.
Pass rule (a proposed local standard): Proficient (2) or higher on every criterion. Critical failures, any one of which fails the assessment regardless of every other score: a clearance decision that the transcript's evidence does not support under the clearance rule; a record not scoped to the module id, version and fingerprint; or coaching aimed at the person rather than a behavior. The rubric's shape follows the University of Hawai'i at Manoa's guide to rubrics, which lists "Emerging, developing, proficient, exemplary" among its common level labels and recommends an even number of levels so that the middle does not become a catch-all (University of Hawai'i at Manoa), and Carnegie Mellon's Eberly Center, which defines a rubric's criteria, descriptors and performance levels (Carnegie Mellon).
07Instructor kit
Teach it to a room
Facilitation guide and run of show
A run of show for a 12-person lab of about 110 minutes, three demos built only from the handout's commands, misconceptions to listen for, hint ladders, live-room troubleshooting and accessibility notes. Nobody has taught it to a real cohort yet.
A 100-person day
One co-facilitator for every 12 to 15 learners, setup checked a day ahead, one demo from the front, tables of eight, a help queue and timeboxes that keep the calibration lab whole.
Facilitator dry run and readiness rubric
A dry run of about 40 minutes with two to four practice learners and two independent observers: teach the calibration sections with a live demo, a failure drill, a hint ladder, an unexpected question and a scoring calibration, then a decision rule. It is a new procedure; nobody has been observed with it.
Facilitator clearance record
A pending template that an authorized person fills in after an observed dry run, scoped to the guide version, delivery format and audience. Nobody has been cleared with it.
Evaluation plan and pass-rate report
What is evaluated and when, data handling, scoring and second scoring, a proposed learner pilot, an issue log, and a blank pass-rate report that gives every rate with its denominator. No learner results exist yet.
09Sources and verification
- [1]MET project, "Building Trust in Observations: A Blueprint for Improving Systems To Support Great Teaching", 2014 · files.eric.ed.govchecked Oct 24, 2026
- [2]Bill & Melinda Gates Foundation, "Ensuring Accurate Feedback from Observations: Perspectives on Practice" · docs.gatesfoundation.orgchecked Oct 24, 2026
- [3]MET project, "Ensuring Fair and Reliable Measures of Effective Teaching", 2013 · files.eric.ed.govchecked Oct 24, 2026
- [4]Ho and Kane, "The Reliability of Classroom Observations by School Personnel", MET project, 2013 · eric.ed.govchecked Oct 24, 2026
- [5]Smith and Kendall, "Retranslation of expectations", Journal of Applied Psychology, 1963 · doi.orgchecked Oct 24, 2026
- [6]Carnegie Mellon University Eberly Center, "Creating and Using Rubrics" · cmu.educhecked Oct 24, 2026
- [7]University of Hawai'i at Manoa, "Creating and Using Rubrics" · manoa.hawaii.educhecked Oct 24, 2026
- [8]scikit-learn 1.9.1, cohen_kappa_score · scikit-learn.orgchecked Oct 24, 2026
- [9]McHugh, "Interrater reliability: the kappa statistic", Biochemia Medica, 2012 · pmc.ncbi.nlm.nih.govchecked Oct 24, 2026
- [10]Node.js releases · nodejs.orgchecked Oct 24, 2026
- [11]Node.js 22 TypeScript documentation · nodejs.orgchecked Oct 24, 2026
- [12]pnpm installation · pnpm.iochecked Oct 24, 2026
- [13]Corepack · github.comchecked Oct 24, 2026
- [14]Registry entry for pnpm · registry.npmjs.orgchecked Oct 24, 2026
- [15]Registry entry for typescript · registry.npmjs.orgchecked Oct 24, 2026
- [16]Build, Break, and Repair a Reliable Tool-Using Agent (Dev Guide) · jordanhudgens.comchecked Oct 24, 2026
- [17]Lab download for Build, Break, and Repair a Reliable Tool-Using Agent · jordanhudgens.comchecked Oct 24, 2026
Independent work. Not affiliated with or endorsed by any vendor named in this guide.
