record tags as built: ADR-0032
The queue said to re-adopt the taxonomy decision when tags landed and I did not, so ideas/deferred-decisions.md claimed no tag pages existed while /tags/ had been serving for two commits. ADR-0032 records what the code actually does; only the feed half stays deferred, and it lands with declared types since feed membership is part of a type declaration.
This commit is contained in:
@@ -367,3 +367,20 @@ Consequence: cheap — the guard cannot be forgotten, and the test is one symlin
|
||||
go through the root handle, so no helper may take a `string` path and open it directly, and the root is
|
||||
held for the life of the process.
|
||||
Revisit if: never. A hand-rolled cleaner is strictly worse.
|
||||
|
||||
## ADR-0032 — Tags: one global namespace, grouped in the listing
|
||||
Date: 2026-07-30 · Status: accepted (the tag half of withdrawn ADR-0018, now built; the feed half is still
|
||||
deferred in `ideas/deferred-decisions.md`)
|
||||
Decision: `tags` is one global namespace across every section. `/tags/{term}/` lists everything carrying a
|
||||
term, `/{section}/tags/{term}/` narrows it, and listings group by section. The URL form of a term is
|
||||
lowercased with whitespace hyphenated, preserving script, so case is not a distinction and Bengali passes
|
||||
through unchanged. Structural metadata with a fixed term set — `series` and its kin — is not a tag.
|
||||
Why: cross-type discovery is the point of a single-author site; one term spanning a comic, a poem and a
|
||||
photo essay is the feature, not the noise. Per-section pools would fragment that to solve a readability
|
||||
problem the View solves by grouping. And a free-form cross-cutting tag behaves nothing like a fixed term
|
||||
set that drives engine behaviour, so conflating them makes both worse.
|
||||
Consequence: cheap — one Query with an optional section predicate serves both listings, and the second
|
||||
caller is what earned `Query.Tag` rather than a guess. Expensive — tag hygiene is the author's discipline
|
||||
since nothing scopes terms, so `check` owes a near-duplicate report; and `tags` is now reserved at the top
|
||||
level and inside every section.
|
||||
Revisit if: the pool becomes unusable in practice — and then the answer is curation, not namespacing.
|
||||
|
||||
Reference in New Issue
Block a user