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>
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