<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>kotona.app writing</title><description>Posts and technical notes from kotona.app.</description><link>https://www.kotona.app/</link><item><title>A GitOps rollback needs time to reach Git</title><link>https://www.kotona.app/writing/a-gitops-rollback-needs-time-to-reach-git/</link><guid isPermaLink="true">https://www.kotona.app/writing/a-gitops-rollback-needs-time-to-reach-git/</guid><description>A live rollback fixed a crashlooping workload, but the more interesting part was needing to suspend reconciliation long enough for the fix to become the desired state instead of a temporary lie.</description><pubDate>Wed, 08 Apr 2026 18:00:00 GMT</pubDate><category>note</category><category>operations</category><category>gitops</category></item><item><title>Gatus does not need to monitor everything</title><link>https://www.kotona.app/writing/gatus-does-not-need-to-monitor-everything/</link><guid isPermaLink="true">https://www.kotona.app/writing/gatus-does-not-need-to-monitor-everything/</guid><description>The monitoring split that held up best was also the less ambitious one: keep Gatus on in-cluster checks, keep edge probes in blackbox-exporter, and stop trying to make one checker own every route shape.</description><pubDate>Wed, 08 Apr 2026 17:00:00 GMT</pubDate><category>note</category><category>monitoring</category><category>kubernetes</category></item><item><title>The boring auth boundary was right</title><link>https://www.kotona.app/writing/the-boring-auth-boundary-was-right/</link><guid isPermaLink="true">https://www.kotona.app/writing/the-boring-auth-boundary-was-right/</guid><description>Homelab analytics had enough auth surface to accidentally grow a second identity product. The useful decision was to keep identity proof upstream, keep authorization local, and demote local login to a narrow break-glass path.</description><pubDate>Wed, 08 Apr 2026 16:00:00 GMT</pubDate><category>note</category><category>auth</category><category>architecture</category></item><item><title>Compatibility reports should be a little rude</title><link>https://www.kotona.app/writing/compatibility-reports-should-be-a-little-rude/</link><guid isPermaLink="true">https://www.kotona.app/writing/compatibility-reports-should-be-a-little-rude/</guid><description>Backend-owned contracts only become useful release artifacts once the compatibility tooling is conservative enough to complain about real breakage instead of politely missing it.</description><pubDate>Wed, 08 Apr 2026 15:00:00 GMT</pubDate><category>note</category><category>contracts</category><category>release-engineering</category></item><item><title>Remote dev shells turn the filesystem into the product</title><link>https://www.kotona.app/writing/remote-dev-shells-turn-the-filesystem-into-the-product/</link><guid isPermaLink="true">https://www.kotona.app/writing/remote-dev-shells-turn-the-filesystem-into-the-product/</guid><description>The interesting part of the remote dev shell cutover was not SSH or code-server. It was moving the real working state onto shared storage without corrupting repo-local databases or pretending two writable trees could coexist peacefully.</description><pubDate>Wed, 08 Apr 2026 14:00:00 GMT</pubDate><category>note</category><category>remote-development</category><category>infrastructure</category></item><item><title>Local execution state should stay local</title><link>https://www.kotona.app/writing/local-execution-state-should-stay-local/</link><guid isPermaLink="true">https://www.kotona.app/writing/local-execution-state-should-stay-local/</guid><description>The sprintctl and kctl workflow is useful largely because it does not pretend every intermediate agent artifact belongs in Git. Live state stays local, committed artifacts stay small, and promotion has to be deliberate.</description><pubDate>Wed, 08 Apr 2026 13:00:00 GMT</pubDate><category>note</category><category>workflow</category><category>agents</category></item><item><title>You can fix contract drift or you can pretend the frontend is authoritative</title><link>https://www.kotona.app/writing/you-can-fix-contract-drift-or-you-can-pretend-the-frontend-is-authoritative/</link><guid isPermaLink="true">https://www.kotona.app/writing/you-can-fix-contract-drift-or-you-can-pretend-the-frontend-is-authoritative/</guid><description>Backend-owned contract exports are mainly a way to stop arguing with a stale frontend view of reality. The useful part is not code generation by itself but making the backend the source of truth and then checking the drift explicitly.</description><pubDate>Wed, 08 Apr 2026 12:00:00 GMT</pubDate><category>note</category><category>contracts</category><category>frontend</category></item><item><title>The site exists</title><link>https://www.kotona.app/writing/the-site-exists/</link><guid isPermaLink="true">https://www.kotona.app/writing/the-site-exists/</guid><description>The first post is mostly a marker that the site exists and the machinery got here before the archive did.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><category>meta</category><category>site</category></item></channel></rss>