Changelog
Versioning is x.y.z — major.minor.bugfix, no component above 99. The
workspace Cargo.toml is the single source of the number; the TUI head and
the Yard display it. 1.0.0 lands with the local MVP go-live.
[Unreleased]
- Round 2 of book design: the m-design card drives the rendered PDF
(Typst parameterization, TOC and opener styles, cover, dedication).
- The keel-rigging crate rename and the TUI's keel.x naming strings.
Store::Yard— the TUI reading and writing through the Yard with the
immutable-revision local cache; project setup in the browser reaching
the TUI. 1.0.0 lands with the MVP sign-off.
[0.11.0] — 2026-08-27
keel.pub grows up: a public face, real collaborators, and the whole book
designed from the browser.
The site (keel.pub)
- A real home page: "Write your novel one leaf at a time", the spine
diagram, the keel.x module rolodex (six illustrated mockups with dot
navigation and cross-fade), and a Start-today call to action. Content
fades softly into view on load.
- Nav regrouped: Home · How to use · Docs, with the Yard as a pill;
version, API, and Admin left the header (Admin and the changelog live
in the footer); the wordmark reads keel.pub and always goes home.
- The Begin chapters moved to
/how-to-use/(no sidebar, a chapter
strip); /docs/ keeps the sixteen reference chapters; the changelog
page widened; the footer sticks to the viewport bottom.
- Dark mode: a bulb in the footer — dark grey ground, orange text,
persisted, defaulting to the OS preference. Website only.
- Shared
static/yard.css; the old inline-CSS duplication is gone.
The Yard (né the Planner — keel.yard, at /yard/)
- Roles without voting: Membership (admin | editor per book), the
creator becomes book admin, the superuser (exactly one — the owner)
sees everything. The Chart was this rename's one-day interim name;
301s cover /planner/ and /chart/.
- A signed-in secondary nav: Yard home (my books with role badges),
New series, Activity (with the approval queue — the book admin lands
◐ pending spine cards into ● canon via an ordinary checkin),
Previews, Profile (name, email, initials disc), Logout.
- Its own graphical login at
/login/— and a session of its own:
signing in to the admin or the Yard signs you out of the other.
- The book-design page: trim, margins, and type on
m-vol-01 [page];
imprint, dedication, epigraph, five contents styles, and four chapter
openers on the new self-healed m-design card; cover upload served
at /cover/<slug>; a live geometry echo. The render pipeline reads
it in Round 2.
The admin (superuser only)
- A Yard-style subnav (Admin home · Change password · Log out), user
management with membership inlines, token revocation by prefix,
stale-lock breaking, per-series storage stats, PreviewPdf and
CoverImage registered.
[0.10.0] — 2026-08-26
The Yard becomes an author's workspace, and the road to keel.pub opens.
The Planner (author-facing book setup)
/planner/— series list, create-a-series (seeds the fullkeel init
object set, instantly usable in planner and TUI), and the one-click
sample-novel builder.
/planner/<series>/— the spine tree: volumes → arcs → movements →
beats → leaves with status glyphs ◌○◐●, word counts and rollups,
inline add-child at every level, id conventions enforced, the write
gate honored for new leaves.
- Card editing per canonical field order; every save is an honest
checkout → checkin revision as yard:<user>; a leaf locked by a TUI
writer shows who holds it and since when — never force-unlocked.
- Python canonical codec with byte-exact parity to the Rust emitters
(fixtures generated by the release binary; 17 parity tests).
- The sample novel ported to Python: 18 objects, blake3-verified
byte-identical to the Rust keel auto-novel --offline output.
The manual and the shell
- 19-chapter documentation system in the Yard at
/docs— graphical
getting-started, hierarchy & glossary with recommended ratios, full
annotated file footprint, and everything between.
- Zero-CLI: the
:console in the palette runs any keel command in
place; a bare keel outside a workspace opens the series picker.
Going online (Fly.io + keel.pub)
- Production hardening: env-driven hosts/CSRF/secret key, gunicorn +
whitenoise, TLS-proxy-aware cookies, ADMIN_PASSWORD secret — the
printed test login shows in local dev only.
fly.tomlfor the keel-yard app; localdocker composeunchanged.
Fixes
- Admin contrast (model-group captions, recent-actions sidebar), footer
with the changelog link, ? help overlay on Windows, seeded password
self-heals on every startup.
[0.9.0] — 2026-08-25
The entire solo tool, built in one run (M0–M7 plus the morning's decisions).
The writing surface
- ProseView: custom prose editor — soft wrap on the printed measure,
typewriter scrolling, focus dimming, decoration spans, vim-lite keys,
undo/redo. ^e hands off to $EDITOR and reloads.
- Plank markup:
@name{…}inline,@name … @endblocks, structural tier
emitted never typed; fmt on save, strip to CommonMark, errors block
check-in. ^m contextual markup palette.
- Spellcheck via the bundled dictionary plus the project's proper nouns.
- Proofreading in the status chain:
keel proofread(AI pass with
accept/reject, --mark-only for human passes), per-revision ✂ marks,
warnings at render/export.
Structure
- The Keel: Series → Volume → Arc → Movement → Beat → Leaf, ids carrying
position; parents required in order; containers hold premise+intent only.
- The write gate: no leaf outside a specified-or-better beat; leaf status
can never outrun its beat.
- Frontier warnings (never blocks),
keel synopsis, frames with real page
budgets, the Map with the tension sparkline.
- The Worldline (view 7): leaves on a horizontal line — chronological or
temporal across five customizable eras (Mythic · Old · Present · Future ·
Far Future); Enter opens a leaf to write.
Memory & change
- Strict RCS store: exclusive locks, immutable monotonic revisions,
stale-base failures are loud, reads never lock.
- The Ledger: facts with story-time validity and reveal positions, promises
with due-bys, quote-anchored refs; the two clocks (true_at / known_at)
and the do-not-reveal list.
- Amendments as changesets:
keel amendcomputes the blast radius, `ci
--changeset reconciles, land` refuses unresolved ⛔ unless waived with
the reason recorded, warnings become tracked ⚠ stale debt; abandon
walks heads back over retained history.
The Ghost
^ginstruct → streamed suggestion → accept/reject; nothing is written
until accepted. ^; inspects the exact context (pinnable sections).
- Raw Messages API client (SSE, cached stable prefix) with an offline mock;
provenance log and the ✎% density; cost meter (keel ai usage).
keel voice seed,keel ai draft, extraction with human triage.
The book
- Preview mode (F5): Typst renders the volume to a true B-format PDF —
running heads, recto/verso, generated contents, sunk openers, the exact
13.6pt line grid (~300 words/page verified on renders).
keel export --tree(the whole series as plain files),--epub/--docx
via pandoc, named snapshots, keel stats burn-down.
Groundwork for M8
keel login/logoutand the TUI login lock (dev mode when no Yard is
configured), versioning surfaced in the TUI head.