<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Ruslan Akchurin</title>
  <link href="https://ruslanakchurin.dev/feed.xml" rel="self" />
  <link href="https://ruslanakchurin.dev/" />
  <id>https://ruslanakchurin.dev/</id>
  <updated>2026-07-06T00:00:00Z</updated>
  <author><name>Ruslan Akchurin</name></author>
  <entry>
    <title>Appendix B: The contract, end to end</title>
    <link href="https://ruslanakchurin.dev/blog/making-iac-boring/appendix-b" />
    <id>https://ruslanakchurin.dev/blog/making-iac-boring/appendix-b</id>
    <updated>2026-07-06T00:00:00Z</updated>
    <published>2026-07-07T00:00:00Z</published>
    <summary>One self-contained file implements the cross-tier contract: a producer publishes a typed value, a consumer names producer, key, context, and type, and a resolver returns the bound value or refuses by name.</summary>
  </entry>
  <entry>
    <title>A library is not an architecture</title>
    <link href="https://ruslanakchurin.dev/blog/library-not-architecture" />
    <id>https://ruslanakchurin.dev/blog/library-not-architecture</id>
    <updated>2026-07-06T00:00:00Z</updated>
    <published>2026-07-07T00:00:00Z</published>
    <summary>The Pulumi component library I built made infrastructure easier to create before ownership, tiers, contracts, and release boundaries were explicit.</summary>
  </entry>
  <entry>
    <title>Delivery is a transaction</title>
    <link href="https://ruslanakchurin.dev/blog/where-secrets-go/02-delivery-is-a-transaction" />
    <id>https://ruslanakchurin.dev/blog/where-secrets-go/02-delivery-is-a-transaction</id>
    <updated>2026-07-05T00:00:00Z</updated>
    <published>2026-07-01T00:00:00Z</published>
    <summary>Secret delivery breaks when writes, wiring, and receipts are separate chores; the transaction is the unit that keeps partial success and proof limits visible.</summary>
  </entry>
  <entry>
    <title>The bundle is the competitor</title>
    <link href="https://ruslanakchurin.dev/blog/where-secrets-go/03-the-bundle-is-the-competitor" />
    <id>https://ruslanakchurin.dev/blog/where-secrets-go/03-the-bundle-is-the-competitor</id>
    <updated>2026-07-05T00:00:00Z</updated>
    <published>2026-07-05T00:00:00Z</published>
    <summary>The working bundle around a secret store can deliver a value; rotation, revocation, and honest proof limits are what test whether it delivers one verifiable transaction or evidence held together by convention.</summary>
  </entry>
  <entry>
    <title>The green placebo</title>
    <link href="https://ruslanakchurin.dev/blog/green-placebo" />
    <id>https://ruslanakchurin.dev/blog/green-placebo</id>
    <updated>2026-07-04T00:00:00Z</updated>
    <published>2026-07-03T00:00:00Z</published>
    <summary>An autonomous coding agent ran a ratified security plan on a secrets manager and twice recommended the less-secure option, every fact correct. The green test suite certified a defence that did nothing. Here is what actually held the line, and why the human could not be removed from it.</summary>
  </entry>
  <entry>
    <title>A secret has to arrive</title>
    <link href="https://ruslanakchurin.dev/blog/where-secrets-go/01-a-secret-has-to-arrive" />
    <id>https://ruslanakchurin.dev/blog/where-secrets-go/01-a-secret-has-to-arrive</id>
    <updated>2026-07-03T00:00:00Z</updated>
    <published>2026-06-29T00:00:00Z</published>
    <summary>Secret storage gives a value somewhere to rest; secret delivery records the route, authority, wiring, and proof that get it there.</summary>
  </entry>
  <entry>
    <title>Start with the shape</title>
    <link href="https://ruslanakchurin.dev/blog/making-iac-boring/01-shape" />
    <id>https://ruslanakchurin.dev/blog/making-iac-boring/01-shape</id>
    <updated>2026-06-25T00:00:00Z</updated>
    <published>2026-05-17T00:00:00Z</published>
    <summary>By the time anyone reviews an IaC codebase, its shape is already decided.</summary>
  </entry>
  <entry>
    <title>Resolve by contract</title>
    <link href="https://ruslanakchurin.dev/blog/making-iac-boring/02-contract" />
    <id>https://ruslanakchurin.dev/blog/making-iac-boring/02-contract</id>
    <updated>2026-06-25T00:00:00Z</updated>
    <published>2026-05-19T00:00:00Z</published>
    <summary>Cross-stack dependencies make another stack's outputs a public interface. A typed contract on a producer namespace and key is the alternative.</summary>
  </entry>
  <entry>
    <title>Define tier membership</title>
    <link href="https://ruslanakchurin.dev/blog/making-iac-boring/03-membership" />
    <id>https://ruslanakchurin.dev/blog/making-iac-boring/03-membership</id>
    <updated>2026-06-25T00:00:00Z</updated>
    <published>2026-05-24T00:00:00Z</published>
    <summary>Environment boundaries blur when workload-specific members (service accounts, IAM bindings, DNS records) accumulate in the shared environment tier.</summary>
  </entry>
  <entry>
    <title>Fail before apply</title>
    <link href="https://ruslanakchurin.dev/blog/making-iac-boring/04-fail-before-apply" />
    <id>https://ruslanakchurin.dev/blog/making-iac-boring/04-fail-before-apply</id>
    <updated>2026-06-25T00:00:00Z</updated>
    <published>2026-06-07T00:00:00Z</published>
    <summary>An IaC contract holds only if the release path enforces it: a resolver checks type and context, then refuses invalid composition before apply.</summary>
  </entry>
  <entry>
    <title>Re-cut the system</title>
    <link href="https://ruslanakchurin.dev/blog/making-iac-boring/05-re-cut-the-system" />
    <id>https://ruslanakchurin.dev/blog/making-iac-boring/05-re-cut-the-system</id>
    <updated>2026-06-25T00:00:00Z</updated>
    <published>2026-06-24T00:00:00Z</published>
    <summary>Refactoring a live IaC system toward a new architecture: freeze the old boundary, publish the new contract beside it, delete only after consumers move.</summary>
  </entry>
  <entry>
    <title>Appendix A: The shape, runnable</title>
    <link href="https://ruslanakchurin.dev/blog/making-iac-boring/appendix-a" />
    <id>https://ruslanakchurin.dev/blog/making-iac-boring/appendix-a</id>
    <updated>2026-06-25T00:00:00Z</updated>
    <published>2026-06-25T00:00:00Z</published>
    <summary>A companion repository makes the series architecture executable: four tiers, typed cross-tier contracts, and resolver probes that refuse bad composition before any provider call.</summary>
  </entry>
</feed>
