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

40 lines
1.7 KiB
Markdown

---
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:
```sh file=serve.sh lines=4-7 hl=6 title="serve.sh — the ways to run it"
```
:::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):
- [x] Highlight code on the server, so no script parses anything in your browser
- [x] Draw icons from Unicode rather than shipping an icon font
- [x] Serve every panel above as plain `<details>`
- [ ] Ship a single byte of JavaScript on a page like this one