<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Concepts on ainfra</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/</link><description>Recent content in Concepts on ainfra</description><generator>Hugo</generator><language>en</language><atom:link href="https://projectious-work.github.io/ainfra/v0.1/docs/concepts/index.xml" rel="self" type="application/rss+xml"/><item><title>Architecture</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/architecture/</guid><description>&lt;h2 id="portfolio-boundary"&gt;Portfolio boundary&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ainfra&lt;/code&gt; provisions and configures infrastructure targets. It hands a
non-secret output contract to downstream systems:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;InfrastructureTemplate + TemplateInput
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; validation and policy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; OpenTofu plan and state
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Ansible host configuration
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; InfrastructureOutput
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; workload deployment
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OpenTofu owns infrastructure desired state. Ansible owns host configuration.
The &lt;code&gt;ainfra&lt;/code&gt; wrapper validates contracts and visibly orchestrates those tools.
Every wrapper operation has a documented direct-tool equivalent.&lt;/p&gt;</description></item><item><title>Security model</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/security-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/security-model/</guid><description>&lt;h2 id="assumptions"&gt;Assumptions&lt;/h2&gt;
&lt;p&gt;Cloud credentials, state, plans, private keys, generated inventories, and
provider logs may contain sensitive information. The local operator environment
is trusted to hold short-lived credentials; the repository and ordinary output
documents are not secret stores.&lt;/p&gt;
&lt;p&gt;The model reduces accidental exposure and unsafe defaults. It does not turn an
untrusted workstation or compromised provider account into a trusted one.&lt;/p&gt;
&lt;h2 id="invariants"&gt;Invariants&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Operators supply public SSH keys; &lt;code&gt;ainfra&lt;/code&gt; never creates private keys.&lt;/li&gt;
&lt;li&gt;Root login and password SSH are prohibited.&lt;/li&gt;
&lt;li&gt;SSH host-key checking is mandatory.&lt;/li&gt;
&lt;li&gt;Management ingress is private by default.&lt;/li&gt;
&lt;li&gt;Public IPv4 allocation is opt-in.&lt;/li&gt;
&lt;li&gt;Private networks use narrow RFC1918 ranges and reject broad management
ranges.&lt;/li&gt;
&lt;li&gt;Non-disposable environments require encrypted, locked, recoverable remote
state with TLS and access control.&lt;/li&gt;
&lt;li&gt;Providers, collections, roles, images, and scanners are pinned.&lt;/li&gt;
&lt;li&gt;Standard outputs contain references to credentials, never their contents.&lt;/li&gt;
&lt;li&gt;Destructive operations name their exact reviewed destroy-plan ID and require
explicit approval.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="layered-verification"&gt;Layered verification&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Layer&lt;/th&gt;
 &lt;th&gt;What it proves&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;JSON Schema&lt;/td&gt;
 &lt;td&gt;Document shape, version, enums, and unknown-field rejection&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Policy checks&lt;/td&gt;
 &lt;td&gt;Cross-field security invariants&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;OpenTofu validation&lt;/td&gt;
 &lt;td&gt;Provider configuration and expression correctness&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Checkov&lt;/td&gt;
 &lt;td&gt;Known infrastructure-policy findings&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Gitleaks&lt;/td&gt;
 &lt;td&gt;Repository secret patterns&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Plan assertions&lt;/td&gt;
 &lt;td&gt;The proposed resource graph matches safety expectations&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ansible checks&lt;/td&gt;
 &lt;td&gt;Syntax, lint, check mode, and idempotence&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Disposable live test&lt;/td&gt;
 &lt;td&gt;Provider behavior and end-to-end teardown&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;No single layer is treated as complete proof. Live Hetzner verification is the
final cost-bearing gate and requires explicit approval.&lt;/p&gt;</description></item><item><title>Project configuration and locking</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/project-configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/project-configuration/</guid><description>&lt;p&gt;An ainfra project separates committed intent from local operational state:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;my-infrastructure/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── ainfra.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── ainfra.lock
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── environments/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── development.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── .ainfra/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;ainfra.yaml&lt;/code&gt; names the project, selects one built-in template, and maps
environment names to &lt;code&gt;TemplateInput&lt;/code&gt; files. Those files hold non-secret
provider, topology, network, access, and state intent. Credentials remain
external references such as &lt;code&gt;HCLOUD_TOKEN&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ainfra.lock&lt;/code&gt; is generated by &lt;code&gt;ainfra init&lt;/code&gt; and should normally be committed.
It pins the template source, name, manifest version, and SHA-256 digest of the
complete embedded template. Normal project validation never rewrites it.&lt;/p&gt;</description></item><item><title>State and secrets</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/state-and-secrets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/state-and-secrets/</guid><description>&lt;h2 id="state"&gt;State&lt;/h2&gt;
&lt;p&gt;Non-disposable environments must use a capability-validated remote backend
providing encryption at rest, locking, version recovery, TLS, and access
control. S3-compatible services qualify only after integration tests prove
those capabilities.&lt;/p&gt;
&lt;p&gt;Local state is limited to inputs explicitly marked disposable and produces a
prominent warning. The wrapper does not provision, repair, or silently migrate
a backend.&lt;/p&gt;
&lt;p&gt;Backend configuration stays outside version control. The repository ignores
local state, plans, &lt;code&gt;.terraform/&lt;/code&gt;, and &lt;code&gt;.ainfra/&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Template strategy</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/template-strategy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/concepts/template-strategy/</guid><description>&lt;p&gt;An ainfra template is a versioned, self-contained infrastructure
implementation behind a common contract. Templates share lifecycle and safety
rules, but keep provider-specific OpenTofu, host configuration, and operational
documentation together.&lt;/p&gt;
&lt;h2 id="why-templates-exist"&gt;Why templates exist&lt;/h2&gt;
&lt;p&gt;The template boundary separates three concerns:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The ainfra wrapper owns discovery, contract validation, reviewed-plan
binding, sanitized outputs, and ownership-scoped destruction.&lt;/li&gt;
&lt;li&gt;A template owns provider resources, host configuration, supported images,
capabilities, and provider-specific defaults.&lt;/li&gt;
&lt;li&gt;The operator owns the selected template, non-secret intent, credential
references, reviewed plan, and explicit lifecycle approvals.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This lets a template evolve without hiding OpenTofu or Ansible. Every engine
working directory remains directly usable and inspectable.&lt;/p&gt;</description></item></channel></rss>