{"results":[{"id":"add-host-persists-immediately","text":"`add_host()` persists to the state file immediately (not deferred to context exit).","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-action-ordering-matters","text":"Sequential ordering in AI-loop action functions matters — for example, a user must be created before files can be owned by that user — and this is the author's responsibility, not automatically handled.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-modules-are-idempotent","text":"Module calls in AI-loop actions (user, file, copy, lineinfile, service) are idempotent — safe to re-run even if the condition gate fails to prevent unnecessary executions.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-state-inventory-generated-at-runtime","text":"State and inventory files in ftl2-deployments workspaces are not pre-created — they are generated at runtime by the AI loop.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"automation-context-manager-pattern","text":"FTL2 scripts use `async with automation(state_file=..., secret_bindings=...) as ftl:` as the core entry point — this context manager sets up inventory, state, and secrets.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"automation-inventory-parameter","text":"The `inventory` parameter on `automation()` loads a YAML inventory file for host/group definitions, used alongside `add_host()` for hybrid static+dynamic inventory.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"automation-module-restriction-raises-attributeerror","text":"`automation(modules=[\"file\", \"copy\"])` restricts which modules can be called; accessing a disallowed module raises `AttributeError`, not a runtime module error.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"automation-modules-parameter-restricts-available","text":"`automation(modules=[\"file\", \"copy\"])` restricts which modules are available; calling an unlisted module raises `AttributeError`.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"autonomous-error-resilient-operations","text":"AI-loop operations are resilient at every layer: coordinated cross-rule self-healing recovers from drift via observe/condition/action with state-file-mediated communication, while dual error modes (continue-on-error for collection, fail-fast for halt) capture structured errors alongside state persistence for crash recovery.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"azure-state-file-name","text":"The Azure examples use `.ftl2-state-azure.json` as the state file for tracking provisioned resources.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"backup-and-state-operational-durability","text":"FTL2 achieves operational durability through complementary persistence mechanisms: the state file tracks resource identity and enables crash recovery (control plane), while the backup subsystem preserves file contents before destructive changes (data plane) — together they protect both what exists and what it contains.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"backup-naming-convention","text":"FTL2 backup files are named `{original_path}.ftl2-backup-{YYYYMMDD}-{HHMMSS}`.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"backup-two-storage-modes","text":"FTL2 backups support two storage modes: adjacent (default, next to original file) and central (configured via `backup.central_dir` or `--backup-dir`).","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"become-copy-uses-temp-then-sudo-mv","text":"When privilege escalation is active, `copy` SFTPs files to `/tmp/.ftl2_copy_*` then uses `sudo mv` to place them at the destination.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"builtin-modules-in-process-collection-subprocess","text":"FTL2 builtin modules (file, copy, shell, command, service, dnf) run in-process as native implementations; collection modules fall back to subprocess execution.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"caddy-rule-idempotent-action","text":"The Caddy rule's action phase is idempotent: `copy` overwrites the Caddyfile, `firewalld` with `state=\"enabled\"` is a no-op if already enabled, and `service` with `state=\"started\"` is a no-op if already running.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"catbeez-arcade-manual-secret-injection","text":"Catbeez-arcade secrets (OAuth credentials, secret key, allowed emails) are entered interactively at startup rather than stored in automation or config files.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"catbeez-game-files-are-html-js-wasm","text":"Catbeez game assets consist of three file types: `.html`, `.js`, and `.wasm` — these are browser-based HTML5/WASM games.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"catbeez-hot-reload-publishing","text":"Catbeez game publishing is a hot-reload pipeline: HTML5/WASM game assets are uploaded to the games directory, and the server discovers new files dynamically without restart, with the same publish script supporting both dev and prod environments via flag selection.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"catbeez-prod-game-files-uploaded-individually","text":"Game files are uploaded individually (3 files per game × 9 games = 27 copy calls) rather than as an archive.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null}],"count":89,"limit":20,"offset":0}