{"results":[{"id":"add-host-creates-attribute-accessible-hosts","text":"After `ftl.add_host(hostname=\"web01\", ...)`, the host is immediately addressable as `ftl.web01` for attribute-style host-scoped module calls (e.g., `ftl.web01.apt(...)`).","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"add-host-disable-host-key-checking","text":"The `disable_host_key_checking=True` parameter on `ftl.add_host()` skips SSH host key verification, essential for newly provisioned cloud VMs whose keys are unknown.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"add-host-dynamic-registration","text":"`ftl.add_host(name, ansible_host=, ansible_user=, groups=[])` dynamically registers a host at runtime.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"add-host-groups-parameter","text":"`ftl.add_host()` accepts a `groups` parameter to assign the dynamically registered host to inventory groups.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"add-host-registers-dynamic-hosts-at-runtime","text":"`ftl.add_host(hostname, ansible_host, groups=[], **kwargs)` registers hosts at runtime; extra kwargs become custom host variables.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"add-host-registers-hosts-dynamically","text":"Hosts are registered dynamically via `ftl.add_host(hostname=..., ansible_host=ip, ansible_user=..., ansible_become=True)` — this is how scripts add hosts discovered at runtime (e.g., after provisioning a Linode).","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-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-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-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-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":"ansible-drops-hosts-25-ftl2-handles","text":"Ansible drops hosts as \"unreachable\" at 25+ hosts; FTL2's persistent gate connections handle them without issues.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ansible-ecosystem-fully-compatible","text":"All Ansible collection modules work seamlessly in FTL2 via FQCN dot-notation addressing and community accessors.","truth_value":"OUT","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ansible-familiarity-across-layers","text":"FTL2 preserves Ansible familiarity at every interaction layer: CLI flags mirror `-m -i -a`, variable precedence follows group < host < argument ordering, inventory groups map directly to Ansible groups, and modules support both short names and FQCNs.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ansible-gradual-migration-path","text":"FTL2 enables gradual Ansible migration without workflow disruption: familiar CLI/inventory/FQCN patterns reduce learning curve while the universal module system (four addressing syntaxes, dual native/bundled execution modes) lets teams run existing Ansible collections alongside faster FTL2 natives incrementally.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ansible-migration-production-ready","text":"Ansible teams migrating to FTL2 retain familiar patterns while immediately gaining production-grade deployment capabilities: gradual migration preserves CLI, inventory, FQCN, and variable precedence patterns, while state-driven reliability and security-first lifecycle provide enterprise-grade re-runnability and hardening from day one.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null}],"count":352,"limit":20,"offset":0}