<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Use it on choudoufu</title><link>https://intentius.io/choudoufu/docs/use/</link><description>Recent content in Use it on choudoufu</description><generator>Hugo</generator><language>en</language><atom:link href="https://intentius.io/choudoufu/docs/use/index.xml" rel="self" type="application/rss+xml"/><item><title>Compatibility reference</title><link>https://intentius.io/choudoufu/docs/use/compatibility/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/compatibility/</guid><description>&lt;h1 id="compatibility-reference"&gt;Compatibility reference&lt;a class="anchor" href="#compatibility-reference"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;What choudoufu admits and refuses: the provider and resource types, how a&#10;configuration must be written, and how it may be run.&lt;/p&gt;&#10;&lt;p&gt;This is the enumerated list. For why static evaluability is the rule behind&#10;most of it, see &lt;a href="https://intentius.io/choudoufu/docs/model/identity/"&gt;Identity&lt;/a&gt;. To check&#10;your own configuration against this list, see &lt;a href="https://intentius.io/choudoufu/docs/use/check-a-config/"&gt;How to check a configuration&#10;before migrating&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="your-provider"&gt;Your provider&lt;a class="anchor" href="#your-provider"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;AWS only. Every &lt;code&gt;google_*&lt;/code&gt;, &lt;code&gt;azurerm_*&lt;/code&gt;, &lt;code&gt;kubernetes_*&lt;/code&gt; and &lt;code&gt;helm_*&lt;/code&gt; resource&#10;is refused. There is no second cloud on the roadmap&#10;(&lt;a href="https://github.com/INTENTIUS/choudoufu/issues/5"&gt;#5&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>How to check a configuration before migrating</title><link>https://intentius.io/choudoufu/docs/use/check-a-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/check-a-config/</guid><description>&lt;h1 id="how-to-check-a-configuration-before-migrating"&gt;How to check a configuration before migrating&lt;a class="anchor" href="#how-to-check-a-configuration-before-migrating"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Run &lt;code&gt;choudoufu live-check&lt;/code&gt; against any OpenTofu configuration:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;choudoufu live-check ./&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Point it at any OpenTofu configuration. No &lt;code&gt;live&lt;/code&gt; block, no cloud calls, no&#10;requirement that the directory has heard of this fork. It prints a verdict,&#10;then every refusal that fired with its site count, the types responsible, and&#10;what to do about each.&lt;/p&gt;&#10;&lt;p&gt;Run &lt;code&gt;choudoufu init&lt;/code&gt; first if you can. With provider schemas available it&#10;judges types from the provider&amp;rsquo;s own identity schema as well as the built-in&#10;table, and admits more. Without them it says the answer is pessimistic.&lt;/p&gt;</description></item><item><title>Migrate an existing estate</title><link>https://intentius.io/choudoufu/docs/use/migrate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/migrate/</guid><description>&lt;h1 id="migrate-an-existing-estate"&gt;Migrate an existing estate&lt;a class="anchor" href="#migrate-an-existing-estate"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Most people arrive here, with an OpenTofu configuration already managing live&#10;AWS resources.&lt;/p&gt;&#10;&lt;p&gt;Migrating means binding those resources to your configuration, one marker at a&#10;time, until each carries its own ownership record. It does not happen&#10;automatically and the failure mode is quiet.&lt;/p&gt;&#10;&lt;blockquote class="book-hint warning" &gt;&#10;&lt;p&gt;Turning on live markers does not bind resources you already manage. A resource&#10;with no marker is not yours yet, so the first plan reads it as absent and&#10;proposes a second one beside it. Applying that plan does not fail. It creates&#10;the duplicate.&lt;/p&gt;</description></item><item><title>Day-2 operations</title><link>https://intentius.io/choudoufu/docs/use/day2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/day2/</guid><description>&lt;h1 id="day-2-operations"&gt;Day-2 operations&lt;a class="anchor" href="#day-2-operations"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Running an estate after the first apply. Renaming, removing, recording effects&#10;the cloud cannot report, and working with other people.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Task&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Page&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Rename a resource&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://intentius.io/choudoufu/docs/use/rename-a-resource/"&gt;How to rename a resource&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Stop managing or destroy a resource&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://intentius.io/choudoufu/docs/use/remove-a-resource/"&gt;How to stop managing or destroy a resource&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Record an effect the cloud cannot report&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://intentius.io/choudoufu/docs/use/record-an-effect/"&gt;How to record an effect the cloud cannot report&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Look up what a &lt;code&gt;policy&lt;/code&gt; setting does&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://intentius.io/choudoufu/docs/use/ownership-policy/"&gt;The ownership policy matrix&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Understand what happens when two runs overlap&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://intentius.io/choudoufu/docs/model/concurrency/"&gt;Two runs at once&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="sharing-values-between-estates"&gt;Sharing values between estates&lt;a class="anchor" href="#sharing-values-between-estates"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;There is no remote state to read. &lt;code&gt;live/OUTPUTS.md&lt;/code&gt; covers the cross-estate&#10;pattern, and &lt;code&gt;data &amp;quot;terraform_remote_state&amp;quot;&lt;/code&gt; is refused.&lt;/p&gt;</description></item><item><title>How to rename a resource</title><link>https://intentius.io/choudoufu/docs/use/rename-a-resource/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/rename-a-resource/</guid><description>&lt;h1 id="how-to-rename-a-resource"&gt;How to rename a resource&lt;a class="anchor" href="#how-to-rename-a-resource"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Rename the resource block, then rewrite the marker.&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;choudoufu live-mv aws_vpc.old aws_vpc.new&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That rewrites the &lt;code&gt;tofu-address&lt;/code&gt; tag on the live resource carrying the old&#10;address. The tag write is the move, so &lt;code&gt;moved&lt;/code&gt; blocks are refused. Resources&#10;never adopted are left alone.&lt;/p&gt;&#10;&lt;p&gt;A destination address absent from your configuration is refused unless you pass&#10;&lt;code&gt;-allow-missing-config&lt;/code&gt;. &lt;code&gt;-dry-run&lt;/code&gt; shows what it would write. Full options in&#10;&lt;code&gt;choudoufu live-mv -help&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Start a new estate</title><link>https://intentius.io/choudoufu/docs/use/start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/start/</guid><description>&lt;h1 id="start-a-new-estate"&gt;Start a new estate&lt;a class="anchor" href="#start-a-new-estate"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;For an estate with nothing in it yet, where choudoufu creates every resource.&lt;/p&gt;&#10;&lt;p&gt;If AWS already holds resources this configuration should manage, read&#10;&lt;a href="https://intentius.io/choudoufu/docs/use/migrate/"&gt;Migrate an existing estate&lt;/a&gt; first. Nothing binds a live resource&#10;to your configuration until its markers are on it, so applying against unmarked&#10;resources creates a second copy beside them.&lt;/p&gt;&#10;&lt;h2 id="install"&gt;Install&lt;a class="anchor" href="#install"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Every &lt;a href="https://github.com/INTENTIUS/choudoufu/releases"&gt;tagged release&lt;/a&gt; carries&#10;prebuilt binaries for macOS, Linux and Windows on amd64 and arm64, plus a&#10;&lt;code&gt;SHA256SUMS&lt;/code&gt; file.&lt;/p&gt;</description></item><item><title>Questions</title><link>https://intentius.io/choudoufu/docs/use/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/faq/</guid><description>&lt;h1 id="questions"&gt;Questions&lt;a class="anchor" href="#questions"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Two questions with no other home. Everything else that used to live on this&#10;page has a real page now: what changes for you is in &lt;a href="https://intentius.io/choudoufu/docs/model/"&gt;The three&#10;pieces&lt;/a&gt;, self-service tagging and IAM in&#10;&lt;a href="https://intentius.io/choudoufu/docs/governance/"&gt;Scoping a role&lt;/a&gt;, storage in &lt;a href="https://intentius.io/choudoufu/docs/use/storage/"&gt;Where things&#10;are stored&lt;/a&gt;, migration in &lt;a href="https://intentius.io/choudoufu/docs/use/migrate/"&gt;Migrate an&#10;existing estate&lt;/a&gt;, marker stripping in&#10;&lt;a href="https://intentius.io/choudoufu/docs/model/identity/"&gt;Identity&lt;/a&gt;, and concurrent applies in&#10;&lt;a href="https://intentius.io/choudoufu/docs/model/concurrency/"&gt;Two runs at once&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="why-is-it-called-choudoufu"&gt;Why is it called choudoufu?&lt;a class="anchor" href="#why-is-it-called-choudoufu"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Stinky tofu. Off-putting at first, and people who like it like it a lot.&lt;/p&gt;</description></item><item><title>How to stop managing or destroy a resource</title><link>https://intentius.io/choudoufu/docs/use/remove-a-resource/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/remove-a-resource/</guid><description>&lt;h1 id="how-to-stop-managing-or-destroy-a-resource"&gt;How to stop managing or destroy a resource&lt;a class="anchor" href="#how-to-stop-managing-or-destroy-a-resource"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Deleting a resource block leaves its marker on the live object, and the sweep&#10;destroys a marked, undeclared, taggable resource on the next plan. That matches&#10;upstream without a &lt;code&gt;removed&lt;/code&gt; block.&lt;/p&gt;&#10;&lt;p&gt;To stop managing something without destroying it, change what happens to a&#10;resource you no longer declare.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-hcl" data-lang="hcl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# estate.chdf.hcl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;estate &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;my-estate&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;policy&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; undeclared_tagged &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;untag&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;untag&lt;/code&gt; removes this estate&amp;rsquo;s marker and leaves the resource running. &lt;code&gt;keep&lt;/code&gt;&#10;leaves both alone. &lt;a href="https://intentius.io/choudoufu/docs/use/ownership-policy/"&gt;The ownership policy matrix&lt;/a&gt;&#10;has the rest of the verbs.&lt;/p&gt;</description></item><item><title>How to write markers inside a for_each'd module</title><link>https://intentius.io/choudoufu/docs/use/keyed-modules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/keyed-modules/</guid><description>&lt;h1 id="how-to-write-markers-inside-a-for_eachd-module"&gt;How to write markers inside a for_each&amp;rsquo;d module&lt;a class="anchor" href="#how-to-write-markers-inside-a-for_eachd-module"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Instances of a &lt;code&gt;for_each&lt;/code&gt;&amp;rsquo;d module share one HCL body for &lt;code&gt;tags&lt;/code&gt;, so no single&#10;literal address is correct for all of them and auto-stamping cannot reach&#10;inside. choudoufu leaves such a resource alone when it already declares&#10;&lt;code&gt;tags&lt;/code&gt;, and raises a must-stamp error when it declares none and its type needs&#10;discovery.&lt;/p&gt;&#10;&lt;p&gt;Thread the module&amp;rsquo;s own &lt;code&gt;each.key&lt;/code&gt; through and build the address from it.&lt;/p&gt;</description></item><item><title>How to record an effect the cloud cannot report</title><link>https://intentius.io/choudoufu/docs/use/record-an-effect/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/record-an-effect/</guid><description>&lt;h1 id="how-to-record-an-effect-the-cloud-cannot-report"&gt;How to record an effect the cloud cannot report&lt;a class="anchor" href="#how-to-record-an-effect-the-cloud-cannot-report"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Nothing in the live system records that a database migration, a script, or a&#10;one-shot API call happened, so no marker reads back.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;null_resource&lt;/code&gt;, &lt;code&gt;terraform_data&lt;/code&gt;, &lt;code&gt;time_*&lt;/code&gt; and non-secret &lt;code&gt;random_*&lt;/code&gt; work once&#10;the live configuration declares a &lt;code&gt;record_store&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-hcl" data-lang="hcl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# estate.chdf.hcl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;estate &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;my-estate&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;record_store&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;ssm&amp;#34;&lt;/span&gt; {}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The label picks the backend, one of &lt;code&gt;local&lt;/code&gt;, &lt;code&gt;ssm&lt;/code&gt; or &lt;code&gt;s3&lt;/code&gt;.&#10;&lt;a href="https://intentius.io/choudoufu/docs/use/storage/"&gt;Where things are stored&lt;/a&gt; has &amp;ldquo;Choosing a&#10;record store backend&amp;rdquo; for which one to pick, what each holds, and why a&#10;receipt must not go in there. Those resources then run the stock provider&#10;lifecycle exactly as upstream.&lt;/p&gt;</description></item><item><title>Where things are stored</title><link>https://intentius.io/choudoufu/docs/use/storage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/storage/</guid><description>&lt;h1 id="where-things-are-stored"&gt;Where things are stored&lt;a class="anchor" href="#where-things-are-stored"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;choudoufu writes in three places. Two can both end up as SSM parameters, which&#10;is why they get confused. They do different jobs and have different owners.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;What&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Where it lives&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Who reads it&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Losing it costs&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Ownership markers&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Two tags on the resource itself&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;choudoufu, and you, with any cloud tool&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The resource goes invisible and the next plan proposes a duplicate&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Micro-state records&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A local directory beside the module unless you declare a &lt;code&gt;record_store&lt;/code&gt; on SSM or S3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;choudoufu only&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Churn, since the effect re-runs or its value regenerates&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Receipts&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Ordinary resources &lt;em&gt;you&lt;/em&gt; declare, by convention SSM parameters&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;You, your reviewers, your incident responder&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Nothing structural. It is your data, in your configuration&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;The first is the product. The second is plumbing that is there by default and&#10;that you point somewhere else when a team needs to share it. The third you&#10;write yourself, and choudoufu only lints it.&lt;/p&gt;</description></item><item><title>How the compatibility numbers are measured</title><link>https://intentius.io/choudoufu/docs/use/measurement/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/measurement/</guid><description>&lt;h1 id="how-the-compatibility-numbers-are-measured"&gt;How the compatibility numbers are measured&lt;a class="anchor" href="#how-the-compatibility-numbers-are-measured"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/INTENTIUS/choudoufu/blob/main/live/corpus-refusals.json"&gt;&lt;code&gt;live/corpus-refusals.json&lt;/code&gt;&lt;/a&gt;&#10;measures which refusals fire and how often across the corpus.&#10;&lt;a href="https://intentius.io/choudoufu/docs/use/compatibility/"&gt;Compatibility reference&lt;/a&gt; copies no&#10;count from it, because a copied count goes stale the moment the corpus&#10;re-runs.&lt;/p&gt;&#10;&lt;p&gt;That measured ranking is why the static-evaluability rule (see&#10;&lt;a href="https://intentius.io/choudoufu/docs/model/identity/"&gt;Identity&lt;/a&gt;) leads the reference page.&#10;Several of the most frequent refusals are that one rule under different&#10;diagnostics.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Do not read the fixture or module-example populations as a compatibility&#10;rate.&lt;/strong&gt; Module &lt;code&gt;examples/&lt;/code&gt; directories demonstrate a module&amp;rsquo;s full surface, so&#10;they lean far harder on variables, conditionals and &lt;code&gt;dynamic&lt;/code&gt; blocks than a&#10;configuration describing one deployment, and refuse almost across the board.&#10;Those populations are marked as a ranking, settled by&#10;&lt;a href="https://github.com/INTENTIUS/choudoufu/issues/118"&gt;#118&lt;/a&gt;. One population can&#10;honestly carry a rate since&#10;&lt;a href="https://github.com/INTENTIUS/choudoufu/issues/147"&gt;#147&lt;/a&gt;, whole deployment&#10;root modules published by their operators, pinned by commit, marked&#10;&lt;code&gt;reads_as: rate&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>The ownership policy matrix</title><link>https://intentius.io/choudoufu/docs/use/ownership-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/ownership-policy/</guid><description>&lt;h1 id="the-ownership-policy-matrix"&gt;The ownership policy matrix&lt;a class="anchor" href="#the-ownership-policy-matrix"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Every resource choudoufu sees falls into one of four situations, decided by&#10;whether your configuration declares it and whether it carries this estate&amp;rsquo;s&#10;marker. The &lt;code&gt;policy&lt;/code&gt; block sets what happens in each.&lt;/p&gt;&#10;&lt;p&gt;With no &lt;code&gt;policy&lt;/code&gt; block you get the defaults below, which are today&amp;rsquo;s behaviour.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;The situation you are in&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Setting&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Default&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;What the default does&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;You declare it, and it carries your marker. The ordinary case.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;declared_tagged&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;converge&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Plans and applies it against your configuration, like any resource.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;You declare it, but no live resource carries your marker for it.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;declared_untagged&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;refuse&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Declines to touch it until you adopt it.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;You removed it from your configuration, and it still carries your marker.&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;undeclared_tagged&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;&lt;code&gt;delete&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Destroys it on the next plan.&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;It carries no marker, and you never declared it. Somebody else&amp;rsquo;s.&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;undeclared_untagged&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;keep&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Leaves it alone.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;blockquote class="book-hint warning" &gt;&#10;&lt;p&gt;The third row is the one to know before deleting a resource block. Removing the&#10;block does not mean &amp;ldquo;stop managing this&amp;rdquo;, it means &amp;ldquo;destroy this&amp;rdquo;, which is&#10;also what upstream does without a &lt;code&gt;removed&lt;/code&gt; block. Set &lt;code&gt;undeclared_tagged&lt;/code&gt; to&#10;&lt;code&gt;untag&lt;/code&gt; or &lt;code&gt;keep&lt;/code&gt; first if the resource should survive. &lt;a href="https://intentius.io/choudoufu/docs/use/remove-a-resource/"&gt;How to stop managing&#10;or destroy a resource&lt;/a&gt; walks&#10;through it.&lt;/p&gt;</description></item><item><title>Reference</title><link>https://intentius.io/choudoufu/docs/use/reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://intentius.io/choudoufu/docs/use/reference/</guid><description>&lt;h1 id="reference"&gt;Reference&lt;a class="anchor" href="#reference"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;The normative specifications live in the repository beside the code and the&#10;tests holding them to it. This page indexes them.&lt;/p&gt;&#10;&lt;p&gt;They are for people integrating with choudoufu or working on it. To get an&#10;estate running, use the path pages.&lt;/p&gt;&#10;&lt;h2 id="specifications"&gt;Specifications&lt;a class="anchor" href="#specifications"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Document&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;What it settles&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://github.com/INTENTIUS/choudoufu/blob/main/live/MARKERS.md"&gt;&lt;code&gt;live/MARKERS.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The marker tag spec. Key names, the escaping rule, continuation tags, ownership semantics, the rename rule, and what protects the tags. The one surface external tooling can rely on.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://github.com/INTENTIUS/choudoufu/blob/main/live/LIMITATIONS.md"&gt;&lt;code&gt;live/LIMITATIONS.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Every construct the mode bounds or rejects, per rule, each with its lint rule and fixture.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://github.com/INTENTIUS/choudoufu/blob/main/live/RECEIPTS.md"&gt;&lt;code&gt;live/RECEIPTS.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Recording an effect that leaves nothing in the live system to read back, and the guards on the pattern.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://github.com/INTENTIUS/choudoufu/blob/main/live/OUTPUTS.md"&gt;&lt;code&gt;live/OUTPUTS.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Sharing values between estates with no remote state.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="coverage-and-evidence"&gt;Coverage and evidence&lt;a class="anchor" href="#coverage-and-evidence"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Document&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;What it settles&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://github.com/INTENTIUS/choudoufu/blob/main/live/COVERAGE.md"&gt;&lt;code&gt;live/COVERAGE.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Which AWS resource types are covered, in layers, and what each layer means.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://github.com/INTENTIUS/choudoufu/blob/main/live/SURVEY.md"&gt;&lt;code&gt;live/SURVEY.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;How admission is decided per type, the method, and the raw signals behind it.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="the-demo-which-is-also-the-test-suite"&gt;The demo, which is also the test suite&lt;a class="anchor" href="#the-demo-which-is-also-the-test-suite"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/INTENTIUS/choudoufu/blob/main/live/e2e/README.md"&gt;&lt;code&gt;live/e2e/README.md&lt;/code&gt;&lt;/a&gt;&#10;documents the harness, what each step proves, the environment knobs, and each&#10;exit code.&lt;/p&gt;</description></item></channel></rss>