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.

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.


Back to top

katra is MIT licensed. Your log is markdown in your repo — nothing is stored anywhere else, and uninstalling leaves every entry readable.

This site uses Just the Docs, a documentation theme for Jekyll.