{"results":[{"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-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":"ansible-collection-install-requires-collections-path","text":"Installing Ansible collections into the venv requires setting `ANSIBLE_COLLECTIONS_PATH` to the venv's site-packages directory (e.g., `.venv/lib/python3.14/site-packages`).","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},{"id":"ansible-migration-with-full-speedup","text":"Teams migrating from Ansible gain FTL2's full compound speed advantage (3-21x: in-process execution, gate caching, default parallelism) while retaining access to their existing module ecosystem through FQCN dot-notation and Ansible-compatible bundled execution — migration preserves investment in existing modules without sacrificing performance.","truth_value":"OUT","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"ansible-migration-zero-friction","text":"Teams migrating from Ansible experience zero-friction adoption: familiar CLI flags, variable precedence, inventory groups, and FQCN naming transfer directly while the dual-mode execution architecture runs existing Ansible modules without modification.","truth_value":"OUT","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":"authorized-key-module-fqcn","text":"SSH public keys are deployed via `ftl.host.ansible.posix.authorized_key()` using the full FQCN pattern, supporting user/key/state parameters.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"auto-install-deps-parameter","text":"The `automation()` context manager accepts `auto_install_deps=True` to automatically install required Ansible collections if they are missing.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"bundled-ansible-modules-can-emit-ftl2-events","text":"Bundled Ansible modules running inside FTL2 can import `ftl2.events` and emit events using `emit_progress()`, `emit_log()`, `emit_data()` — this is an FTL2-specific extension, not standard Ansible.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"cli-rich-targeting-ansible-familiar","text":"The FTL2 CLI provides Ansible-familiar syntax with rich targeting capabilities: the `-m -i -a` flag pattern mirrors Ansible, shlex parsing handles quoted arguments correctly, the --limit flag supports group names, host names, glob patterns, and `!` exclusion, and three run modes (normal, check, teardown) cover the full lifecycle.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"dual-audience-minimal-barrier-onboarding","text":"FTL2 minimizes learning investment for both new and migrating users simultaneously: newcomers start immediately with PEP 723 single-file scripts that self-bootstrap via uv run with no project scaffolding, while Ansible users recognize CLI flags (`-m -i -a`), variable precedence (group < host < argument), inventory groups, and FQCN module naming.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"dual-onramp-unified-production","text":"FTL2 offers two complementary onramps to production-grade automation: greenfield developers can start with zero-setup PEP 723 scripts and progress to optimized cloud execution without intermediate tooling, while Ansible teams can migrate gradually by retaining familiar patterns (CLI, inventory, FQCN, variable precedence) and immediately gaining state-driven reliability and security-first lifecycle features. Both paths lead to production-capable deployments, though the specific observability and security characteristics available depend on which features each path exercises.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"dynamic-infrastructure-fully-portable","text":"Dynamically provisioned infrastructure is fully portable across the entire Ansible-compatible module ecosystem: add_host registration feeds into the dual-mode execution architecture supporting both native and bundled modules — unless stdlib shadowing in certain Ansible modules causes import failures in FTL2's in-process runtime.","truth_value":"OUT","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null},{"id":"execution-dual-mode-architecture","text":"FTL2 provides a dual-mode execution architecture: native in-process modules for speed and Ansible-compatible bundled modules for ecosystem breadth, with the same API surface for both.","truth_value":"IN","justification_count":0,"dependent_count":0,"challenges":[],"last_reviewed":null,"review_result":null}],"count":61,"limit":20,"offset":0}