🛠️ Release Notes
Every update to AI CoursePilot, logged like a good flight engineer would.
v0.9.3 29 July 2026
# v0.9.3 — Cassandra drafts through the course, and two ideas for the pocket
The "Draft the asks" button no longer asks Isabelle to make and cap her own
Anthropic key. It now POSTs to a new endpoint, `/api/draft-asks.php`, and the
course does the drafting with the same key the Co-pilot already uses —
server-side, where it stays. A draft click spends one of her daily Co-pilot
messages, so every existing cap (per-user and site-wide, in `chat_usage`)
holds without new accounting. Her setup shrinks to one step: copy the
**drafting token** from her Profile page into Cassandra's Settings box.
The endpoint is deliberately narrow. Auth is the per-user token (migration
027) because a `file://` page has no cookies to send — which is also why the
wildcard CORS origin is safe; the token is the whole credential, and at worst
it spends a day's questions. The system prompt — the Lesson 29 message
anatomy as machine standing orders — lives server-side, closing the open-proxy
hole: it drafts resourcing messages and nothing else. And it refuses with a
422 if the recommendation box is empty: the human-decides doctrine, enforced
at the API. Mock mode returns canned drafts and spends nothing, so the whole
flow works on a keyless install. Four new tests cover the token round-trip,
the mock path, and the empty-tank block (48 total).
The lesson's AI sections were rewired accordingly — the brief got simpler, the
raw browser-key pattern stays as an advanced aside — and gained **two pocket
ideas** to mention (never build): a Slack/Telegram channel agent that turns
ambient chat into human-approved board updates, and a new-business radar that
files trigger-moment leads with drafted openers into the pipeline. Both close
with the kicker: ideas are cheap now, which is exactly why she built one.
v0.9.2 29 July 2026
# v0.9.2 — Cassandra gets an AI button, wired the safe way
Lesson 33 gains a 21:25 build step: a **"Draft the asks"** button under the
smart panel's recommendation box, powered by the Claude API. The division of
labour is the whole point: Isabelle types the decision into the box — the AI
never touches it — and only then does Claude draft the two messages that carry
the decision out (one to whoever approves it, one to whoever it moves), in the
Wednesday Task message anatomy. Her Lesson 29 homework becomes the system
prompt, verbatim: yes first, clash named once, consequences priced, a deadline
on every ask, no exclamation marks. Each draft gets a Copy button. There is no
send button, and there never will be.
**Demo-safe by construction.** The button is the lesson's one networked
feature, and it fails soft: no key, no wifi, or any error at all instantly
shows two built-in example drafts, honestly labelled as examples — so the
forty-five-second demo path still never touches the network. In the room it's
the demonstrated answer to "where does the AI go next?", never the opener.
**Key hygiene as doctrine.** The API key is created in the Anthropic Console
and capped (£5) *before* it's pasted anywhere; it lives in the browser's
localStorage only — never in the file, never in git, never on the GitHub Pages
copy. The browser call uses the deliberately-named
`anthropic-dangerous-direct-browser-access` header, which exists for exactly
this pattern: your own key, your own machine. Model `claude-opus-5` at low
effort — a click costs a penny or two and takes a few seconds.
Also: the module 7 Pilot brief now knows the module has seven lessons (33 —
Build Cassandra, 34 — The Interview), a gap left by v0.9.0.
v0.9.1 29 July 2026
# v0.9.1 — Cassandra stops preaching and starts computing
Two fixes to Lesson 33, both prompted by a fair review: the panel title was
cringe, and the tool was a bit basic.
**The mantra comes off the screen.** The click-a-clash panel was titled "Hand
back a decision, not a problem" — printing the course's own coaching principle
on the UI, where it would read as a lecture aimed at the two people who set the
task. The panel is now titled in the product's own deadpan register — *"Four
ways out. One is a trap."* — and the principle moves to where it belongs:
Isabelle's mouth. The screen speaks product; she speaks principle.
**The smart layer.** Cassandra now does everything a computer genuinely beats a
person at, while still refusing to choose:
- the panel prices each move with live arithmetic from the data ("2 days ×
£450 = £900", from a DAY_RATE constant);
- it states computed facts, not advice — "Free on Thursday: Jonah (2/10
booked), Elif (5/10)";
- the banner gains a foresight line — "Next pressure point: Monday — four of
the six fully booked" — because detection is table stakes and prophecy is
what earns the name;
- booked-day tallies (7/10) sit under every name, surfacing over-servicing as
the same three names full every week.
The utilisation tallies graduating to core scope frees Stretch A for the
**what-if engine**: click a move, see the fortnight as it would look after it,
dimmed, with an Undo — consequences are the tool's job, choosing stays human.
The recommendation box stays blank; that is still the whole argument. And the
prepared "where does the AI go next?" answer arrives with the doctrine intact:
version two reads the week's Slack threads and *drafts* grid updates for a
human to approve, because boards die of typing, not of stupidity.
All still one offline file, still buildable tonight, still shown once.
v0.9.0 29 July 2026
# v0.9.0 — Build Cassandra, and lessons that end in a build
Module 7 gains a practical: **Lesson 33, Build Cassandra**, slotted between The
Growth Half and The Interview (which moves to 34, still the finale). The night
before the interview, instead of more revision, Isabelle builds the thing her
Wednesday Task answer already promises — "the first thing I'd build in this
role is that view" — as a one-file, works-offline resourcing board that
announces double-bookings in deadpan type days before they happen: *"Ravi is in
two places on Thursday. He has not yet been informed."*
The lesson carries the complete master brief (in the course's
PURPOSE/SECTIONS/STYLE/CONSTRAINTS format), an hour-by-hour build plan with a
hard stop at ten, the forty-five-second demo script, prepared answers for the
questions it will start — including an honest "did you actually build this?" —
and four timeboxed stretch options of which she may pick exactly one. The
pre-loaded clash is pinned to *next* week's Thursday with the days-to-solve
count computed live, so the board is correct on build night and again in the
interview room, and the countdown ticking down overnight proves the date maths
is real. The demo data is invented, labelled as invented on screen, and the
decision panel's recommendation box is deliberately blank — the tool finds the
crash; a person still chooses.
**New lesson type: practical.** A lesson with `"practical": true` in its meta
may omit `quiz.json` entirely — its homework is a build, not questions. The
importer allows the omission (and clears any ghost questions if a quizzed
lesson later converts), the lesson page swaps the quiz card for a practical
card framed by `homework_intro`, and the final exam simply draws nothing from
it. Three new importer tests cover the omission, the conversion, and the rule
that ordinary lessons still require their quiz. Documented in CONTENT_SPEC.
Also: two new glossary terms (MVP, prototype), a new module 7 recap bullet, and
the module 7 story now runs 28–34.
v0.6.2 26 July 2026
# v0.6.2 — Four releases of CSS were never reaching anybody
A bugfix release, and an uncomfortable one: the v0.6.1 diagrams rendered as
solid black boxes on the live site, and the cause had been sitting there since
v0.5.1.
## The bug
Assets were cache-busted with `?v=<View::VERSION>`, a hand-maintained constant.
It was last bumped at **0.5.1**. Everything since — v0.5.2, v0.5.3, v0.6.0 and
v0.6.1 — shipped CSS and JS changes to browsers that were still being told to
load `app.css?v=0.5.1`, so they served their cached copy and never fetched the
new one. The footer had also been advertising v0.5.1 for four releases.
The new lesson diagrams made it visible for the first time. SVG's initial `fill`
is **black**, so with the `.dg-*` rules missing every shape painted black and
every label inside a shape went black-on-black. The diagram didn't look broken,
it looked deleted — only "the click" survived, because it sits outside a box.
Everything else in v0.6.1 was live and correct throughout; the server was
serving the right files. The pages just weren't asking for them.
## The fix, in two layers
**1. Cache-busting that can't go stale.** New `View::asset()` stamps each URL
with the file's own `filemtime`, per asset. Change a file and its URL changes
with it — there is no constant left to forget. Applied to `app.css`, every
`<script>` tag, per-page CSS/JS, and the OG image.
**2. Diagrams that degrade instead of disappearing.** The `.dg-*` classes stay
for theming (dark mode still works), but every shape and label now also carries
plain `fill`/`stroke`/`font-size` presentation attributes. CSS overrides them
when it loads; when it doesn't, you get a fully readable light-theme diagram
instead of black rectangles. Verified by rendering the diagrams with no
stylesheet at all.
Relying on an external stylesheet for whether a diagram is legible was the
underlying mistake. Fixing the cache-buster alone would have hidden it until the
next time something stopped CSS from loading.
## Note for the next deploy
Two kinds of state don't travel with `git pull`, and both bit this release:
- `releases` rows are written by `scripts/add-release.php` — run it on the server.
- `lesson_videos` is gated by `lessons.videos_seeded`, so `import-content.php`
will not pick up a new video. Use `refresh-videos.php --only=<slug> --apply`,
and dry-run it first to check nothing gets parked.
v0.6.1 26 July 2026
# v0.6.1 — Straight answers, clear signposts, first real diagrams
A correctness-and-clarity pass, mostly aimed at the moment a non-coder loses
confidence: being told something they can't check, or being marked wrong when
they weren't.
## Corrected a claim we couldn't stand behind
Lesson 8's advanced flavour asserted that dropping "No libraries, no build step"
from the Snake brief would *get* you a `package.json`, a bundler and a dev
server, "unopenable by double-click". That isn't true — Snake is small enough
that current models overwhelmingly hand back a single self-contained file
anyway. The quiz was worse: the false claim was the marked-correct answer.
Rewritten to the honest argument, which is also the more useful one:
constraints buy **predictability**, not rescue from a certain disaster. The same
brief without that clause can come back as one file, three files, a framework
component, or something with an install step first — and you don't know which
until it's written. That reasoning scales to bigger asks, where it actually
starts to bite. Fixed in the lesson prose, the multiple-choice question and the
short-answer model answer.
## Prompt labs no longer mark good answers wrong
The `[[promptlab]]` checklist matches keywords, so a learner who covered a point
in their own words got a hollow circle and a verdict reading "the hollow circles
are what is still missing" — flatly false, and aimed at exactly the audience
least able to push back.
- The widget now explains what the circles are **before** you score, and says
plainly that it's a word-check rather than a mark.
- The verdict no longer claims authority: "if you covered them in your own
words, you covered them. Ask your Co-pilot for a real read."
- Applies to all four prompt labs (lessons 8, 11, 13, 23).
## "Where you are" signposts reach modules 4–6
The orientation banner existed in lessons 8 and 9 only, and stopped dead before
the most command-heavy lessons in the course. Lessons 19, 20 and 21 asked people
to paste shell commands, edit a JSON config and type `/newbot` into Telegram
with nothing marking which was which — lesson 21 had to patch it in prose
("not your terminal"), which was the tell.
- New `is-app` variant (violet) for "you're in a phone or desktop app, not a
terminal" — the app-versus-shell mix-up is a category error, not a skill gap.
- Banners added through lessons 19, 20 and 21 in both flavours, including the
hand-off points where Telegram gives way to the shell and back.
## First teaching diagrams
Three inline SVGs, theme-aware from CSS vars, no external assets and no build
step (per `IMAGE_PLAN.md` — diagrams where they teach, not where they decorate).
Reusable `.ls-diagram` / `.dg-*` classes so the next ones are cheap.
- **Lesson 16** — before the click, after the click, and paying for the click.
The lesson already stated this as its rule of thumb; now you can see it.
- **Lesson 18** — prompt injection: your instruction and a stranger's hidden
one arriving at the agent as the same kind of thing. The hardest idea in the
module, previously prose only.
- **Lesson 25** — the diffusion strip: a picture emerging from static across
four frames, drawn with an SVG turbulence filter. A lesson about image
generation now contains an image.
## Also
- Module 4's tagline still advertised "Images, video, marketing analytics and
your job" after lesson 25 moved to module 6 and became optional. Migration 019
caught modules 3 and 6 and missed this one; migration 021 fixes it.
- Lesson 20 gains a fifth video: *Self-Host Your Own AI Agent on Mac & Control
It From Telegram* (MrKnowledgeShare, 16 min) — the closest match to the
lesson's own framing, slotted second among the beginner picks.
v0.6.0 26 July 2026
# v0.6.0 — Lesson 26: The Agent Showcase
- New optional lesson at the end of Module 6: **The Agent Showcase — What People
Actually Do With These**. Eight real automations to steal, each with the exact
message to send your agent: the morning briefing, the inbox bouncer (drafts,
never sends), Monkey & Olive's night shift (weekly GA4 report via the lesson 16
connector, Friday Instagram captions in the brand voice), watchers & nudgers,
a community-skills tour with a trust check, and party tricks that are secretly
useful. Closer: pick one, build it tonight, save it as a skill.
- Advanced flavour teaches the pattern behind them all — trigger → gather →
think → deliver — plus the engineering of not nagging (thresholds, debounce,
silence policy) and ninety-second due diligence on community skills.
- Safety thread throughout: draft-never-send, approval on anything outbound,
and "installing a skill is hiring a stranger" (lessons 18 and 21, applied).
- New glossary term: **cron**. Five new quiz questions.
- Lesson 22's closers now point honestly at what follows (23, the optional
24–25, and the showcase) instead of calling lesson 23 "the finale".
v0.5.3 25 July 2026
# v0.5.3 — Modules 4–6 review: the fixes
An 11-agent review of every lesson in modules 4–6 surfaced 55 findings; this
release ships the high-severity ones (flow bugs, failing commands, wrong claims).
- Lesson 16: MCP reintroduced inline (Module 3 is optional, so no "remember?"),
a no-connector route (export a CSV, paste it in — or Google's free GA4 demo
account), prompts section renamed "Seven prompts to steal" to match reality,
destination stated ("type these into the connected Claude Code/Desktop chat"),
Ads-linking note before the two ads prompts, honest setup-time estimate.
- Lesson 17: prompts now say where they go (ordinary chat, with the 14:00
analytics prompt flagged as the connected-agent exception); Claude Code
anchored to lesson 7 instead of optional lesson 13.
- Lesson 18: no longer claims to be "the last lesson" (Module 6 follows);
Module 3 achievements hedged; new guardrail warning — agents with file/inbox
access need written "ask before destructive actions, confirm before sending"
rules in their instructions; copy-prompts say where to paste them.
- Lesson 19: npm explained before the npm installs (beginners have no Node);
"personal agent from lesson 15" made conditional; API-key advice no longer
puts the key into shell history while claiming to keep it out.
- Lesson 20: Telegram setup no longer dead-ends (re-run `hermes setup` to paste
the token, BotFather impostor warning, desktop-Telegram tip, t.me link);
install quiz question tests understanding instead of memorising a URL.
- Lesson 21: config edit is followed by the required `openclaw gateway restart`;
pairing flow reordered (DM first, then approve — the list was always empty
before); BotFather located inside the Telegram app; hidden config opened via
`open -e`; MCP glossed inline.
- Lesson 22: worked example no longer assumes the optional Module 3 website;
the two file-content copy blocks now say "this is a file, not a prompt".
- Lesson 24: jailbreak vs prompt injection contrast added (the quiz asked it,
the lesson never taught it); "published yesterday" video note dated properly.
- Stale docs.anthropic.com links moved to platform.claude.com (lessons 17, 23).
v0.5.2 25 July 2026
# v0.5.2 — AI slop & clearer image-prompt instructions
- Lesson 18 (Ethics, Gotchas & Guardrails): new "AI slop" section in both flavours —
what slop is, why it's a prompting failure rather than a model failure, and how
specific prompts (lesson 11) plus taste written into CLAUDE.md/skills (lessons 10
and 22) keep output from being generic. Monkey & Olive used as the worked example.
- Gotchas checklist grows to 11 points (slop test added); new quiz question on
fixing generic AI output (final quiz is now 8 questions).
- New glossary term: **AI slop**.
- Lesson 25 (Image & Video AI): both image-prompt copy blocks now say exactly where
to paste the prompt (ChatGPT, Gemini, Canva — not the terminal, Claude Code
doesn't paint pictures).
- Lesson 24 (AI in the Headlines): every "API" mention now carries the ? glossary
popover, and a repeated paragraph in the advanced flavour now says something new.
v0.4.0 25 July 2026
# AI CoursePilot v0.4.0 — "Build Something" 🐍💍
*Released 2026-07-25*
Module 2 stopped being all theory. You install Claude Code in lesson 7 — now
lessons 8 and 9 make you *use* it, twice, and you finish holding something that
runs in a browser.
## Two new lessons (both optional)
**8. Your First Build: Snake** 🐍 — one folder, one prompt, a playable game.
Arrow keys, growing tail, score, game over. The point isn't Snake: it's that a
brief has four parts (artefact, behaviour, constraints, audience), that one
`.html` file is a finished program because every browser ships a JavaScript
engine, and that you iterate *one change at a time*. Then you make it ridiculous
— emoji food, tabloid death headlines, a chaos button.
**9. Monkey & Olive: Build a Brand** 💍 — a jewellery shop from an empty folder.
The brand already has a logo (a pencil-drawn pug in an olive wreath); the learner
`curl`s it down, writes BRAND.md from the exact palette read out of the artwork,
pulls five product photographs, and builds a five-file storefront with a basket
that survives navigation and a checkout that says, loudly, that it is a
simulation.
Both are marked **✨ Optional bonus** and neither gates anything. Lessons 8–23
renumbered to 10–25 to make room; lessons are keyed by slug, so nobody's progress
moved.
## Builder awards 🏆
Three gold-tier badges for the lessons that end with a working artefact:
- **Game Builder** 🕹️ — built a playable browser game from a written brief
- **E-commerce Builder** 💍 — built a brand, a shop and a working checkout
- **Website Builder** 🌐 — briefed, built and shipped a real site to the internet
Gold awards get their own ceremony (denser gold rays, a bigger medal, a "★ Top
award unlocked ★" kicker) and a trophy shelf at the top of the profile page,
separate from the everyday badges.
## Word Snake 🐍
Module 2's round-up gains a **second** game alongside Command Line Hero: steer a
snake into the right answer. Twelve rounds of terminal, git and steering-file
vocabulary, DOM cells rather than canvas so the food is real text, and every
round is also answerable by clicking a button for anyone not using arrow keys.
## Simulators
- The practice terminal now ships with `~/snakegame` and `~/monkeyandolive`
already built, so any lesson can say "cd into your project" and mean it.
- New `head [-n N]` command; `open` now tells you what would actually have
happened, with a bit of ceremony inside the two project folders.
- Two new Claude Code simulator scenes: the Snake build, and the Monkey & Olive
brand-first session.
## Reference builds
`public/training_material/demos/` holds what the prompts actually produce, built
by running the briefs as written and verified in a browser — the game's collision
and restart behaviour, and the shop's basket, totals and zero-network checkout.
Not linked from the lessons: the logo is meant to be a surprise.
## Fixes
- Optional lessons no longer gate module round-ups or module badges — adding a
bonus lesson can't re-lock a module somebody had already finished.
- Module 6 finally has its own badge (**Levelled Up** 🛰️); it had been missing
since the module was added.
- 22 stale cross-lesson references corrected ("see lesson 15" pointing at the
wrong lesson), several of which predated this release.
- Four new glossary terms with airport analogies: working directory, canvas,
SVG, curl.