# Feature 0019: Adopt Audita v2.0.1 in the Standalone Role Status: done ## Summary Replace the standalone Audita role's version-1 configuration interface with Audita v2.0.1's native interface. Keep provider and D&D policy outside the generic role. This is the second feature in the agreed [application upgrade sequence](../application-upgrade-sequence.md). ## Problem or Opportunity The role currently installs Audita v0.9.1 and renders version-1 configuration. Audita v2 requires version-2 YAML, named backends, and selected PromptKit profiles. Old per-role endpoint/model/credential/concurrency settings no longer apply. A version-only update would produce an unusable deployment. Unlike the previous minimal configuration, a valid v2 configuration requires at least one backend and a proposal profile whose file exists. The generic role must not invent a provider, endpoint, model, or credential to meet that contract. The caller-input boundary is settled below. ## Scope - Default to Audita v2.0.1 and configuration version 2. - Replace retired public configuration variables with native v2 settings. - Preserve still-supported domain controls and inventory composition. - Document the breaking role-variable migration and caller prerequisites. - Adapt offline integration tests to real v2 configuration/profile fixtures. ## Non-goals - Updating pipeline, collection, or consumer application/dependency pins. - Choosing D&D models, endpoints, credentials, concurrency, or retry budgets. - Compatibility shims, automatic v1 conversion, or a dual-schema template. - Live inference, operational deployment, report ingestion, service management, or runtime configuration validation tasks. - Imports: Audita deliberately disables ConfigKit imports. Do not add an import variable merely because other applications expose one. - Automatically provisioning secret values or selecting runtime overlays. ## Target End State ### Installation and Schema `audita_version` defaults to `v2.0.1`; `audita_config_version` defaults to `2`. Retain the existing source checkout, conditional Go build, dependency management, configuration location, and owner/group/mode interfaces. Go 1.26 remains suitable. The role renders v2 only; selecting an older application does not translate its configuration. Operators needing v1 retain the previous role revision. ### Public Configuration Interface Use these field-specific variables; optional settings default to null and are omitted, allowing Audita to own defaults. Serialize native values and preserve intentional zero, false, empty strings, and empty collections where supported. | Role variable | Native field | Ownership | | --- | --- | --- | | `audita_profiles_dir` | `profiles_dir` | Optional caller profile location | | `audita_backends` | `backends` | Caller-supplied native mapping | | `audita_llm_proposal_profile` | `llm.proposal_profile` | Caller-selected required profile | | `audita_llm_validation_profile` | `llm.validation_profile` | Optional; omission inherits proposal | | `audita_llm_transient_retries` | `llm.transient_retries` | Optional native retry budget | | `audita_llm_repair_attempts` | `llm.repair_attempts` | Optional native repair budget | | `audita_llm_operation_timeout` | `llm.operation_timeout` | Optional duration string | | `audita_validation_max_prompt_tokens` | `validation.max_prompt_tokens` | Optional batching control | | `audita_reporting_enabled` | `reporting.enabled` | Optional report policy | | `audita_reporting_stdout_dir` | `reporting.stdout_dir` | Optional report destination | | `audita_diagnostics_debug` | `diagnostics.debug` | Optional debug policy | Retain existing variables for modules, output schema, chunking, normalization, thresholds, context description, and diagnostics work directory. Normalization gap/duration fields now represent numeric seconds, not duration strings. Argument specifications must accept the native integer/fractional values without turning them into quoted strings in YAML. Do not add a duration-conversion layer. Remove the old `audita_llm_{proposal,validation}_{base_url,model,api_key_env,timeout,max_retries}`, `audita_concurrency_{total_llm,proposal_llm,validation_llm}`, and `audita_diagnostics_retention` interfaces from defaults, templates, argument specifications, and current examples. Document their replacements rather than silently interpreting them under different semantics or adding deprecation probes. The backend mapping carries endpoint, credential reference, concurrency, and queue capacity using Audita's schema. Inventory can compose it with ordinary Jinja expressions. Credential values stay outside the role; every surviving backend reference must be available when Audita loads configuration, even when that backend is not selected. Do not introduce separate per-role secret variables. Null role variables mean omission, not literal YAML null. In particular, omit an unset validation profile so Audita can inherit the proposal selection. Backend mapping values retain native semantics, including a null credential. ### Profile and Overlay Ownership Callers provide `audita_backends` and `audita_llm_proposal_profile`; neither has a fabricated concrete default. Callers also deploy the selected profile files before invoking Audita. `audita_profiles_dir` may be supplied or omitted to use Audita's conventional sibling `profiles/` directory. Keep profile documents and ConfigKit `overlays/` content caller-owned in this feature. The later suite feature will own its D&D profile assets and coordinate their deployment with Narratio's new external Audita configuration contract. The role does not start processing or validate file availability during convergence. ## Repository Ownership - `ansible-role-audita`: generic installation/configuration interface, migration documentation, and local tests. - Workspace: roadmap, active plan, progress, and review evidence. - Audita application: read-only tagged schema, migration, and profile contracts. - Other applications/roles, assets, pipeline, collection, and consumer: unchanged. ## Constraints and Settled Decisions Follow the [Ansible house style](../../ansible.md), [testing house style](../../testing.md), [MVP roadmap](../mvp.md), and [upgrade sequence](../application-upgrade-sequence.md). The suite continues to use its old compatible role/application set until final integration; Narratio v2 must not be accidentally paired with Audita v2 through a changed suite pin. Old timeouts and retries do not map one-to-one to profile per-attempt timeouts, logical-operation deadlines, transport retries, and structural repair. Expose native controls without choosing replacement tuning for the D&D suite here. ## Simplest Viable Implementation Update the version/schema defaults and replace the single configuration template's retired sections with native v2 sections. Align argument specifications and the README. Keep ordinary file/template/source/build tasks. Use the existing test harness with caller-owned local backend/profile fixtures; add no state assembly, profile resolver, migration command, or production probe. ## Acceptance Criteria - The role installs v2.0.1 and renders native v2 configuration from supplied backend/profile choices and optional settings. - Native offline validation and effective-settings/profile inspection accept representative configuration with an externally supplied profile and local fixture endpoint; no provider request is needed. - Tests cover supplied mapping composition, omission/inherited validation selection, representative numeric seconds, and meaningful zero/false values. Avoid a comprehensive schema matrix or assertions of current upstream defaults. - Existing useful build and clean-repeat coverage remains. Immediate repeated role convergence reports no changes; do not test module postconditions. - Documentation explains required caller inputs and the breaking variable/schema migration, linking Audita for full field and report semantics. - No suite, collection, or consumer pins change. Completion records the reviewed standalone role revision for the final integration feature. ## Rationale and Alternatives Native backend mappings and named profiles preserve Audita's ownership instead of reproducing per-role endpoint/model settings in Ansible. A dual-schema role would add maintenance and ambiguity without a selected requirement; retaining the previous role revision is the simpler boundary for old deployments. ## Dependencies and Follow-up Work Git history preserves the completed staged plan. Notarius adoption is next. D&D backend/profile assets, tuning migration, testing overlays, credential lists, and coordinated deployment belong to the later integration feature. ## Settled Caller-Input Decision The user approved required `audita_backends` and `audita_llm_proposal_profile` inputs through the ordinary role argument interface, with caller-owned profile files. Do not give these variables null or fabricated defaults. A no-input role invocation is no longer valid; examples and tests supply explicit choices. Role-managed profile definitions are not part of this feature. ## Open Questions None. ## Completion and Review Evidence Completed in role commits `6137ff2`, `52f67fe`, and `c3dd59f`. Implementation reported passing integration tests with native v2 validation, offline profile inspection, mapping composition, omission, numeric seconds, falsey values, build/recovery coverage, and clean repeated convergence. Independent review found no code-quality issues, implementation gaps, or unnecessarily strengthened requirements needing remediation. Independent Ansible syntax, production-profile lint, shell syntax, whitespace, and focused template checks passed. The review used recorded native/integration results without rerunning the host-mutating suite. No production tasks were added. Profile files remain caller-owned, and suite, collection, and consumer pins remain unchanged. No operational deployment or paid inference was performed as part of this review. ## Upstream References - [v2.0.1 configuration](https://gitea.maximumdirect.net/eric/audita/src/tag/v2.0.1/docs/config.md) - [v2 migration guide](https://gitea.maximumdirect.net/eric/audita/src/tag/v2.0.1/docs/migrations/v2.md) - [v2.0.1 release](https://gitea.maximumdirect.net/eric/audita/src/tag/v2.0.1/docs/releases/v2.0.1.md)