Prose & canvas state
Prose analyses the state the canvas is in. It never captions the interface.
#Captioning the interface instead of the state
Prose that describes controls rather than states — drag the slider to see what happens, notice how the curve changes — instructs the reader to operate the interface and leaves the conclusion undrawn. The constraint is the opposite: prose describes the state the canvas is in, not the controls that reach it. A sentence that remains true when the canvas is replaced by a screenshot of a slider is a caption rather than an argument.
#Steps as anchors for claims
A advances the scene and cues fire against it, so the sentence at step two stands beside the canvas as it is at step two. One anchor drives both, and along the authored path the prose and the canvas agree by construction.
scene{
Fitted straight, the residuals fan out at both ends — the model is
missing curvature, not noise.
===
A quadratic term flattens them.
}[
canvas.graph{
scatter#readings(x: 1, 2, 3, 4, 5; y: 2.0, 2.4, 3.1, 4.8, 7.4)
cue{ fit#linear(of: #readings; model: polynomial) }(in: 0)
cue{ residuals(of: #linear) }(in: 0)
}
]#Every marker anchored, every anchor reachable
A step marker is a timeline trigger, not a paragraph break — paragraphs separate with a blank line. Three things follow, and all three are checked against the whole set of markers rather than against the largest one.
- A scene whose detail never changes — a table, an equation, a code environment with no cues — carries no markers.
- Every marker has something anchored to it. Cues at
in: 0andin: 2under two markers leave step 1 firing nothing, so the reader advances the scene and watches it stand still.
Neither is a compile error: a scene with three markers and one cue is a valid scene. The third rule is, and it is the mirror of them — an anchor past the last marker is refused, because the step it names does not exist.
scene{
One.
===
Two.
}[
canvas.graph{
cue{ point(x: 1; y: 1) }(in: 3)
}
][semantic]'cue.in' anchors to step 3, but the scene has 1 step (valid: 0–1)
!cue.to and !cue.zoom take at: on the same clock, and are refused the same way. Motion covers the anchors themselves.#Reader exploration off the authored path
A reader moving a parameter leaves the authored path. The departure is reversible: scrubbing back re-synchronises the canvas with the narrative. The constraint is not that unnarrated states are unreachable, but that every state a document exposes is one its prose remains true in. Parameters and cues covers which states a document should expose.
#Five checks on a sentence
- A claim names its subject. The graph shows a relationship names none.
- No sentence takes a control as its subject;
slider,drag,clickandhoverin narrative prose indicate the failure. - A number in prose is read live rather than typed — see Reading computed values in prose.
- One claim per step. A sentence requiring an and is usually two.
- The sentence is about the canvas at this step, not the one two steps on. Prose describing a mark the reader cannot see yet is a caption written early.