Where you are. You can walk a payment through five parties and say whose ledger changed at every hop, and you can state the tokenisation claim precisely enough to test it. That is the content so far. This lesson adds no finance at all. It hands you the reading system instead: the marks this course uses so that a permanent claim and a perishable one never wear the same ink.
Two sentences about money
Here are two sentences about money.
The first could have come from a goldsmith’s customer in the 1660s: the balance your banker shows you is not your money in storage, it is the banker’s IOU to you. Seven lessons have leaned on that sentence, and it will still be true when this course is too old to read.
The second appeared in a market report last quarter: the total value of stablecoins in circulation, quoted to three significant figures. Whichever figure it gave, it is already wrong; the number moved the week the report shipped.
A course about money has to carry both kinds of sentence. Print them in the same confident type and the sorting falls to the reader, who is the person least equipped to do it. So this course marks the difference on the page itself, and this lesson is the key to the markings.
The idea in one paragraph
Every claim in this course is one of two kinds, and each kind carries its own proof obligation. A claim about how the machinery behaves - netting collapses the cash that moves, a relayed transfer can strand a half-done payment - is runnable: an exercise or a figure demonstrates it, the way an assertion is backed by a test. A claim about the current state of the field - who issues what, what a market is worth, what a rulebook allows this year - is dated: it carries a machine-readable expiry, because it will rot, and the honest move is to say so in a form a program can sweep. Everything unusual about these pages - the coloured callouts, the hidden answers, the compulsory denominators, the date stamps - is the type system that keeps the two kinds from blurring.
The shape of every lesson
Before the marks, the page they sit on. Every lesson is the same seven parts in the same order, so your eye already knows the route; it is worth seeing it drawn once.
Wider than the screen; scroll it sideways.
The five callouts, and the blocks around them
Five coloured asides carry most of the voice, and each has one job. A plain callout restates the section in a single stripped sentence, for when you want the recap without rereading the build-up. An analogy callout maps the new thing onto a system you already operate; you just read one. An example callout is a real case, with names and dates, never a hypothetical. A gotcha callout is the trap: the misreading that costs an afternoon, stated before you fall in. A term callout defines a technical word at the moment you first need it; three are waiting further down this page.
Three more blocks carry the measurements and the motion. A question block, in every Check yourself section, hides its answer until you click; commit to your own answer first, because the reveal teaches most when it lands against something. A results table always carries n, the number of attempts behind it, because a rate without a denominator is not a measurement: seven successes in ten and seventy in a hundred both print as 70%, and only the denominator tells you which claim you are weighing. A filmstrip shows motion as sampled, captioned frames - the site ships almost no JavaScript and no video - and two frames is also how a before-and-after is done.
Claims with an expiry
Some dated claims are about the past. The year is part of the fact and the fact never changes, so those sit in history blocks in the lessons behind you, verified once and done. The dangerous claims are about the present. For those the course uses an asof block: it stamps the claim with the date it was last verified. Here is a live one, doing its job on this page:
The stamp is data, not decoration. The build rejects a free-text date like “mid-2026”, because a date a program cannot parse is a date no program can sweep; a full day and a bare month both validate. Staleness then becomes a query: one search over the lessons for the date attribute returns every perishable claim in the course - a re-research worklist, sorted oldest first.
The gates
The pipeline behind these pages has the same failure mode as any build system: its worst failures exit 0. A content path that matches nothing builds a green, emptier site. A directive plugin that fails to load leaves raw fence characters sitting in the page as literal text. Nothing in the exit code separates a course from a ruin with good margins, so after the build, separate checks read what was actually produced.
One more term belongs to the figures, because they are held to the same discipline as the prose. Every diagram in this course is hand-written SVG: source code, diffable and reviewable, never a pasted image.
None of this asks for trust. The gates are code, the stamps are searchable, and the exercise below hands you the sweeper, so whenever you doubt the course you can hold it to its own rules.
Check yourself
1. The goldsmith sentence has needed no date for three and a half centuries; the market figure could not survive a quarter without one. What separates the two claims?
The first states how the machinery works: a deposit is the bank’s IOU, an invariant you can check against the machinery in any era, which makes it runnable. The second is a reading of a moving quantity, true only at the instant of measurement, so the date of measurement is part of the claim. Strip the date and it silently becomes a claim about now - one that nobody has checked.
2. Why does a results table refuse to render without its n?
Because a rate without a denominator is not a measurement. Seven successes in ten attempts and seventy in a hundred both print as 70%, and they deserve very different confidence. The denominator is what separates a claim you can weigh from one you must take on faith, so the construct makes omitting it structurally impossible rather than merely bad style.
3. The build exits 0 and the site renders beautifully. Name two things that can still be wrong, and what catches them.
A content path that matches nothing builds a green site with lessons silently missing, and a term callout whose word never reached the glossary renders perfectly. The exit code sees neither. The lesson gates catch both, because they run after the build and read what it produced: one counts pages against the expected total, the other cross-checks the term pairing in both directions.
4. You update a stale market figure but keep last year’s date on its asof stamp. The build stays green. What did you break?
The provenance. The date records when a human last verified the claim, so a fresh figure under an old date hides real verification behind a stale stamp, and the sweep will schedule re-research the claim already had. The reverse edit is worse: a new date on an unchecked claim forges a verification that never happened. No gate catches either, which is exactly why the discipline is stated as a rule: claim and date move in the same edit, always.
Do this
Implement the sweeper, then point it at the course.
Open code/directive_sweep.py. It finds every asof stamp in a lesson and prints its age. The one TODO(you) is age_days: a full date parses as itself, and a bare month such as 2026-08 counts from the first of that month. The reference date is pinned to 15 August 2026 inside the file, so the output never depends on the day you run it; the sweep is a regression test, not a clock.
From the module’s code/ directory:
python directive_sweep.py
The default target is lesson 7, which carries exactly one dated claim. Expected output:
../07-the-tokenisation-claim.md: asof 2026-08 is 14 days old
1 dated claim(s) swept
The final line is 1 dated claim(s) swept. Then turn the tool on this lesson - python directive_sweep.py ../08-how-to-read-this-course.md - and it should find the framework-version claim above and nothing else. Any lesson path works, which is the point: the course’s honesty about its own ageing is not a promise, it is a query you can run. A completed age_days is in solutions/directive_sweep.py.
What you can now do. You can recognise every mark on any page of this course: name the job of each coloured callout, say why a results table cannot exist without its denominator, read an asof date as the expiry it is, and explain what the gates catch that a green build cannot. And you can hold the course to its own rules, because the sweep that lists ageing claims runs on your machine, against any lesson, in under a second. The next lesson installs the only two libraries the whole course ever needs; everything you have run so far used the standard library alone.