Files
khosra/examples/demo-site/content/pages/colophon.en.md
T
bdeshiandClaude Opus 5 69f43e5791 enable task lists, superseding the decision that excluded them
ADR-0058 kept task lists out as "a note-taking affordance, not a publishing
one". That reasoning measured the wrong axis: a checklist inside a published
technical piece — setup steps, a runbook, a what-I-tried list — is publishing,
and nothing else in the dialect expresses "this item is done" without the author
hand-writing an entity. ADR-0078 supersedes that half and records why.

The half of ADR-0058 that mattered is untouched: extension.GFM stays refused,
because the bundle drags linkify in with the tables it is wanted for, and
linkify rewrites an author's plain text into markup — the line ADR-0034 draws.
One named extension is not a bundle, and wire.go now says so where the
temptation to reach for GFM will next appear.

ADR-0058's Status line names its successor, so a reader arriving there learns
the task-list sentence no longer holds. Same in-place Status annotation the
mutability rule allows, Decision text untouched.

Checkboxes render disabled: static markup, nothing clickable, nothing stored. A
reader with scripting off sees the same page, which is the property the whole
theme is built on. goldmark adds no class to the list, so theme.css finds it
with :has rather than the engine inventing markup to be styled by.

Demo carries the case ADR-0051 requires — a colophon checklist of what this
build does and does not do, including the unticked "ship a single byte of
JavaScript", which is true of that page and asserted by the test's absent list.

No counter moves: state.md's counters are explicit that an upstream extension
enabled in the list is dialect, not a feature of this engine — only a package
under internal/ext/ counts.

8 files, +55/-10. 1 line of engine code.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 19:00:51 +06:00

1.7 KiB

title
title
Colophon

Built by khosra: one Go binary, four dependencies, no JavaScript anywhere in the reference theme.

The stylesheet is inlined into every page, so a site root with no static/ still renders. A real theme would replace it, and templates/list.html in this site root shows how — that one file overrides a single named block and inherits the rest of the document.

:tip: An icon is a name the engine hands to the theme; this reference theme answers with a character, while a theme of your own might answer with an SVG. A name it does not know, like :nosuchicon:, keeps its text.

:::details{group=run summary="Serve the demo" open=yes} make demo — this site, on localhost:8080. :::

:::details{group=run summary="Serve your own"} khosra -site /path/to/site. Grouped panels open one at a time, and nothing here runs a script. :::

A block may take its content from a file beside the bundle, so a post can quote several parts of one program without the copies drifting from it — each keeping the line numbers it really has:

:::tip{title="Nothing is hidden"} Panels are <details>, which every browser opens without help. A reader with scripting off sees the same page. :::

What this build does and does not do

A task list is checked off in the source and rendered as a disabled checkbox — nothing here is clickable, and nothing is stored (ADR-0078):

  • Highlight code on the server, so no script parses anything in your browser
  • Draw icons from Unicode rather than shipping an icon font
  • Serve every panel above as plain <details>
  • Ship a single byte of JavaScript on a page like this one