Status: accepted, 2026-08-25.
Task: attribute-generated-deploys-back-to-katra.
The problem, stated as a fact rather than a hope
getvect’s devlog is public at getvect.midwinter.io/devlog, generated by
katra build from site/devlog/data.json. Nothing on that page says what
produced it. A reader who likes what they are looking at — the stamped entries,
the board, the decision records — has no way to find out that the thing they
like is a tool they could use.
Every published katra is a shopfront that currently has no sign on it.
What this is not
It is not a badge. It is not a “powered by” bar, a logo strip, or anything with a background colour. Katra is an archival, typographic tool and the mark a publisher leaves in a book is a colophon: one quiet line at the end, set small, that names who made it. That is the register, and it is also the only register that survives contact with someone else’s site design.
Placement
The viewer’s shell is a fixed sidebar plus a scrolling canvas. There is already
a .kv-side-foot at the bottom of the sidebar, which looks like the obvious
home and is the wrong one: styles.css hides .kv-side entirely below 860px.
A colophon there would be invisible to every phone reader — which is a large
share of the people who arrive at a link someone shared.
So it goes at the end of .kv-main, the scrolling column that every view
builds. One insertion in route(), after the view is appended, covers
Overview, Board, Roadmap, Timeline, the three Library lists and the node
reading view, at every width, without touching seven view functions.
It scrolls with the content rather than floating. A reader who has read to the bottom is exactly the reader worth telling.
Wording
Chronicled with katra
“Chronicled” over “Built with” or “Powered by” because it says what the tool does in one word, which is the entire job of a discovery line. A reader who sees “Built with katra” learns a name; a reader who sees “Chronicled with katra” learns a name and a category, and the category is what makes them click. It is also the verb katra uses about itself everywhere else.
Only the tool name is a link. No icon, no version string, no second line.
Default on, and genuinely removable
Default-on, because an attribution nobody switches on is an attribution that does not exist. Removable without argument, because a footer that cannot be removed is a reason to reject a tool, and a tool nobody adopts attributes nothing.
# katra/config.yml
colophon: false
Colophon is a *bool rather than a bool: an absent key has to mean “on”,
so absent and explicit-false must be distinguishable. This matches how
memory.enabled already works, so there is one idiom for defaulted booleans
rather than two.
The flag rides in data.json as site.colophon, which is what makes it
survive a re-generate: the answer is computed from config at build time, every
time, rather than being an edit a user makes to the output and loses on the
next katra build.
Suppression is documented in docs/configuration.md under the word “footer” as
well as “colophon”, because someone trying to turn it off will search for what
they saw, not for what it is called.
Where the link points
https://midwinter.io/katra/ — the documentation site, not the repository. A
reader arriving cold needs the page that says what katra is and how to install
it; the site links onward to GitHub for anyone who wants source.
Not https://craigjmidwinter.github.io/katra/, which is the URL every other
piece of katra metadata currently uses. The steward flagged it and it checks
out:
$ curl -sSI -L https://craigjmidwinter.github.io/katra/
HTTP/2 301
location: http://midwinter.io/katra/ <- plaintext
HTTP/1.1 200 OK
$ curl -sSI -L https://midwinter.io/katra/
HTTP/2 200
The github.io address is a redirect, and it redirects via plaintext http://
before landing on the https page. That is a poor thing to bake into every
devlog anyone else publishes, so the colophon targets the canonical URL
directly. katra.midwinter.io does not resolve; it is not a target today.
No tracking parameter. The fleet’s Umami records the Referer header
natively — referrers are a first-class view there, not something a parameter
opts into — and midwinter.io is already registered as a tracked site, so a
click from a published devlog is counted with nothing in the URL. A query
string baked into every published devlog is also the single most expensive
thing here to change later, because it ships inside other people’s committed
sites. Adding a marker afterwards is a one-line change to one constant;
removing one from the wild is not possible.
Collection is not live yet: the steward reports Umami deployed and the sites registered, but the collector resolves to a private LAN address pending a Cloudflare Tunnel. The link is correct regardless and starts being measurable when the tunnel lands, with no change to anything shipped here.