<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Go | Chris K Wensel</title><link>https://chris.wensel.net/tag/go/</link><atom:link href="https://chris.wensel.net/tag/go/index.xml" rel="self" type="application/rss+xml"/><description>Go</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sat, 29 Aug 2026 00:00:00 +0000</lastBuildDate><image><url>https://chris.wensel.net/og-image.png</url><title>Go</title><link>https://chris.wensel.net/tag/go/</link></image><item><title>Intrastate</title><link>https://chris.wensel.net/project/intrastate/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0000</pubDate><guid>https://chris.wensel.net/project/intrastate/</guid><description>&lt;p&gt;&lt;a href="https://github.com/cwensel/intrastate" target="_blank" rel="noopener"&gt;Intrastate&lt;/a&gt; is a CLI for making workflow state transitions explicit, reviewable, and deterministic. I call it a stateless state-machine.&lt;/p&gt;
&lt;p&gt;It is built on a simple idea: a flow should be navigated from declared state and recognized outcomes, not reimplemented ad hoc in every skill, script, or agent.&lt;/p&gt;
&lt;p&gt;Intrastate has no backing datastore. It is handed the context for a given flow, may look up additional facts, then determines the next state. Given the same transition table, state snapshot, observed tags, and recognized outcome, it returns the same result, one legal transition plan, or one typed refusal. It refuses unsafe guesses rather than improvising.&lt;/p&gt;
&lt;p&gt;Flows are modelled as tag-based transition graphs, authored as data. Legal outcomes, guards, state writes, and accessor bindings live in a reviewable transition-table format, linted statically before runtime so incomplete, ambiguous, or illegal graphs are caught during review and CI.&lt;/p&gt;
&lt;p&gt;Two model classes ship in one grammar: a state machine that owns state and advances it, and a decision table that owns no state, but answers a question about a situation rather than advancing anything.&lt;/p&gt;
&lt;p&gt;Intrastate is an example of &lt;a href="https://chris.wensel.net/post/determinism-injection/"&gt;Determinism Injection&lt;/a&gt;. An LLM prompt drives it, so ambiguity or failure is usually recoverable from context, but the state transition itself is no longer something the prompt has to get right. The net effect is lower prompt size, token spend, and wall-clock duration, with more deterministic results and higher reasoning quality.&lt;/p&gt;</description></item><item><title>Retrofit</title><link>https://chris.wensel.net/project/retrofit/</link><pubDate>Sat, 29 Aug 2026 00:00:00 +0000</pubDate><guid>https://chris.wensel.net/project/retrofit/</guid><description>&lt;p&gt;&lt;a href="https://retrofit.sh" target="_blank" rel="noopener"&gt;Retrofit&lt;/a&gt; is a CLI that tracks schema changes as discrete operations, reports their risks before any SQL exists, and derives both the forward and reverse migration scripts. Plain text, in git, reviewed like code.&lt;/p&gt;
&lt;p&gt;In my last couple of roles I watched teams spend an outsized amount of their time either avoiding changes to their SQL schemas or cleaning up the debt in them. Each change required days or weeks of planning, testing against snapshots, and scripted zero-downtime changes against production, babysat by senior engineers over a weekend. I wrote about why in &lt;a href="https://chris.wensel.net/post/introducing-retrofit/"&gt;Introducing Retrofit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Retrofit records schema evolution as logical, identity-preserving operators instead of hand-written DDL. Import an existing schema (and data) from a dump, a history of migration scripts managed by other migration tools, or start from scratch.&lt;/p&gt;
&lt;p&gt;It is an example of &lt;a href="https://chris.wensel.net/post/determinism-injection/"&gt;Determinism Injection&lt;/a&gt;. Rather than having an LLM generate schemas and migration scripts, the prompt stops at intent, &lt;code&gt;RenameColumn&lt;/code&gt;, &lt;code&gt;DecomposeTable&lt;/code&gt;, and hands that to retrofit. Retrofit renders the SQL dump or the migration scripts, forward or reverse. I do not want an LLM writing scripts that modify my database.&lt;/p&gt;
&lt;p&gt;Retrofit has not shipped yet, but there are demos online.&lt;/p&gt;</description></item></channel></rss>