Skip to content

Docs / Technical / Course modification

Course modification: the complete map.

Every object of a course is written by one of three means: the learner edits it directly, an AI generation writes it, or a deterministic algorithm computes it. No object influences another without passing through a mechanism that reads some objects as context. This page is the exhaustive reference, verified against the engine source.

Direct edit AI generation Deterministic algorithm

Object × means.

Who is allowed to write each state object. Several objects have more than one writer (the plan can be hand-edited, or re-drafted by three AI mechanisms).

ObjectDirect editAI generationDeterministicStatus
BriefupdateSkillDescription··
CompetencyupdateSkillCompetency / createSkill (ratified in the wizard)restate_competency / preview_competency·
Objective + dimensions·classify_objective·read-only
Learner notessetSkillLearnerNotes··
ScheduleupdateSkillSchedule·feeds planner
ParameterssetSkill*··
SourcesaddSource / deleteSource··
Placement summary·generate_placement·produced
PlanupdatePlangenerate_plan propose_plan_edit generate_graph·
Structure (sections + LPs)via plan·compute_session_plan
Concept typesetSkillNodeClass··
Graph edgesadd/removeSkillGraphEdgegenerate_graphsanitize_edges
Section contentsaveCourseSectionEditgenerate_course_section revise / request_revision·
Glossary·insert_terms·read-only
Project·generate_project update_module_project·
Sessions·generate_sessioncompute_session_plan compose_*_lps
Exercises + questionsapplyExercisePatchgenerate_sessionPED-32 grid, term-gamesdetail
AttemptsregradeAttempt addAttemptExplanationLLM judgedeterministic grading
Mastery / FSRSvia regrade·mastery::update
Lifecycle / maintenance··maintenance_ticknot wired

Read-models (never written, recomputed on demand): frontier states (available / locked / mastered / fading), mastery bands, retention forecast, retention targets, feasibility report, maintenance selection, cadence.

Exact context per generation.

What each AI mechanism actually reads. There is no shared context assembler: each builds its own prompt.

MechanismResources injectedWritesSources?
generate_planbrief (parsed) · competency · objective + dimensions (if performance) · placement summary · paramsplan → planneryes
generate_graphbrief (raw) · competency · placement summaryplan → plannerno
generate_course_sectionlearning points (Bloom) · prior sections · plan structure · forward-refs · banked terms · brief · competency · registernew section version + glossary termsyes
revise_course_section struggleprior state · weak points + accumulated misconceptions · + generation contextversion (in place)yes
request_course_section_revision requestprior state · latest request only · + generation contextversion (in place)yes
propose_plan_editcurrent plan · competency · performance summary · accumulated remarks (max 5 threads) · request (opt.)proposal (client diff)no
generate_sessioncompetency · notes · register · target points + live retention state · teaching content · review queue · exercise grid · the glossary, grouped by conceptexercises, questionsno
generate_projectfull plan · briefproject briefno
update_module_projectmodule section · per-point masteryproject sectionno
generate_placementbrief (depth / goal / prior knowledge)placement summaryyes
restate_competency / preview_competency / classify_objectivetitle · brief goal · depthcompetency, objective typeno

Everything that enters and leaves.

The table above reads by mechanism. This one reads by object: what goes into a course and into one exercise session, and what comes out. Verified against the engine source. The last block is the part that is stored and not read yet, which is the honest half.

Into a course

WhatWhere it comes fromWhat reads it
Briefyou, at capture: goal, depth, prior knowledge, time per session, levelplan, concept graph, placement, every section
Competency restatementrestate_competencyplan, graph, section, plan edit
Objective type + dimensionsclassify_objectivethe plan, when the objective is a performance
Placement summarygenerate_placementplan and graph
Sourcesyouplan, section, placement. Not graph, not project
Your remarksyou, as threadsplan revision only, five most recent threads
Misconceptionsgrading, from your attemptssection revision, and one exercise slot per session
Retention statethe retention enginesession composition, section revision, project update

Out of a course

