{"results":[{"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-autonomous-remediation-system","text":"The AI loop combines resilient observation (shell guards, error suppression, fail-open semantics) with a self-healing contract (observe → condition → action) that supports convergence toward desired state. Together, these mechanisms enable autonomous remediation without requiring human intervention for observed drift.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-condition-skip-on-missing-state","text":"AI-loop rule conditions can return `False` when prerequisite state is missing (e.g., IP not yet provisioned), causing the rule to silently skip rather than fail — this handles ordering between dependent rules.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-declarative-goal-string","text":"The `ftl2-ai-loop` takes a declarative goal string as input and reconciles toward it using workspace rules.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-host-accessor-syntax","text":"AI-loop action functions use the `ftl[\"hostname\"].module()` accessor pattern with `await` for sequential module calls (e.g., `await ftl[\"stargate\"].user(name=\"admin\")`).","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-incremental-flag","text":"The `--incremental` flag on `ftl2-ai-loop` enables incremental reconciliation rather than full re-deployment.","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-observe-condition-action-pattern","text":"FTL2 AI-loop rules follow an observe → condition → action pattern: the loop runs `observe` to gather state, calls `condition(state)` to decide whether to act, and calls `action(ftl)` if the condition returns True.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-observe-list-structure","text":"AI-loop observe blocks are lists of dicts with `name`, `module`, `params`, and `host` keys that run commands on target hosts to gather state.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-observe-resilience","text":"AI-loop observe steps are resilient by design: shell commands use `|| true` to suppress non-zero exits, `2>&1` captures all output, and failed observations are treated as drift triggers rather than errors.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-rule-three-phase-contract","text":"FTL2 AI-loop rules follow a three-phase contract: `observe` (gather state), `condition(state)` (check for drift), and `action(ftl)` (remediate) — the reconciliation loop calls these in order automatically.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-rules-fully-trustworthy","text":"AI-loop rules are fully trustworthy for autonomous operation: the three-phase contract ensures predictable behavior, observation resilience prevents false negatives, and cross-rule state sharing enables coordinated multi-rule convergence.","truth_value":"OUT","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-rules-not-called-directly","text":"AI-loop rules are not called directly by user code — they are discovered and executed by the FTL2 AI reconciliation loop automatically.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-self-healing-contract","text":"AI-loop rules implement a complete self-healing contract: observation failures trigger action (fail-open), guard clauses defer when prerequisites are missing, and actions apply full convergence regardless of which specific check detected drift.","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":"ai-loop-typed-function-contract","text":"AI-loop rules define a typed function contract across their three phases: observe is a declarative list of module dicts with name/module/params/host keys, condition receives a structured state dict keyed by observation name, and action receives the full FTL2 runtime with host accessors and module methods.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-loop-workspace-four-components","text":"Each ftl2-deployments workspace has four key components: `desired_state.txt` (declarative intent), `rules/` (AI loop constraints), `.env` (secrets/config), and runtime-generated state/inventory.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ai-reconciliation-loop-pattern","text":"The AI reconciliation loop follows the pattern: observe → decide → act → verify; cost converges toward zero as deterministic rules replace AI reasoning.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ansible-to-ftl2-conversion-mappings","text":"The Ansible-to-FTL2 converter maps: `with_items` to `for` loops, `when` to `if` statements, `handlers` to explicit service restarts, `roles` to function calls, `hosts` to group proxies, `vars` to Python variables.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"autonomous-drift-detection-accurate","text":"AI-loop drift detection accurately determines convergence because every module reports true change status: the remediation system's observe/condition/action cycle trusts the consistent result contract (success, changed, output, error) to distinguish actual corrections from no-ops, enabling reliable convergence detection.","truth_value":"OUT","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null}],"count":54,"limit":20,"offset":0}