The learn-loop's decompose step. Point it at a course program or syllabus and
it produces an ordered list of masterable topics — the study sequence
my-professor quizzes on and myprofessor due ranks.
It reads the program via the MyThingsLab mythings.corpus
seam and emits mythings.mastery.Topics, so the whole study cluster shares one
notion of "a topic".
# Decompose a program into a machine-readable topic list (TOML)
mysyllabus decompose --program ~/Desktop/ul-course-program.pdf --engine claude \
--out .mythings/topics.toml
# Or a human-readable outline grouped by module
mysyllabus decompose --program ~/Desktop/ul-course-program.pdf --engine claude --format md--engine noop (default) makes zero Engine calls and returns no topics (a soft
failure, exit 1) — use --engine claude for a real decomposition. --program is
repeatable and accepts files or directories (.pdf, .md, .txt, .rst,
.tex); --cache memoises PDF text extraction; --max-topics caps the list.
One Engine call: "decompose this program into an ordered list of masterable
topics, prerequisites first, using only what the program names." The program is
read whole (not shortlisted — decomposition needs the entire document). The
reply is parsed deterministically into order-preserving, slug-deduped Topics;
topics are never invented beyond what the program states. A decompose writes
only to stdout or a local --out file — never a repo PR. (Publishing the topic
list to the shared study repo is a deliberate follow-up.)
The TOML output is the durable, human-editable topic list the rest of the cluster reads the study set from; the markdown output is for reading.
python -m venv .venv && source .venv/bin/activate
pip install -e ../my-things-core -e ".[dev]"
pytestMIT — see LICENSE.