<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on ainfra</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/reference/</link><description>Recent content in Reference on ainfra</description><generator>Hugo</generator><language>en</language><atom:link href="https://projectious-work.github.io/ainfra/v0.1/docs/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>CLI</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/reference/cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/reference/cli/</guid><description>&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;ainfra init [--name NAME] [--template TEMPLATE]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [--environment ENVIRONMENT] [--format text|json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra validate [&amp;lt;path-or-template&amp;gt;] [--input INPUT]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [--format text|json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra doctor [--input INPUT | --environment ENV] [--format text|json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra plan [&amp;lt;template&amp;gt; --input INPUT | --environment ENV]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [--destroy] [--format text|json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra apply [&amp;lt;template&amp;gt; --input INPUT | --environment ENV]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --approve PLAN_ID
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra up --environment ENV --approve PLAN_ID --known-hosts FILE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [--format json|yaml]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra destroy [&amp;lt;template&amp;gt; --input INPUT | --environment ENV]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --approve-destroy PLAN_ID
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra down --environment ENV --approve-destroy PLAN_ID
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra outputs [&amp;lt;template&amp;gt; | --environment ENV] --run PLAN_ID
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [--format json|yaml]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra configure [&amp;lt;template&amp;gt; | --environment ENV] --run PLAN_ID
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --known-hosts FILE [--check]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra status --environment ENV [--format text|json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra legacy inspect [--root PYTHON_REPOSITORY] [--format text|json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ainfra inventory --output OUTPUT --destination DESTINATION
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="init"&gt;&lt;code&gt;init&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Initializes the current directory without contacting a provider or invoking
OpenTofu or Ansible. It creates &lt;code&gt;ainfra.yaml&lt;/code&gt;, &lt;code&gt;ainfra.lock&lt;/code&gt;, and one example
under &lt;code&gt;environments/&lt;/code&gt;, then adds &lt;code&gt;.ainfra/&lt;/code&gt; to &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Contracts</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/reference/contracts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/reference/contracts/</guid><description>&lt;p&gt;All schemas use JSON Schema draft 2020-12 and reject unknown fields.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Contract&lt;/th&gt;
 &lt;th&gt;Source&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;InfrastructureTemplate/v1alpha1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/blob/main/schemas/template-manifest.v1alpha1.json"&gt;&lt;code&gt;schemas/template-manifest.v1alpha1.json&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Template engines, paths, capabilities, and invariants&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;TemplateInput/v1alpha1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/blob/main/schemas/template-input.v1alpha1.json"&gt;&lt;code&gt;schemas/template-input.v1alpha1.json&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Non-secret operator intent and credential references&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;InfrastructureOutput/v1alpha1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/blob/main/schemas/template-output.v1alpha1.json"&gt;&lt;code&gt;schemas/template-output.v1alpha1.json&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Stable, non-secret handoff to downstream systems&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ainfra.plan/v1alpha1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/blob/main/schemas/plan-record.v1alpha1.json"&gt;&lt;code&gt;schemas/plan-record.v1alpha1.json&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Exact reviewed-plan binding for lifecycle authorization&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ainfra.plan/v1alpha2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/blob/main/schemas/plan-record.v1alpha2.json"&gt;&lt;code&gt;schemas/plan-record.v1alpha2.json&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Project-bound lifecycle authorization&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ainfra.run/v1alpha2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/blob/main/schemas/run-record.v1alpha2.json"&gt;&lt;code&gt;schemas/run-record.v1alpha2.json&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Immutable run identity&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ainfra.run-event/v1alpha1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/blob/main/schemas/run-event.v1alpha1.json"&gt;&lt;code&gt;schemas/run-event.v1alpha1.json&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Append-only lifecycle evidence&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ainfra.status/v1alpha1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/blob/main/schemas/status.v1alpha1.json"&gt;&lt;code&gt;schemas/status.v1alpha1.json&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Sanitized local status output&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ainfra.legacy-inspection/v1alpha1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/blob/main/schemas/legacy-inspection.v1alpha1.json"&gt;&lt;code&gt;schemas/legacy-inspection.v1alpha1.json&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Read-only legacy evidence report&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="compatibility"&gt;Compatibility&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;apiVersion&lt;/code&gt; is locked through the v1 series. An incompatible &lt;code&gt;v2&lt;/code&gt; requires
a full migration rather than silent coercion.&lt;/p&gt;</description></item><item><title>Templates</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/reference/templates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/reference/templates/</guid><description>&lt;p&gt;ainfra embeds its built-in templates in the release binary. Their reviewed
source remains under &lt;code&gt;templates/&lt;/code&gt;; each directory contains an
&lt;code&gt;ainfra-template.yaml&lt;/code&gt; manifest and a template-specific README.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Template&lt;/th&gt;
 &lt;th&gt;Source&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;th&gt;Status&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hetzner-kubernetes-baseline&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/projectious-work/ainfra/tree/main/templates/hetzner-kubernetes-baseline"&gt;&lt;code&gt;templates/hetzner-kubernetes-baseline&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Private-networked, hardened Debian 13 hosts prepared for a later Kubernetes installation&lt;/td&gt;
 &lt;td&gt;Initial validated template&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The binary does not currently use an external registry or download templates
at runtime. Clone the repository only when you want to inspect or adapt source.&lt;/p&gt;</description></item><item><title>Hetzner Kubernetes-ready baseline</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/reference/hetzner-baseline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/reference/hetzner-baseline/</guid><description>&lt;p&gt;The baseline provisions one control-plane-capable Debian 13 host and optional
workers on a narrow private network. It does not install Kubernetes.&lt;/p&gt;
&lt;p&gt;OpenTofu creates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a project-owned private network and subnet;&lt;/li&gt;
&lt;li&gt;a narrowly scoped firewall;&lt;/li&gt;
&lt;li&gt;registrations for operator-supplied SSH public keys;&lt;/li&gt;
&lt;li&gt;Debian 13 servers;&lt;/li&gt;
&lt;li&gt;public IPv4 or IPv6 attachments only when explicitly enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ansible configures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;secure SSH daemon policy;&lt;/li&gt;
&lt;li&gt;nftables host firewall policy;&lt;/li&gt;
&lt;li&gt;unattended security updates;&lt;/li&gt;
&lt;li&gt;persistent journal and audit configuration;&lt;/li&gt;
&lt;li&gt;Kubernetes-ready operating-system prerequisites.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="networking"&gt;Networking&lt;/h2&gt;
&lt;p&gt;Public IPv4 and IPv6 are independent and disabled in the standard input.
Disabling IPv4 means no billable public IPv4 resource or attachment may exist.
The generated inventory prefers private management addresses.&lt;/p&gt;</description></item><item><title>Acceptance matrix</title><link>https://projectious-work.github.io/ainfra/v0.1/docs/reference/acceptance-matrix/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://projectious-work.github.io/ainfra/v0.1/docs/reference/acceptance-matrix/</guid><description>&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Requirement&lt;/th&gt;
 &lt;th&gt;Evidence&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Versioned strict contracts&lt;/td&gt;
 &lt;td&gt;Schema and positive/negative fixture tests&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Visible wrapper commands&lt;/td&gt;
 &lt;td&gt;CLI, runner, lifecycle, and adapter tests&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;No template hardcoding&lt;/td&gt;
 &lt;td&gt;Contract-driven discovery and fixtures&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Pinned Hetzner template&lt;/td&gt;
 &lt;td&gt;Provider lock, image enum, validation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Secure SSH and keys&lt;/td&gt;
 &lt;td&gt;Schema, policy, plan, and host tests&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Safe state&lt;/td&gt;
 &lt;td&gt;Backend capability validation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Secret-free output&lt;/td&gt;
 &lt;td&gt;Strict schema, redaction, Gitleaks&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Local validation gates&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;scripts/validate-all&lt;/code&gt;, &lt;code&gt;scripts/test-all&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Standalone Rust product&lt;/td&gt;
 &lt;td&gt;No Python package; installed-shell no-tool test&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Disposable lifecycle&lt;/td&gt;
 &lt;td&gt;Approved live apply, idempotence, and teardown&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Clear portfolio boundaries&lt;/td&gt;
 &lt;td&gt;README and architecture review&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;No unsafe donor behavior&lt;/td&gt;
 &lt;td&gt;Negative policy and plan tests&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;No GitHub workflows&lt;/td&gt;
 &lt;td&gt;Repository-policy test&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Every release criterion maps to an automated local check or documented manual
verification with sanitized evidence. A claim without one of those forms of
evidence remains unverified.&lt;/p&gt;</description></item></channel></rss>