Normative for this repository. Where any other document conflicts with this one, this one wins.
The framework was designed across several working sessions that produced internally coherent documents disagreeing with each other. This records how those conflicts were resolved.
Three incompatible answers to "what is the shape of a lesson?" existed at once: PPP by default, a methodology-neutral pattern library, and this 7-phase hybrid. A fourth — a 10-stage flow — lived in a separate tool.
The 7-phase template is canon. PPP, ESA, TBLT, CLT, Dogme and the Lexical Approach remain available for comparison, adaptation, and teacher training; none is the default. The 10-stage flow is a delivery profile for online 1-to-1 — the same seven phases with checking and answer-reveal given their own screen-shared stages — not a rival pedagogy.
It is the only one of the four grounded phase-by-phase in named research, implemented in working software, and carried through a complete syllabus.
Two archetype name sets existed, and only one carried the per-phase minute budgets.
Identity is the position in the unit, 1 through 8. Both vocabularies resolve to
it: name is the timing-bearing set, aka is the Course Syllabus set.
⚠ Never resolve archetypes by name. "Productive Stretch" is the canonical name of archetype 5 and simultaneously the syllabus name for archetype 7. Matching on the string assigns a lesson with a 20-minute Phase 5 to a slot budgeted for 18, or the reverse.
npm run validatereports the collision on every run.
The syllabus names are arguably the better descriptors — "Pushed Output" is more honest
than "Productive Stretch". Changing them is one name field per archetype; positional
ids are what make that reversible.
Three accounts of Nation's four strands existed: per-level hours, a flat 25% each, and per-level percentages matching neither.
The per-level hours in src/data/levels.js are canon. All four strands total 60
hours at every level.
| Level | Input | Output | Language-focused | Fluency |
|---|---|---|---|---|
| A1 | 18 h | 12 h | 18 h | 12 h |
| A2 | 18 h | 15 h | 15 h | 12 h |
| B1 | 18 h | 18 h | 12 h | 12 h |
| B2 | 18 h | 18 h | 10 h | 14 h |
| C1 | 20 h | 18 h | 8 h | 14 h |
| C2 | 22 h | 20 h | 4 h | 14 h |
Form work declines as level rises; input and output grow.
The budget is per level across 60 contact hours, not per unit. An 8-hour unit does not owe two hours to each strand. Units deviate freely, and the archetype sequence is how that deviation is organised.
- This repository is the framework, A1–C2: 6 themes × 6 levels = 36 macro cells; 36 × 7 phases = 252 prompts; 2,160 handout tasks. Complete.
- A programme instantiates it for a particular course and lives with the platform that delivers it. The flagship syllabus covers A2–C1 in 48 units; A1 and C2 are first-class here and simply unused by it.
src/data/ is authoritative, validated by npm run validate against schemas/.
A previous arrangement mirrored this data into a separate repository, and the mirror
drifted — 49 activity options on one side, 60 on the other. tools/validate.mjs therefore
imports the data modules directly rather than through a generated copy. A copy is a
second source, and a second source drifts.
Prose in docs/ explains the reasoning. Where prose and src/data/ disagree, the data
wins, because the data is the copy that is tested.