Every run of every picture, and every republish that changed it, with the Gesso version that made it.
When one looks worse than the run before, open "since the run before" for what changed in between. Tick two runs to
see them side by side.
Hands-off: made by the skill, untouched since3 versions since the run before (POC 0.25.1 to POC 0.26.0)
POC 0.25.1: `from-finish --in-place` is the skill's own step 6a inside its run, so the lesson can still be sealed hands-off; a copy without it is a recut. Once a run is sealed, its draft publishes leave the lesson history (they were work in progress). The history shows a Hands-off, Recut, Edited, or Unsealed tag on every run, and a band across the strip of each one that isn't hands-off.
POC 0.25.2: Lesson pages on the site have a Known problems section: what the run's reviews found and left as they are, by step, and links to the issues filed about the run (open, or fixed in a later version). The tile says how many. `site-refresh` updates it as issues are filed and closed, without touching the lesson, so it stays hands-off.
POC 0.26.0: The paint-lesson skill is a short spine (`SKILL.md`, about 700 words: arguments, the rules for the whole run, the steps in order) plus one file per step in `steps/`, read when that step starts, so each step's rules are fresh when they're used. The runs behind each rule moved to `docs/skill-history.md`.
POC 0.26.0: `publish --final` checks before it seals: the reviews ran, notes are complete, every step has its summary, brushes, strokes, `made_with`, and regions, and the publish checks are clean (or a long step is explained in `long_steps_kept`). It refuses with a list until they pass.
POC 0.26.0: The skill gaps two hands-off runs reported are fixed: the redo cap is spelled out, diagram previews need a publish first, `long_steps_kept` is in the notes schema, the text review checks `ok` steps' main shapes against the finish, and reviewers use the venv to zoom.
POC 0.26.0: The "uncommitted code" flag on a lesson's stamp works again (it never fired since 0.23.1).
Hands-off: made by the skill, untouched since12 versions since the run before (POC 0.17.1 to POC 0.25.0)
POC 0.17.1: The backward pass shifts the broad tone of matching areas inside later boxes to the finish's, keeping the brushwork, so box edges don't show as straight tone steps (sailboat run: a lighter rectangle in the water).
POC 0.17.1: `lock-steps` keeps a step redone after a lock as its new raw render, instead of locking the stale one.
POC 0.18.0: Values tables add to the instructions, never replace them, and are for depth on one thing. Color sequences like a sunset sky are named in the instruction, in order. The table now sits right under the instructions.
POC 0.18.0: `publish` lists paints an instruction or table names that aren't in the step's colors (`paints_not_listed`).
POC 0.18.0: Dense texture is split into passes over the whole area, never cut along a line. The step review flags `split_edge` and `shape_change` (a path or row changing shape), and the skill fixes both instead of leaving them.
POC 0.19.0: `--palette <name>`: lessons mix from the painter's own tubes (`palettes/owner.yaml`, 30 tubes) instead of the technique's five, and "What you need" lists only the tubes the recipes use. Big palettes are searched with a shortlist so a recipe still takes under a second.
POC 0.19.0: A lesson from a big palette shares a small set of tubes: the 8 most useful, plus one more at a time only when a paint can't get close without it (the lavender lesson went from 28 tubes to 12).
POC 0.19.0: A painter's own tubes are called by their labels ("dark ultramarine" isn't shortened to "ultramarine").
POC 0.20.0: No texture arrives all at once: `publish` and `step-pairs` measure `texture_jumps` (a step turning over 10% of the canvas from flat to textured), and the skill fixes each one with `split-texture`, which inserts free in-between passes (the step's marks arriving darkest first) and renumbers the step images.
POC 0.21.0: Research on flower masses and water reflections (23 more sources, 61 in all), with rules and seven new stroke results in the paint-along technique.
POC 0.21.0: `split-texture`'s new steps start blank (their own colors and text, not the parent's copy).
POC 0.21.0: `canvas-view` takes full paths and refuses missing files; old crops are dropped after steps are renumbered.
POC 0.21.0: A paint one tube already gives (within the slack) uses that tube straight; `publish` lists `duplicate_recipes`.
POC 0.22.0: The main subject keeps its shape: both reviews flag a subject whose outline, size, posture, or markings change between steps (the finish included) as a shape problem, never as drift, and the skill fixes it.
POC 0.22.0: `finish-from-step` rebuilds the finish from the last step, adding only its details; `carry-forward` copies a later step's subject onto an earlier step, free.
POC 0.23.0: A private lessons site (`site/`, deployed with Cloudflare Pages and locked with Cloudflare Access): `publish` also writes `lesson-standalone.html`, one self-contained page per lesson, and `site-add` puts it on the site.
POC 0.23.1: A lesson keeps the version it was made with (`gesso.made`) when it's republished; the footer says "republished with" the newer one, and the lessons site's tiles show the made-with version.
POC 0.23.1: The dirty flag only counts code that shapes a lesson (spike, techniques, palettes, the skill), not site/ or docs/.
POC 0.23.2: Lesson history: every publish that changes a lesson's pictures or text is kept (`site/history/`: a strip of every step and a record of the version, commit, cost, redos, and checks; the full lesson in `<lesson>/versions/<n>/`), and `site/history/index.html` shows each picture's runs newest first, what changed between runs, the owner's scores (`history-rate`), and two runs side by side. `history-backfill` recorded the runs from before.
POC 0.24.0: Spike (#8): `from-finish` cuts every step picture from the finished painting instead of rendering it, in a copy of the lesson. Each pixel goes to the step whose region and paints fit it (things in their own small box, like the balloon, are cut out whole with GrabCut), earlier steps paint straight through where later ones go, the first of several steps over one area is a flat coat, and the passes after it go on by value, darkest first, in equal shares. No renders, so nothing drifts and no lock is needed. `--steps` cuts only a group of passes and keeps the rest rendered (the hybrid). Findings: `docs/spikes/from-finish.md`.
POC 0.24.1: Each lesson's tile on the lessons site has a version pick list: every kept run of that picture, newest first, labeled with the Gesso version, the time it ran, and how its steps were made. Pick one and open it. Each version's page is written once to `lessons/<slug>/v/<run>/` and never rewritten; `site-refresh` adds new runs.
POC 0.25.0: Hands-off lessons: the skill's last publish is `publish --final`, which seals the lesson as made by the tool on its own. Every lesson records its provenance (hands-off, recut, edited after the seal, or unsealed), and only hands-off lessons go on the lessons site and its version lists. `from-finish` copies are recuts. The lesson history shows a Recut, Edited, or Unsealed ribbon across each run that isn't hands-off. `provenance-mark` records what's known about runs from before seals.
red-sailboat_skill_20261112-100455#3
POC 0.17.0Editedeebbcbc, published with POC 0.23.12026-11-11 11:40 · publish 1
Edited after the skill finished (After the skill finished, its steps were relocked by hand with newer lock code (tone seams).)4 versions since the run before (POC 0.14.1 to POC 0.17.0)
POC 0.14.1: Canvas crops split the cut evenly between both sides, shifting only as far as the subject needs.
POC 0.14.1: No band-fill render when the photo already has the frame's shape: the cut-off edges fill the bands for free.
POC 0.14.1: `grid --percent`: lines at every 10% of width and height, so measurements match the page's percentages on any canvas shape.
POC 0.14.1: A stroke result for horizontal dashes on water (ripples, sun paths, reflections).
POC 0.15.0: Step pictures no longer repaint earlier work (#30): each step says where it paints (`regions` in plan.json), and `lock-steps` puts back any change outside them, free. Raw renders stay in trials/raw/.
POC 0.16.0: `protect` boxes: inside a step's regions, things already painted that must stay put. There only the step's own paints may change anything (matched mostly by hue, so shaded strokes count), with a crisp edge (#30).
POC 0.17.0: `lock-steps` runs a backward pass from the finish when every step has regions: wherever no later step paints, a step already shows the finished painting, so the last step only shows what it adds (#30).
Unsealed: from before seals, how it was made isn't recorded2 versions since the run before (POC 0.13.0 to POC 0.14.0)
POC 0.13.0: Show, don't tell: when something takes more than a sentence to explain (a shape, a stroke path, which value goes where), the lesson shows it with a diagram, a `values` table, or the step picture, and the words point at it.
POC 0.13.0: Steps can carry a `values` table (dark, mid, light: paint and where), shown with swatches on the page and in the walkthrough export.
POC 0.13.0: `publish` also lists single instructions over about 40 words in `long_instructions`.
POC 0.13.0: The word budget is a signal, not a cap: a long step is trimmed only where it repeats the page; an instruction doing two moves is split; a step that really has a lot to do is split in the plan, moved into strokes or a diagram, or kept long with a reason. Length is checked before the step review, so the reviewer catches any instruction trimming made vague.
POC 0.14.0: `--canvas WxH` (inches): the picture is fitted to the painter's canvas before planning, cheapest first: no change, a free crop that keeps the subject, or one render that extends the scene. A rectangular canvas hangs either way, so it follows the picture unless `--orientation` says otherwise.
POC 0.14.0: Renders stay in the image model's nearest frame; every step picture the painter sees is cropped to the canvas.
POC 0.14.0: Canvas size scales the lesson: the detail budget (fewer parts on a 10x10, more on a 24x30) and brush sizes.
POC 0.14.0: The page shows the canvas size and how many inches each 10% is, so grid positions can be marked with a ruler.
Hands-off: made by the skill, untouched since7 versions since the run before (POC 0.22.0 to POC 0.25.0)
POC 0.22.0: The main subject keeps its shape: both reviews flag a subject whose outline, size, posture, or markings change between steps (the finish included) as a shape problem, never as drift, and the skill fixes it.
POC 0.22.0: `finish-from-step` rebuilds the finish from the last step, adding only its details; `carry-forward` copies a later step's subject onto an earlier step, free.
POC 0.23.0: A private lessons site (`site/`, deployed with Cloudflare Pages and locked with Cloudflare Access): `publish` also writes `lesson-standalone.html`, one self-contained page per lesson, and `site-add` puts it on the site.
POC 0.23.1: A lesson keeps the version it was made with (`gesso.made`) when it's republished; the footer says "republished with" the newer one, and the lessons site's tiles show the made-with version.
POC 0.23.1: The dirty flag only counts code that shapes a lesson (spike, techniques, palettes, the skill), not site/ or docs/.
POC 0.23.2: Lesson history: every publish that changes a lesson's pictures or text is kept (`site/history/`: a strip of every step and a record of the version, commit, cost, redos, and checks; the full lesson in `<lesson>/versions/<n>/`), and `site/history/index.html` shows each picture's runs newest first, what changed between runs, the owner's scores (`history-rate`), and two runs side by side. `history-backfill` recorded the runs from before.
POC 0.24.0: Spike (#8): `from-finish` cuts every step picture from the finished painting instead of rendering it, in a copy of the lesson. Each pixel goes to the step whose region and paints fit it (things in their own small box, like the balloon, are cut out whole with GrabCut), earlier steps paint straight through where later ones go, the first of several steps over one area is a flat coat, and the passes after it go on by value, darkest first, in equal shares. No renders, so nothing drifts and no lock is needed. `--steps` cuts only a group of passes and keeps the rest rendered (the hybrid). Findings: `docs/spikes/from-finish.md`.
POC 0.24.1: Each lesson's tile on the lessons site has a version pick list: every kept run of that picture, newest first, labeled with the Gesso version, the time it ran, and how its steps were made. Pick one and open it. Each version's page is written once to `lessons/<slug>/v/<run>/` and never rewritten; `site-refresh` adds new runs.
POC 0.25.0: Hands-off lessons: the skill's last publish is `publish --final`, which seals the lesson as made by the tool on its own. Every lesson records its provenance (hands-off, recut, edited after the seal, or unsealed), and only hands-off lessons go on the lessons site and its version lists. `from-finish` copies are recuts. The lesson history shows a Recut, Edited, or Unsealed ribbon across each run that isn't hands-off. `provenance-mark` records what's known about runs from before seals.
chickadee_skill_20261112-100444#4
POC 0.21.0Edited84f6897, published with POC 0.23.12026-11-11 15:21 · publish 1
Edited after the skill finished (After the skill finished, the finish was rebuilt with finish-from-step and the head was composited by hand to fix the bird's shape.)chickadee_skill_20261111-152140#1
Recut from balloon-lavender_skill_20261111-142734, not a run of the tool (from-finish --steps lavender-rows lavender-dark-dabs lavender-mid-dabs lavender-dabs: spike #8 hybrid)balloon-lavender_skill_20261112-084806#1
Recut from balloon-lavender_skill_20261111-142734, not a run of the tool (from-finish (all steps): spike #8)6 versions since the run before (POC 0.21.0 to POC 0.24.0)
POC 0.21.0: Research on flower masses and water reflections (23 more sources, 61 in all), with rules and seven new stroke results in the paint-along technique.
POC 0.21.0: `split-texture`'s new steps start blank (their own colors and text, not the parent's copy).
POC 0.21.0: `canvas-view` takes full paths and refuses missing files; old crops are dropped after steps are renumbered.
POC 0.21.0: A paint one tube already gives (within the slack) uses that tube straight; `publish` lists `duplicate_recipes`.
POC 0.22.0: The main subject keeps its shape: both reviews flag a subject whose outline, size, posture, or markings change between steps (the finish included) as a shape problem, never as drift, and the skill fixes it.
POC 0.22.0: `finish-from-step` rebuilds the finish from the last step, adding only its details; `carry-forward` copies a later step's subject onto an earlier step, free.
POC 0.23.0: A private lessons site (`site/`, deployed with Cloudflare Pages and locked with Cloudflare Access): `publish` also writes `lesson-standalone.html`, one self-contained page per lesson, and `site-add` puts it on the site.
POC 0.23.1: A lesson keeps the version it was made with (`gesso.made`) when it's republished; the footer says "republished with" the newer one, and the lessons site's tiles show the made-with version.
POC 0.23.1: The dirty flag only counts code that shapes a lesson (spike, techniques, palettes, the skill), not site/ or docs/.
POC 0.23.2: Lesson history: every publish that changes a lesson's pictures or text is kept (`site/history/`: a strip of every step and a record of the version, commit, cost, redos, and checks; the full lesson in `<lesson>/versions/<n>/`), and `site/history/index.html` shows each picture's runs newest first, what changed between runs, the owner's scores (`history-rate`), and two runs side by side. `history-backfill` recorded the runs from before.
POC 0.24.0: Spike (#8): `from-finish` cuts every step picture from the finished painting instead of rendering it, in a copy of the lesson. Each pixel goes to the step whose region and paints fit it (things in their own small box, like the balloon, are cut out whole with GrabCut), earlier steps paint straight through where later ones go, the first of several steps over one area is a flat coat, and the passes after it go on by value, darkest first, in equal shares. No renders, so nothing drifts and no lock is needed. `--steps` cuts only a group of passes and keeps the rest rendered (the hybrid). Findings: `docs/spikes/from-finish.md`.
balloon-lavender_skill_20261112-084526#1
POC 0.20.0Hands-off7486118, published with POC 0.23.12026-11-11 14:27 · publish 1
Hands-off: made by the skill, untouched since (Made in a fresh context by the skill alone (owner asked for an unassisted rerun, 2026-11-11); later republished only to fix its version label, pictures and text unchanged.)1 version since the run before (POC 0.20.0 to POC 0.20.0)
POC 0.20.0: No texture arrives all at once: `publish` and `step-pairs` measure `texture_jumps` (a step turning over 10% of the canvas from flat to textured), and the skill fixes each one with `split-texture`, which inserts free in-between passes (the step's marks arriving darkest first) and renumbers the step images.
Unsealed: from before seals, how it was made isn't recorded1 version since the run before (POC 0.19.0 to POC 0.19.0)
POC 0.19.0: `--palette <name>`: lessons mix from the painter's own tubes (`palettes/owner.yaml`, 30 tubes) instead of the technique's five, and "What you need" lists only the tubes the recipes use. Big palettes are searched with a shortlist so a recipe still takes under a second.
POC 0.19.0: A lesson from a big palette shares a small set of tubes: the 8 most useful, plus one more at a time only when a paint can't get close without it (the lavender lesson went from 28 tubes to 12).
POC 0.19.0: A painter's own tubes are called by their labels ("dark ultramarine" isn't shortened to "ultramarine").
Unsealed: from before seals, how it was made isn't recorded1 version since the run before (POC 0.18.0 to POC 0.18.0)
POC 0.18.0: Values tables add to the instructions, never replace them, and are for depth on one thing. Color sequences like a sunset sky are named in the instruction, in order. The table now sits right under the instructions.
POC 0.18.0: `publish` lists paints an instruction or table names that aren't in the step's colors (`paints_not_listed`).
POC 0.18.0: Dense texture is split into passes over the whole area, never cut along a line. The step review flags `split_edge` and `shape_change` (a path or row changing shape), and the skill fixes both instead of leaving them.
Unsealed: from before seals, how it was made isn't recorded6 versions since the run before (POC 0.14.0 to POC 0.17.1)
POC 0.14.0: `--canvas WxH` (inches): the picture is fitted to the painter's canvas before planning, cheapest first: no change, a free crop that keeps the subject, or one render that extends the scene. A rectangular canvas hangs either way, so it follows the picture unless `--orientation` says otherwise.
POC 0.14.0: Renders stay in the image model's nearest frame; every step picture the painter sees is cropped to the canvas.
POC 0.14.0: Canvas size scales the lesson: the detail budget (fewer parts on a 10x10, more on a 24x30) and brush sizes.
POC 0.14.0: The page shows the canvas size and how many inches each 10% is, so grid positions can be marked with a ruler.
POC 0.14.1: Canvas crops split the cut evenly between both sides, shifting only as far as the subject needs.
POC 0.14.1: No band-fill render when the photo already has the frame's shape: the cut-off edges fill the bands for free.
POC 0.14.1: `grid --percent`: lines at every 10% of width and height, so measurements match the page's percentages on any canvas shape.
POC 0.14.1: A stroke result for horizontal dashes on water (ripples, sun paths, reflections).
POC 0.15.0: Step pictures no longer repaint earlier work (#30): each step says where it paints (`regions` in plan.json), and `lock-steps` puts back any change outside them, free. Raw renders stay in trials/raw/.
POC 0.16.0: `protect` boxes: inside a step's regions, things already painted that must stay put. There only the step's own paints may change anything (matched mostly by hue, so shaded strokes count), with a crisp edge (#30).
POC 0.17.0: `lock-steps` runs a backward pass from the finish when every step has regions: wherever no later step paints, a step already shows the finished painting, so the last step only shows what it adds (#30).
POC 0.17.1: The backward pass shifts the broad tone of matching areas inside later boxes to the finish's, keeping the brushwork, so box edges don't show as straight tone steps (sailboat run: a lighter rectangle in the water).
POC 0.17.1: `lock-steps` keeps a step redone after a lock as its new raw render, instead of locking the stale one.
Unsealed: from before seals, how it was made isn't recorded4 versions since the run before (POC 0.10.0 to POC 0.13.0)
POC 0.10.0: A fresh reviewer checks each step's text against a measured map of what its picture changed, and the skill fixes flat, missing, vague, and wrong-stroke instructions from it, shown under "What the reviewer caught" (#24).
POC 0.10.0: New technique rules: let a layer dry before painting over it, and give each area the values the picture shows (dark, middle, light) instead of one flat mix.
POC 0.10.0: The technique records what each stroke really leaves on the canvas (`stroke_results`).
POC 0.11.0: Technique rules and stroke results now come from cited research (`docs/research/acrylic-paint-along.md`): three values per 3D object, a stated light direction, distance and edges, stroke direction, paint load in every instruction, drying before layering, coats for light over dark, and test strokes.
POC 0.12.0: A word budget for step text (about 100 words a step), with `publish` listing steps over it in `long_steps`. The page already shows recipes, brushes, strokes, and drying, so the text doesn't repeat them.
POC 0.12.0: The first step says where the light comes from.
POC 0.12.0: Paints used straight from a tube keep a one-tube recipe instead of a computed three-tube mix.
POC 0.12.0: Two more stroke results: strokes toward a vanishing point (rows, paths) and horizontal strokes for flat ground.
POC 0.12.0: `preview-diagrams` says when lesson.json has no diagrams yet, instead of blaming the browser.
POC 0.13.0: Show, don't tell: when something takes more than a sentence to explain (a shape, a stroke path, which value goes where), the lesson shows it with a diagram, a `values` table, or the step picture, and the words point at it.
POC 0.13.0: Steps can carry a `values` table (dark, mid, light: paint and where), shown with swatches on the page and in the walkthrough export.
POC 0.13.0: `publish` also lists single instructions over about 40 words in `long_instructions`.
POC 0.13.0: The word budget is a signal, not a cap: a long step is trimmed only where it repeats the page; an instruction doing two moves is split; a step that really has a lot to do is split in the plan, moved into strokes or a diagram, or kept long with a reason. Length is checked before the step review, so the reviewer catches any instruction trimming made vague.
Unsealed: from before seals, how it was made isn't recorded9 versions since the run before (POC 0.1.0 to POC 0.9.0)
POC 0.1.0: The pipeline spike: a lesson as a folder of step images from one script (#3).
POC 0.2.0: The `paint-lesson` skill: Claude Code runs the lesson, free filters first, paid renders only when needed, published as a Claude artifact with brushes and strokes per step (#7, #9, #10).
POC 0.3.0: "How this lesson was made": technique, step order, filters, review notes, and the receipt, folded away (PR #17).
POC 0.3.0: The sky runs past what covers it, and shapes are built from simple pieces (PR #18).
POC 0.4.0: Construction diagrams for shapes a beginner needs broken down, and a beginner check that decides where they go and says why (PRs #19, #20).
POC 0.4.0: Screenshots are cropped to the picture automatically.
POC 0.5.0: Busy pictures get a simpler beginner version first, and the lesson is made from it (PR #21).
POC 0.6.0: Paint recipes are computed with a pigment mixing model (Mixbox) instead of written by eye, with a "closest you can get" note for colors the tubes can't make (#22).
POC 0.6.0: Every step lists the paints it uses with their recipes, so you can mix as you go.
POC 0.7.0: A drawing of each brush and the mark it makes, in "What you need" and on every step (#25).
POC 0.8.0: `publish` also exports `embed/`, so a blog post can show the lesson as a step-by-step walkthrough, with a one-line summary per step (#26).
POC 0.9.0: Each lesson is stamped with the Gesso version, commit, and date (#27).
balloon-lavender_skill_20261111-023226#1
before stampsUnsealedfc73c55 (guessed from the date)2026-11-11 02:02 · publish 1