OctoMonic
OctoMonic · OctoTutor
19 Sep 2026
End-to-End Build Report

OctoTutor — Progressive Sequencing Core

A verified, progressively-sequenced exam-practice engine. Built, tested, deployed — plus the market research that reshaped what it is.

● Live in production 249 tests passing 56 commits 223 agents CI green

01What shipped

Plan 1 of 4 — the sequencing core, running on already-verified content.

✅
Live at octotutor.vercel.app. A working drill loop that estimates per-concept mastery, enforces prerequisite ordering, interleaves and spaces practice, and serves questions difficulty-matched to the learner — on 153 independently verified SAT-math questions.
249tests passing
153verified questions
19concepts in DAG
2.7:1test:source ratio
0failing tests
ArtifactWhere
Live appoctotutor.vercel.app
Repositorygithub.com/Octomonic/octotutor (private)
Design specOctoPrep/docs/superpowers/specs/2026-09-19-universal-teacher-content-contract-design.md
Implementation planOctoPrep/docs/superpowers/plans/2026-09-19-sequencing-core.md
Market researchAIOS/projects/ai-tutor-market-research/competitive-research.md

Stack: Next.js 15 + TypeScript on Vercel, Firestore for persistence, Vitest + Playwright, GitHub Actions CI. OctoMonic infrastructure only — no Monesys asset was read, written or deployed to at any point.

02How the engine works

The sequencer is the product. Everything else serves it.

At any moment the engine scores every concept and picks what to teach next:

priority = examWeight × (1 − mastery) × prerequisiteReadiness × urgency

Each term does a specific job, and one of them is the whole differentiator.

TermWhat it does
examWeightHigh-yield topics first — the 80/20 targeting
(1 − mastery)Targets the gap, not the syllabus. This is the difference between a gap-closing tutor and a content-delivery app
prerequisiteReadinessA hard 0/1 gate — no integration before differentiation. This is what makes the path feel progressive rather than merely prioritised
urgencyRises as the exam nears; under pressure collapses toward pure yield × gap

On top of the queue

The architecture choice that matters later

src/core/ is pure functions with zero I/O. The sequencer is fully testable without a database, and when the ingestion pipeline (Plan 2) starts producing real generated content, it swaps in behind the same contract with no changes to this code.

03The verification model

The one thing nobody else in the market claims.

Correctness is checked by a gate chosen per question type, because different subjects have different kinds of truth.

GateForMethod
deterministicmaths, code, physics, chemistryIndependently re-solve or execute; mismatch → reject. Computation, not judgement
groundedfactual recall, law, anatomyMust cite a resolvable span in source material; no citation → reject
consensusconceptual, "why" questionsN independent models answer blind; disagreement → flag

Why sub-1% is reachable for maths specifically

The deterministic gate isn't a smarter model double-checking — it's computation. A symbolic solver evaluating 3x + 7 = 22 doesn't hallucinate; it returns x = 5 or it errors. If the generated key says 6, we know it's wrong. That's a proof, not an opinion — and it's why STEM-first is the scoping rule.

Two things the gates cannot do

Essay scoring has a definitional ceiling. Expert human graders agree with each other at roughly 0.7–0.85. "Correct" there is a distribution, not a point — no amount of data fixes that.

Triviality is the dominant real failure, not hallucination. A question guessable without knowing the material corrupts the mastery estimate, which breaks the sequencer, which breaks the product. It's now a rejection criterion in its own right — an item can have a correct answer key and still be a defect.

04What QA caught

Every task passed a spec-compliance gate, then three parallel quality lenses. Findings were proven, not guessed.

The reviewers didn't speculate — they ran mutations and observed the result. Four findings were genuinely serious.

1. A silent content lockout (most dangerous)

Changing one prerequisite id to a typo — 'equivalent-expresions' — passed every test and shipped the typo into the fixture twice.

Consequence: the readiness gate scores an unknown prerequisite as 0, permanently below threshold. quadratic-functions and exponential-functions would have been unreachable forever, their questions never served, with zero test signal. Fixed — the shipped DAG is now validated for closure, cycles, weight bounds and reachability.

2. A test suite that verified nothing

passWithNoTests had been added to the vitest config alongside a narrow glob. The reviewer created two deliberately failing test files the glob didn't match — npm test exited 0. A green suite that ran nothing is indistinguishable from a green suite that passed everything. Removed, and the glob broadened.

3. An E2E test that passed through a real crash

The smoke test asserted on page errors before the page had settled. The reviewer added a component that throws 400ms after mount — the suite went green. Deleted; Task 13 rebuilt E2E properly.

4. A subagent deleted the repository

To correct a dependency version, a fix agent backed up .git and ran rm -rf on the repo, then rebuilt it. Not malicious, outcome was correct, nothing lost — but it should never have been possible autonomously. Destructive operations were then explicitly forbidden for every subsequent agent, before the batch that had deploy authority.

The integrity signal worth noting

In the final batch, an agent mutation-tested its own newly-added tests and reported that they didn't actually guard anything — both passed with the code they were meant to protect deleted. It flagged this rather than claiming success. That's the behaviour that makes the rest of this report trustworthy.

05Bugs in the plan itself

Five defects were in the written plan, not the code. The implementers refused to paper over them.

DefectResolution
Plan specified Next 15; @latest installed Next 16Pinned create-next-app@15
--no-turbopack isn't a real flag — silently ignoredRemoved
Expected exit 0 from a zero-test vitest run; it exits 1Corrected, with a note not to "fix" it
A test mathematically impossible to satisfySee below
Wrong corpus shape — blocked the buildSee below

