Date: 2026-05-11
Time: 15:38
This is an FTL2 AI-loop rule that ensures a Linode cloud instance named "arcade" exists with a specific configuration. It follows the observe-condition-action pattern: it observes the current state of the Linode instance, checks whether it matches the desired spec, and provisions or corrects it if not. This is part of the catbeez-arcade deployment infrastructure.
This rule is not called directly — it's loaded by the FTL2 AI reconciliation loop, which evaluates it periodically. The three-part structure is the standard AI-loop rule contract:
observe — a list of module calls that gather current statecondition(state) — returns True if action is needed (drift detected)action(ftl) — performs the remediation
# The reconciliation loop calls these in order:
state = await run_observations(rule.observe)
if await rule.condition(state):
await rule.action(ftl)
| Parameter | Value | Purpose |
|-----------|-------|---------|
| label | "arcade" | Linode instance name |
| type | "g6-nanode-1" | Linode plan (1 CPU, 1GB RAM, cheapest tier) |
| region | "us-east" | Datacenter location |
| image | "private/37121878" | Custom private disk image to deploy |
| state | "present" | Ensure instance exists |
| SSH wait | port 22, 300s timeout | Blocks until instance is reachable |
linode_v4 observe call itself fails (e.g., API error), condition returns True, treating failure as "needs fix."wait_for blocks up to 5 minutes for SSH. Downstream rules that depend on SSH access are safe to assume connectivity once this rule passes.linode_v4 module with state: present is idempotent — if the instance already exists and matches, it returns the existing instance without changes.community.general.linode_v4 — used in both observe and action phasesftl.wait_for — TCP port readiness check