<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Notes on Georgios Tsotsos</title><link>https://tsotsos.tech/notes/</link><description>Shorter observations and practical ideas on engineering practice, AI-assisted development and platform operations, sitting between the longer essays.</description><generator>Hugo</generator><language>en-us</language><managingEditor>Georgios Tsotsos</managingEditor><webMaster>Georgios Tsotsos</webMaster><copyright>© 2026 Decision Models · Georgios Tsotsos</copyright><lastBuildDate>Wed, 09 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tsotsos.tech/notes/index.xml" rel="self" type="application/rss+xml"/><item><title>Divergence Rate</title><link>https://tsotsos.tech/notes/divergence-rate/</link><pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate><guid>https://tsotsos.tech/notes/divergence-rate/</guid><description>What the divergence rate is: features shipped, the share that reach the boundary late or never, and the lag. What it is not, who sets it, where to put it.</description><content:encoded><![CDATA[<p>Companion to <a href="https://tsotsos.tech/essays/the-divergence-tax/">The Divergence Tax</a>. That essay makes the argument; this is the definition.</p>
<p><strong>The term.</strong> The divergence rate is the distance between the commercial edition and the one inside a compliance boundary: a FedRAMP authorization, a sovereign region, an on-prem build for one customer. Three quantities make it up. Features shipped to the commercial edition per period, the share of those that reach the boundary late or never, and the lag in days between the two ship dates. Multiply them and you have the cost the certification budget leaves out.</p>
<p><strong>Example.</strong> A team ships forty features a quarter to the commercial edition. Twelve depend on a service the boundary does not have yet, so they arrive a quarter later or not at all. The ones that arrive wait a median of ninety days for change control and evidence. That is twelve features a quarter running three months behind, and that&rsquo;s before anyone counts the evidence work. The real cases are in the essay: <a href="https://tsotsos.tech/essays/the-divergence-tax/#where-the-lag-comes-from">Lambda&rsquo;s twenty-five months to GovCloud</a>, <a href="https://tsotsos.tech/essays/the-divergence-tax/#ai-features-lag-most">Copilot&rsquo;s agents missing from GCC High</a>, <a href="https://tsotsos.tech/essays/the-divergence-tax/#what-the-vendors-say">GovSlack without the MCP server</a>.</p>
<p><strong>What counts.</strong> A feature is anything a customer can see or a salesperson can list. Shipped in the boundary means available to a boundary customer, with its evidence attached. A flag that stays off because a dependency is missing counts as never, until it turns on. The lag starts on the commercial ship date. Count per quarter; anything finer is noise.</p>
<p><strong>What it is not.</strong> It is not the certification cost, which is priced, dated and approved before the rate starts running. It is not the provider&rsquo;s service gap; that list is an input, not the rate. It is not feature parity, which is a snapshot where the rate is a speed. Also it is not an industry term, the established terms describe one environment or one change. Configuration drift is an environment leaving its declared state. Compliance drift is controls leaving what was authorized. FedRAMP&rsquo;s <a href="https://www.fedramp.gov/2026/definitions/" target="_blank" rel="noopener">significant change</a> is &ldquo;a change that is likely to substantively affect the security or privacy posture of a system.&rdquo; They are causes of the rate, not names for it.</p>
<p><strong>Who sets it.</strong> You do. The regulation defines what is inside the boundary and says nothing about how you build it, so the rate is set by where your dependencies live. A managed service has to exist inside the boundary before anything built on it can ship; an artifact you build yourself needs only compute, which is what a new boundary gets first. A copy of the stack starts with a high rate. One more deployment target, same artifact, flags scoped to it, evidence from the same pipeline run, keeps it low.</p>
<p><strong>Where it lives.</strong> Before the boundary exists, as a projection next to the certification cost, in the same approval. After it exists, on the dashboard next to uptime: features shipped commercially this quarter, the share that reached the boundary, the median lag in days.</p>
<p>Elsewhere the term names the same shape of thing, how fast two things that start together move apart: the <a href="https://en.wikipedia.org/wiki/Lyapunov_exponent" target="_blank" rel="noopener">Lyapunov exponent</a> in dynamical systems, the <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC2835663/" target="_blank" rel="noopener">rate of sequence divergence</a> in genetics.</p>
]]></content:encoded><category>Compliance</category><category>FedRAMP</category><category>Sovereignty</category><category>Platform Engineering</category><category>Engineering Leadership</category></item><item><title>Decision Lineage</title><link>https://tsotsos.tech/notes/decision-lineage/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>https://tsotsos.tech/notes/decision-lineage/</guid><description>Four facts the delivery pipeline should record: generator, review depth, blast radius, named owner. Why git blame and supply-chain provenance miss all four.</description><content:encoded><![CDATA[<p>Three vendors already use decision lineage, and they use it for something else. Elixirdata frames it for auditors, AskElephant for revenue teams, Collibra as data lineage extended through the model into an agent&rsquo;s output. All three record how a system reached a conclusion: the inputs, the policies, the reasoning, the outcome.</p>
<p>I have been using the term since April for the opposite direction. In a delivery pipeline the machine writes the code but does not make the decision that matters. A person accepts that code into production, and that acceptance is the record nobody keeps.</p>
<h3 id="the-four-facts">The Four Facts</h3>
<p>Four facts, recorded for every change that reaches production, captured while they are still true.</p>
<p><strong>Who or what generated it.</strong> Human, agent, or a mix of both, with tool and model identity when an agent was involved. Most teams can only answer this by asking the author, assuming you can find one.</p>
<p><strong>What a human actually reviewed.</strong> Not that somebody approved it, but how deeply they looked: read line by line, sampled, delegated to the gate, or auto-approved under policy. Recorded as an explicit state rather than inferred later from how confident the approver sounded.</p>
<p><strong>The blast radius.</strong> What the change can plausibly break, in the terms the business uses: data exposure, availability, money movement, compliance surface. Somebody spends ten seconds on that question before the merge instead of during the incident call.</p>
<p><strong>The owner.</strong> The named person accepting the residual risk. Not the committer by default, and not &ldquo;the team&rdquo;.</p>
<h3 id="what-it-is-not">What It Is Not</h3>
<p><strong>Not git blame.</strong> Blame tells you whose name is on a line, but not what that person understood when they put it there.</p>
<p><strong>Not supply-chain provenance.</strong> <a href="https://slsa.dev/" target="_blank" rel="noopener">SLSA</a> and <a href="https://in-toto.io/" target="_blank" rel="noopener">in-toto</a> answer what produced an artifact and they answer it well, but they describe artifacts rather than decisions. An attestation can prove an agent built the binary without telling you whether anyone decided that was acceptable.</p>
<p><strong>Not verification.</strong> Verification tells you the code is sound, in seconds, and it keeps improving, but it says nothing about who owns the outcome. I made that argument at length in <a href="https://tsotsos.tech/essays/verification-is-not-accountability/">Verification Is Not Accountability</a>.</p>
<p><strong>Not a compliance artifact</strong>, though it will end up in audits. It exists so the next postmortem has a chain of decisions to walk back. Incident review has always worked that way, and agents did not remove the decisions, they removed the record of them.</p>
<h3 id="keeping-it-small">Keeping It Small</h3>
<p>Four fields, not a taxonomy. Governance efforts tend to start with a reasonable list and arrive eighteen months later at a form nobody fills in honestly, and a record filled in dishonestly is worse than none.</p>
<p>Mechanically it stays small too. A git trailer or a CI annotation carries the generator. Review depth is a required field on the merge template with four permitted values. Blast radius comes from signals static analysis produces today. The owner is a name. A governance layer that needs its own product will lose to the pipeline every time.</p>
<h3 id="where-the-record-lives">Where the Record Lives</h3>
<p>The merge path. Your pull request and the gate sitting on it are the only point every change passes through, and the only point that can stop something.</p>
<p>A wiki copy goes stale within a quarter, and a governance document nobody reads is stale on the day it is written. The record has to fall out of the pipeline that is running anyway. I have had to do the reconstruction version of this in a regulated programme, and it costs many times what capturing the same evidence in flight would have.</p>
<p>So your gate answers two questions instead of one. May this code proceed, and is the decision record complete for this class of change. Incomplete record, no merge.</p>
<h3 id="where-to-start">Where to Start</h3>
<p>Four moves, and none of them is a six-month programme.</p>
<p><strong>Measure the gap on one change.</strong> Pick an agent-authored change that merged into a consequential path last month, then try to reconstruct the four facts. However long that takes is the gap, measured.</p>
<p><strong>Define what review depth means.</strong> Not a policy document, a short list your teams will actually pick from: read line by line, sampled, delegated to the gate, auto-approved under policy. Four values, argued about once, then put in the merge template.</p>
<p><strong>Use the blast-radius signals you have.</strong> Static analysis knows when a diff touches auth, data access or payment paths, so start with those three. A risk taxonomy can wait.</p>
<p><strong>Decide who declares and who owns.</strong> These are different people more often than teams expect. Whoever reviewed declares the depth, and the owner accepts the residual risk.</p>
<p>Most organizations owe a version of this record under SOX change management, and enterprise customers ask for it before regulators do. The question is whether you capture it while it is true or reconstruct it afterwards at several times the cost.</p>
]]></content:encoded><category>AI</category><category>Governance</category><category>Engineering Leadership</category><category>Platform Engineering</category><category>Reliability</category><category>Compliance</category></item><item><title>Make Accountability a System Property</title><link>https://tsotsos.tech/notes/accountability-as-a-system-property/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><guid>https://tsotsos.tech/notes/accountability-as-a-system-property/</guid><description>Accountability for AI-generated code is built into the pipeline or bolted on after an incident. Three operational shifts, and the control plane they need.</description><content:encoded><![CDATA[<p>Companion to <a href="https://tsotsos.tech/essays/ai-didnt-break-accountability/">AI Didn&rsquo;t Break Accountability. It Exposed the Gap.</a> — that essay covers the <em>why</em>. This is the <em>what</em>. Three shifts to fix the accountability gap.</p>
<p><strong>Traceability by design.</strong> Every AI-assisted change should carry provenance as a commit property, a git trailer or CI annotation recording the tool, the context, and whether the output was accepted as-is or modified. Tag at commit time, make it queryable, build from there. If you can&rsquo;t answer &ldquo;was this AI-generated, by what, and who accepted it?&rdquo; within minutes of an incident, you&rsquo;ve found your first gap.</p>
<p><strong>Ownership as a two-sided contract.</strong> The developer <em>owns intent</em>, they accepted the suggestion, they clicked merge. The <em>organization owns the environment</em>, which tools it provides, what review standards it enforces, what quality gates it builds or doesn&rsquo;t. When a CI pipeline treats AI-generated and human-written code identically, that&rsquo;s an organizational decision. When review checklists don&rsquo;t account for AI-specific failure modes (contextual bugs, architectural misfit, missed constraints), that&rsquo;s a process gap, not an individual one. Both sides have to be explicit.</p>
<p><strong>Governance in the development path, not after it.</strong> Governance checkpoints belong where decisions happen, at commit, in CI/CD, in code review. Not in a policy document nobody reads. This means trust layers, a generated utility function doesn&rsquo;t need the same scrutiny as a generated authentication handler. Risk-based gates, applied automatically, with measurable signals.</p>
<h3 id="the-tooling-is-closer-than-you-think">The Tooling Is Closer Than You Think</h3>
<p>What i find encouraging is that the building blocks for most of this already exist. They&rsquo;re just not being assembled with governance in mind.</p>
<p><strong>What to look for in governance tooling.</strong> Not every quality or security tool can extend to governance. The ones that can share specific characteristics: they sit in the code path natively (not bolted on after), they observe actual code at scale (not survey-reported adoption), they can surface AI-attribution signals and patterns associated with generated code, and they have a progression story from quality to security and to governance using the same underlying data.</p>
<p>The gap isn&rsquo;t tooling. It&rsquo;s integration and intent. Connecting provenance metadata to quality gates to ownership records: that&rsquo;s the missing layer.</p>
<figure><img src="https://tsotsos.tech/notes/accountability-as-a-system-property/control-plane_hu_d0557e1b2ed41ad1.webp"
        srcset="https://tsotsos.tech/notes/accountability-as-a-system-property/control-plane_hu_c0be03903dae0e0.webp 480w, https://tsotsos.tech/notes/accountability-as-a-system-property/control-plane_hu_d0557e1b2ed41ad1.webp 720w, https://tsotsos.tech/notes/accountability-as-a-system-property/control-plane_hu_fb59ffef6e5e2cc7.webp 1080w"
        sizes="(min-width: 768px) 720px, 100vw"
        width="720" height="362"
        alt="Governance control plane: development flow passes through provenance, policy and ownership before reaching traceable production, which feeds incident response and continuous improvement" loading="lazy" decoding="async"></figure>

<h3 id="the-governance-control-plane">The Governance Control Plane</h3>
<p>What ties this together is a <strong>control plane for engineering governance</strong> — a layer that tracks <a href="https://tsotsos.tech/essays/verification-is-not-accountability/">decision lineage</a> across humans and AI, enforces policy before code ships, and makes ownership observable. Without it, accountability is retrospective. With it, accountability becomes a system property.</p>
<p><strong>Where to start:</strong> Run a provenance test on a recent PR. Get legal, CISO, and platform engineering in a room to make the ownership decision explicitly. Assign the mandate to one team. Instrument your pipeline with basic AI-origin tags. Four moves, all achievable in weeks.</p>
]]></content:encoded><category>AI</category><category>Engineering Leadership</category><category>Governance</category><category>Platform Engineering</category><category>Reliability</category></item></channel></rss>