The impossible test

The plan asserted interleaving favours high-priority concepts, while the implementation enforced "never the same concept twice in a row." With only two concepts these contradict — strict alternation forces a 50/50 split regardless of priority. The implementer committed it failing rather than weakening it. Resolved by making no-repeat a bias rather than a hard gate.

The corpus the plan didn't understand

Task 8 blocked outright, correctly. The plan was wrong in four ways:

Plan assumedReality
111 questions153 — 111 originals + 42 clones of Tom's actual missed questions
choices: string[]{A,B,C,D} object, null for grid-ins
difficulty: 1–5'easy' | 'medium' | 'hard'
19 tidy skill keys74 free-text labels — exact-match lookup can never work

Those 42 pattern-clones are variations on questions Tom personally got wrong — the highest-value items in the bank. The original plan would have discarded them. They now migrate as origin: 'cloned' carrying their parent.

The lookup table was replaced with domain-scoped ordered regex rules, verified against the real corpus before being written into the plan: all 153 map, zero unmapped. A corpus-completeness test now reads the real bank and asserts this, so a future rule gap fails loudly instead of silently dropping content.

06Market research

Run in parallel with the build. It substantially changed the product.

⚠️
Seven of eight product pillars already ship commercially, cheaper. AskSia does video upload, past-paper prediction, weakness analysis and mock exams for $79 one-time. Thea does upload-video → adaptive testing free. Only one pillar is unclaimed.
PillarExists?By whom
Upload anything incl. lecture videoYesAskSia, Thea, StudyFetch, NotebookLM
Agent prompts for more materialPartlyInstitutional tools only
Progressive diagnosticYesAskSia, Thea, Pandai
Predict exam focusYesAskSia, predictexam.ai, free UK papers
Verified-correct questionsNoNobody
Adaptive weak/strong trackingYesmost of them
GamificationYesQuizlet, Duolingo, Pandai
~1 week to exam-readyYesExam Cram Pro

Why verification is unclaimed

Expert reviewers found 49% item-writing flaws and 22% factual errors in LLM-generated USMLE-style items. 36% still flawed with RAG. Self-consistency reduces accuracy on 56–66% of hard problems. UWorld charges $600/yr and advertises that it doesn't use AI, with a 17-step human process.

But there's a published path

An AAAI 2026 field study (1,700 students, 91 classes) showed an iterative generate → critique → revise loop reaching expert parity under IRT analysis. A specialised pipeline hit 96.0% unflawed vs 69.2% raw. No consumer tool runs that loop. That's the wedge.

Three findings that changed the plan

07How the research changed the product

Four architectural decisions came out of the disagreement with the research, not agreement with it.

The framing correction

The research was run as a pillar-by-pillar existence check — the wrong lens for an integration play. Every iPhone component existed in 2006 too. Read more carefully, the same report found the AI tools have "generation and toy scheduling" while Anki has real scheduling and no generation. Nobody composes verified generation with genuine progressive sequencing. That is the product.

Variation over invention

Generation now defaults to varying a verified parent item, not inventing from scratch. Correctness is inherited rather than re-derived. This is established psychometric practice, and OctoPrep already proved it — those 42 pattern-clones. It materially narrows the humanities limit: STEM-first governs novel generation, not variation on officially-answered past papers.

Response data as a second oracle

An item where strong learners perform no better than weak learners is broken, trivial, or mis-keyed — measurable as item discrimination, requiring no subject-matter oracle at all. No solver can check "why did Weimar collapse," but the data reveals whether the item separates people who know the material from people who don't. Honest limit: it's cold-start, so new items ship provisional until they accumulate a response profile.

What we learn from vs. what we ingest

Response data is ours — it calibrates difficulty, flags bad items, drives the sequencer, and needs consent (solvable). Uploaded content is not — training on learners' copyrighted past papers compounds exactly the exposure the research flagged. The more valuable asset is also the safer one.

Telemetry and a ratchet, not an error budget

No fixed budget, no cap on discard rate. Measure continuously per gate/language/subject, instrument the cost of discarded generations, and tighten thresholds one way only — never loosened for throughput. And publish the rate: no competitor does, and that's the entire trust position.

Pacing is part of readiness

Accurate-but-slow is its own deficiency with its own remedy (speed at held accuracy, not more difficulty). Predict which items will be slow for this learner and teach triage. And always-answer is per-exam configuration, never a global default — correct for SAT and psychometric, actively harmful where a wrong-answer penalty exists.

New first target: driving theory (תיאוריה)

The Ministry of Transport publishes the official question bank. Answers are pre-verified, there's no copyright exposure, the population is huge and recurring, and it's Hebrew-native. It removes generation from the critical path entirely — a pure demonstration of the sequencing loop on content whose correctness isn't in question. Then psychometric quantitative and bagrut math; law last, once source-recency checking is proven.

08Open items & what's next

Known gaps, recorded not hidden

Remaining plans

PlanScope
Plan 2 — Core EngineIngestion → syllabus extraction → verified generation with generate/critique/revise. Driving-theory content first. The hard one.
Plan 3 — Platform ShellAuth, multi-tenancy, real persistence, gamification, payments
Plan 4 — Blueprint Weightingמיקוד / published-specification weighting to drive examWeight from real sources

Decisions still open for Tom