Menu

Decisions

Generated from docs/decisions/ by pnpm run docs. One file per decision: what was decided, why, and what would make us revisit it (Revisit if). Code, docs and changelog cite them by number (D24); a decision replaced or revised says by which one.

Decision Date
D1 JSON Schema 2020-12 is the source of truth
D2 SCORM 1.2 only, one SCO, no sequencing
D3 Session end without unload
D4 Permanent state keys (elabora.lock.json)
D5 Contract layer frozen by a hash; changes as JSON Patch (revised by D52)
D6 Free objects: vanilla three.js r186, vendored, sandboxed, deterministic
D7 Course data shipped as JavaScript
D8 Deterministic packages
D9 Executable LMS profiles
D10 Agent interface: MCP + short skills + AGENTS.md
D11 LESSON.md for simple blocks
D12 TypeScript workspace packages, run directly by Node revised 6 Oct 2026
D13 Free design, structured content (design layer prototype)
D14 One component model, headless behaviours (prototype)
D15 Files are the source of truth; every change is an operation 6 Oct 2026
D16 Media inside the package, one master per file at the high preset 6 Oct 2026
D17 Backups in a content-addressed version store, not git 6 Oct 2026
D18 Desktop app: Electron, one engine, React 6 Oct 2026
D19 A project library managed by the app, and project archives 6 Oct 2026
D20 Format versions migrate; renaming is a command 6 Oct 2026
D21 A GPL ffmpeg, run as a separate program 7 Oct 2026
D22 Vetted fonts shipped with Elabora 7 Oct 2026
D23 A project is watched once open 7 Oct 2026
D24 The slide timeline: narration and timed steps 8 Oct 2026
D25 Free local voices: Kyutai’s Pocket TTS, run with ONNX Runtime 8 Oct 2026
D26 The full app supplies the browser for agents and tests 10 Oct 2026
D27 Word times by forced alignment: wav2vec2 character models and a Viterbi search in TypeScript 12 Oct 2026
D28 The fine timeline: timed blocks, anchors to words, effects set to the time 11 Oct 2026
D29 ElevenLabs voices with the author’s key: stage directions, dialogue, credits asked before spending 12 Oct 2026
D30 Paid AI services speak in shares of the author’s quota, with one threshold 13 Oct 2026
D31 Warnings the author ignores: in course.json, by a key that lapses 13 Oct 2026
D32 The theme’s rules are defaults under the components; overrides are said 13 Oct 2026
D33 A figure’s SVG in the page, rebuilt from an allowlist 13 Oct 2026
D34 A course’s rules for agents follow the Elabora that runs; an author’s edits are never overwritten 13 Oct 2026
D35 A plan never validated is a draft the agent writes; validated, it is the contract 13 Oct 2026, replaced by D52
D36 What paid AI services charge is a ledger of measured requests, read only within its price period 13 Oct 2026
D37 A local voices’ model can be removed, never under a generation; the lines made stay 13 Oct 2026
D38 Every optional download is listed, sized and removable in Elabora settings; removing it never touches a module 13 Oct 2026
D39 The product is called Elabora 13 Oct 2026
D40 The author’s ElevenLabs key lives in one place; the keychain is used only after the author’s gesture 14 Oct 2026
D41 A web target beside SCORM 1.2: one build, a module for a plain web server 14 Oct 2026
D42 The Revue talks to its module through a versioned postMessage bridge, shipped in review builds only 14 Oct 2026
D43 The core is the client of Elabora’s hosting; the author’s AI reads review comments placed in the sources, and only people publish, share and resolve 14 Oct 2026
D44 Everything is Apache-2.0, the sample projects’ original content is CC0 14 Oct 2026
D45 The author’s AI reads reviews with a read-only key of its own; the session stays the author’s 14 Oct 2026
D46 What a recording says, heard on this computer: NVIDIA’s Parakeet TDT 0.6B v3, downloaded once; ElevenLabs’ Scribe v2 only when the author asks 15 Oct 2026
D47 Storyline and Rise modules are imported as Elabora modules: a slide is read, not traced; what has no block yet falls back to a text, a picture or a note 15 Oct 2026, beta
D48 The plan’s document: one model for the app, Word and PDF; Word written by hand, the PDF printed by Chromium 15 Oct 2026
D49 The author’s sources live in sources/, outside the course, each with a readable version made on this computer 15 Oct 2026
D50 The plan reads as an outline: parts, short names, a duration estimated from the screens, and screens that follow their items 15 Oct 2026
D51 A new course keeps what the author said of it; the agent’s draft says what it decided alone and asks one question at a time 15 Oct 2026
D52 The plan is written at any time; its versions are made by hand, one is validated, and what changed is computed 16 Oct 2026
D53 One agent operation catalogue, several transports and explicit workflow coverage 17 Oct 2026
D54 Ship Intel Macs with media tools, without local AI 17 Oct 2026
D55 Exact compatible model releases, background upgrades and one app status panel 17 Oct 2026
D56 Changesets, release PRs and public release records 17 Oct 2026
D57 Local models published by individuals are downloaded from Elabora’s own copy on Hugging Face 19 Oct 2026
D58 The learner’s player: two configurable bars, resources, a glossary, an AI mention and credits 19 Oct 2026
D59 One package in every approved language, which learners switch in place 20 Oct 2026
D60 Charts and diagrams: blocks that each say one thing, drawn at build time, moved by the player, in step with the voice 23 Oct 2026
D61 Branching dialogues: a block that holds its graph, one pure walk replayed from the choices, the first run scored 23 Oct 2026
D62 Layer timelines and voice lines on every track of a screen 23 Oct 2026
D63 Starter blocks for scroll courses: few blocks with presentations, three primitives, three activities 24 Oct 2026
D64 Schemas have a patch version: additive changes are published as 0.1.1 26 Oct 2026
D65 Continuity between screens: a block that carries on from one screen to the next 28 Oct 2026
D66 pnpm installs the checkouts, in npm’s flat layout 28 Oct 2026
D67 Sounds: interface sounds, sounds of the story, music and ambiences on one engine, CC0 in the core 28 Oct 2026
D68 Module templates: a charter with placeholder screens, in templates/, copied by init --template 28 Oct 2026