Re-adopts the parked extras entry as ADR-0047: `extras/` inside a bundle is skipped
by the scanner entirely, so a `.md` in there is an asset with no identity and no URL
of its own. The engine enumerates the tree, sorts it by path, classifies by
extension, renders markdown and text, and offers everything else as bytes. One route
with two behaviours — `…/extras/{path}` selects an entry, `?raw` returns the file.
Almost everything it needed already existed, which is the sign the model was right:
the scanner had a directory exclusion, `Assets()` knew which bundles own a
directory, and `Lookup` already decided visibility — so a draft hides its extras
with no new check. A test proves that, including `?raw`.
Two deviations from the parked shape, both because the shape was written before the
code. The directory name is fixed rather than a cascade key, since nothing reads a
section-level setting yet. And an entry is resolved against the *enumeration* rather
than the filesystem: not being in the listing is a stronger answer than os.Root
refusing a path, and cheaper.
Selecting is a link and a full page. No JavaScript is involved, and a
sidebar-and-pane layout is the theme's business — which is the layer rule applied
before writing the feature rather than after.
Three size warnings fired as a result and were fixed by splitting at seams, not by
sharding: render.go gave up its type declarations to view.go, which is the theme
contract in Go and nothing else; serve() split into a dispatcher and serveBundle;
resolve() gave up its language-prefix step to cutLang.
Ideas — parked, not dropped
One file per idea, self-contained enough to resume cold. Nothing here is committed to; presence is not permission to build. An idea file exists so picking the thread back up costs one read instead of one re-derivation — the whole justification for writing it while the context is still in hand.
What goes where
| It is… | Where |
|---|---|
| an engine feature you might build (webmentions, gemtext, galleries) | docs/exploration.md catalog line, /leaf for a verdict |
| that same feature, but with a discussion worth not repeating | an idea file here, linked from the catalog line |
| the harness, agent workflow, token cost, tooling, process | here — exploration.md is engine-only |
| a decision already made | docs/decisions.md |
| a known code flaw deliberately unfixed | Latent list in docs/state.md |
| a durable fact, number, or link | reference/ |
Format
Five headings, present tense, terse. Copy an existing file. Required first lines:
# <title>
Status: parked | active | adopted → <where> | dropped: <one-line why>
Raised: YYYY-MM-DD
Keep dropped files — a one-line reason is the cheapest defence against relitigating it in four
months.
Reading discipline
Exploratory scratch code may live here too; verify.sh never formats, vets, builds or budgets it, so
it does not have to compile.
Out of agent context by default, this index included. A file is opened when the human names that
idea, not otherwise: not swept, not listed to see what is here, not cited unasked. This index is for
you, not the agent; verify.sh keeps it honest without reading it into context.
Index
- deferred-decisions.md — five pre-code ADRs demoted to intent; each returns when something implements it. parked
- specs-as-secondary-artifacts.md — optional per-feature specs, derived by default, plus the named-test convention. parked
- engine-design-review.md — open design decisions for a multi-type site; items graduate to ADRs one at a time. parked
- token-conservation.md — cut agent token cost without losing output quality. parked