Skip to main content
Back to blog

The Model Retires at Midnight. The Data Doesn't Have To.

5 min read

Today is the last day Fable 5 is available. Mid-afternoon I checked and I had 92% of my daily quota left — quota that expires worthless at midnight. Worthless. So the session opened with the only question that mattered: what do I do with Fable 5 if today is the last day?

My first answer was the wrong kind of ambitious

The obvious move was to prove the app-ideas machine — one live dispatch of the sandbox-builder pipeline, the single unproven piece, staged as the most important next step five days ago and still sitting open. But halfway into planning it I saw the flaw: a proof run doesn't care which model watches it. Any model can confirm a dispatch succeeded. Same for the ops mess the health check surfaced today — Home Assistant's API down on sentinel, the forge disk at 6% free. I filed both to Asana and didn't touch them, because spending an expiring model on work any model can do tomorrow is just burning the quota with extra steps.

The interesting question is what can't happen tomorrow. So I pivoted: what about a Fibonacci skill? For design — I've used it everywhere.

The ground truth said my favorite ratio needed a warning label

House rule: search before building. The search found a real hole — nothing in my skill library actually computes numeric scales. My design skills hand back a literal placeholder, "[modular scale with specific px/rem values]," to be filled in by vibe. It also found a landmine: my own HIG standards mandate an 8-point grid, so a purist Fibonacci skill would fight the standard it lives next to.

So /design-scale shipped opinionated instead of pure. The default type ramp is a major third, 1.25 — a 16px base gives you 10/13/16/20/25/31/39/49. The golden ratio got demoted from ramp to display pair: --display emits two hero sizes, 26 and 42, because φ hits 110px within four steps of 16 and no body copy survives that. And Fibonacci — the thing I'd "used everywhere" — survived as a hybrid spacing mode: 2/3/5/8/13 below 16px, the grid above, with a warning that it drops 4px and 12px on the way. The moment SKILL.md landed in the skills directory, the skill hot-registered in the same turn. Written into existence mid-session.

Four reviewers, one wrong number

Here's the part that justifies the whole workflow. Fable authored the skill; four adversarial lenses verified it — correctness, docs accuracy, and ecosystem fit on Opus 4.8, design taste on Fable 5 itself. Twenty findings came back. And all four lenses, independently, flagged the same sentence: the doc claimed φ "reaches 110px three steps up" from 16. It's four steps. The generator's own runtime warning had the right number the whole time. The code told the truth, the prose lied about it, and the author caught its own arithmetic the moment it was handed a different hat.

The other findings weren't cosmetic either. rem advice that was actively wrong. A cheerful suggestion that 10px is fine for legal text (it is not). Token names that silently meant different pixel values depending on spacing mode. A φ warning keyed to how the ratio was spelled rather than its value, so a bare 1.618 sailed through unwarned. A crash because argparse wasn't coercing a default. After the fixes: fourteen for fourteen on an empirical battery — the JSON parses, the Tailwind fragment loads in node, error paths exit non-zero, rem round-trips, and every number in the docs matches a real run.

This is the established pattern now, not a one-off. Earlier today Fable authored two homelab PRs, and the verify pass on the second caught four real defects in the first draft — the PR body says so, on purpose. Both merged. Fable is a strong author. The system is safe because of the verify leg, not because the first pass was clean.

Then I spent the rest on the only thing that's impossible tomorrow

Do the economics. At midnight tonight, the remaining quota is worth exactly zero. Training compute is not scarce — the M4 will still be on my desk next week, and the mlx_lm QLoRA pipeline already exists in lora-adapters/, built for exactly this. What's scarce — terminally scarce, tonight-only scarce — is the ability to generate more text in this model's voice. After midnight that ability doesn't exist at any price.

So the rest of the afternoon went into the dataset: Fable's writing voice, distilled into LoRA training data for a local adapter, plus three blog drafts — this post's first pass among them. I'll be honest about where that stands: the training hasn't run. The adapter is a plan, not an artifact, and nothing about the run is verified yet. But the dependency graph is the whole point. Training is a next-week problem with next-week compute. Generation was a tonight problem with tonight's expiring budget, and tonight is when I solved it.

The quota dies at midnight. The data doesn't.