ADR-061: A scheme’s template is a form, not a document
Status Active · Filed 2026-08-24
Context
Every scheme directory holds a _template.md that luria new copies. It is
not an entry in the record; it is the shape an entry takes, and the tool reads
it rather than a reader.
It was nonetheless scanned like a document, which put its author in a bind with no correct answer. A template illustrating citation syntax has to write some code:
- A realistic example is a real document, and one that may not be in force —
a downstream record used a code that happened to be
Rejected, so the template generated a retired-citation finding against itself on every run. - A placeholder is a code that resolves to nothing, which is the unresolved-codes finding instead.
Both are true statements about a file nobody filed. The escape was a directive in each template:
<!-- unresolved-ok-file: LIT-000 — the placeholder a new note replaces -->That works, and it is a line every scheme in every project has to carry, to acknowledge a finding that was never about the record.
Decision
A _template.md in a scheme’s directory is exempt from the reference
machinery: it is not a citing site, so nothing it names is counted as a
citation, and no code in it needs to resolve.
Exempt from the code checks only. Its relative link targets are still checked, because a broken path in a template is copied into every document made from it — and that failure is real, invisible, and multiplied.
The distinction is between two questions that looked like one: does this code name a document (illustrative in a form, exempt) and does this path go somewhere (real everywhere, checked).
Alternatives considered
- Keep acknowledging it per project. The status quo. It spends a directive on every scheme forever to silence a finding that is always wrong, which is the shape this record elsewhere calls a busy guard: the hazard is upstream, and the fix is to remove what generates the mistake.
- Reserve a placeholder number per scheme — treat
X-000as never allocated and always resolvable. Narrower, and it only covers the placeholder case; a template quoting a realistic in-force example still reports when that example is later retired, which is the harder half. - Exempt templates from everything. Simpler to implement and it drops link-target checking, which is the one check a template genuinely needs.
- Move templates out of the scheme directory. They are found by
convention and read by
luria new; relocating them to fix a scanning question would move a file readers expect to find beside the documents it produces.
Consequences
A template can now use a realistic example — a real code, in force or not — which is what makes a template teach. That is the point, and it is also the cost: a code in a template is no longer checked at all, so one naming a document that later disappears goes unreported. A template is copied by a command that fills in the frontmatter, and the resulting document is checked normally, so the error surfaces at the first use rather than never.
Existing unresolved-ok-file: directives in templates become stale
annotations and will be reported as such, which is the machinery telling
projects to delete a line they no longer need.