WhatWritten byLifetime
Plangenerate_plan or generate_graph, then the deterministic plannerreplaced on replanning
Conceptsthe plannerone per concept, each with its cognitive level
Concept graphgenerate_graphprerequisite edges
Section versionsgenerate_course_sectionversioned, revisions rewrite in place
Glossary termssection generation only, one insert-or-ignore per lessondurable: only ever added to, never deleted
Project briefgenerate_project, then per-module updatesone per course

Into one exercise session

WhatDetail
Live retention stateper target concept: mastery, repetitions, lapses, interval, next review
The grid's slotsconcept, cognitive tier, allowed exercise types, scaffold rung, transfer probe
The glossary, grouped by concepta slot the glossary can cover is authored locally and never reaches the model
Teaching contentthe sections the session targets
Review queuewhat is due, most overdue first
Competency, notes, registerso the wording matches the course
Open misconceptionsone extra slot, its type forced to true or false

Out of one exercise session

WhatDetailLifetime
Exercises and questionsthe authored itemsephemeral: deleted and rewritten every session
One attempt row per answeryour answer, the score, the feedback, your confidence rating, any misconception named, whether the item was new to youkept
The retention updatemastery, repetitions, lapses, lapses since last success, interval, last and next review, stability, difficulty, first-success flag, transfer flagkept

Stored, and read by nothing yet

  • Whether you took a hint. The card offers hints one rung at a time and, after a miss, a second attempt. That second attempt travels marked as assisted, and the marker is dropped at the API boundary: the attempt row has no column for it. An answer found with a hint and an answer found alone are stored identically.
  • The scaffold rung. The grid decides whether an exercise arrives worked through, partly faded, or unaided. The grading code does not read that back, so the retention model is billed the same either way.
  • Three of the glossary's own columns. Accepted synonyms, the extra field (part of speech, gloss, translation) and the marker saying whether a term came from the AI or from you are all stored and read by no generator.
  • Threads on a section, an exercise or an attempt. Stored, but only the threads on the plan are read back into a generation.
  • Per-term retention. A glossary term is scheduled through its concept, not on its own. A term you know well and one you keep missing come back at the same time.

The three data-flows.

Dotted green = a resource read as context · solid ember = a mechanism writes its object · solid blue = a deterministic algorithm · thick ember (flow 2) = a direct edit by the learner.

Flow 1Course construction
Course construction data-flow: brief, competency and sources feed the generation mechanisms that write the plan; the deterministic planner turns the plan into sections and the concept graph.

Brief → competency → plan (or concept graph) → the deterministic planner → sections, learning points. Sources feed plan, section and placement, but not graph or project.

Flow 2Edit & revise
Edit and revise data-flow: the learner directly edits or triggers a mechanism; revising the plan re-injects accumulated remarks, while revising a section uses the prior state, accumulated misconceptions and the latest request.

Three gestures: direct edit, trigger a mechanism, and the context it reads. A revision regenerates in place: the prior state is always re-injected.

Flow 3Learning loop
Learning loop data-flow: the planner produces sessions, the AI writes exercises, your attempts are graded, the FSRS engine updates mastery, which feeds session generation, section revision and maintenance.

Planner → sessions → exercises → your attempts → the retention engine (FSRS) → mastery, which feeds session generation, section revision and maintenance.

The accumulation asymmetry

Revising the plan re-injects your accumulated remarks (up to 5 recent threads). Revising a section does not read your threads. Its accumulated channel is the misconceptions from your attempts, and a typed revision request uses only your latest message.

Notes & open points.

  • Remarks accumulate only for the plan. The thread digest is read at exactly one place; section / exercise / attempt threads are stored but no generation reads them back today.
  • Two objects are read-only. Objective (type + dimensions) and the glossary have no write command yet, so the learner sees but cannot correct them.
  • Regrading writes learning state. Correcting a grade rewrites the score and replays the retention model for that concept, a rare lever where the learner writes mastery directly.
  • Deterministic where it counts. Scheduling, review selection, the exercise grid and most grading are pure computation, not AI: the AI authors content into slots the engine has already chosen.
  • Session generation has its own reference. The grid that fixes the exercise set (its six stages, every calibration constant, the prompt it assembles and its known gaps) is documented in the session engine page.