Files
ansible-role-narratio/README.md

7.1 KiB

Ansible Role: Narratio

Installs and configures Narratio from source on Ubuntu 26.04 (x86_64 or aarch64). The role requires gathered facts and uses task-level privilege escalation for dependencies and managed application state.

Variables

narratio_version: v3.0.0
narratio_repository_url: https://gitea.maximumdirect.net/eric/narratio.git
narratio_source_dir: /usr/local/src/narratio
narratio_binary_path: /usr/local/bin/narratio
narratio_manage_build_dependencies: true
narratio_go_snap_channel: 1.26/stable
narratio_go_binary: /snap/bin/go
narratio_user: narratio
narratio_group: narratio
narratio_config_path: /usr/local/etc/narratio/pipeline.yml
narratio_config_owner: root
narratio_config_group: narratio
narratio_config_directory_mode: "0750"
narratio_config_file_mode: "0640"
narratio_workspace_root: /var/lib/narratio
narratio_campaigns_root: /usr/local/share/narratio/campaigns
narratio_spool_root: /var/spool/narratio
narratio_cache_root: /var/cache/narratio

narratio_whisperx_transcribe_url is required and must be an absolute HTTP or HTTPS URL. Every other pipeline setting is optional and defaults to null:

narratio_configkit_imports: null
narratio_workspace_cleanup_after_publish: null
narratio_campaigns_default_campaign_id: null
narratio_storage_backend: null
narratio_storage_s3_bucket: null
narratio_storage_s3_root_prefix: null
narratio_storage_s3_region: null
narratio_storage_s3_endpoint: null
narratio_storage_s3_force_path_style: null
narratio_storage_s3_access_key_id: null
narratio_storage_s3_secret_access_key: null
narratio_spool_delete_audio_after_publish: null
narratio_cache_s3_audio: null
narratio_publish_enabled: null
narratio_publish_upload_run: null
narratio_publish_outputs: null
narratio_whisperx_language: null
narratio_whisperx_timeout: null
narratio_whisperx_retries: null
narratio_whisperx_retry_delay: null
narratio_whisperx_concurrency: null
narratio_seriatim_binary: null
narratio_seriatim_timeout: null
narratio_seriatim_output_schema: null
narratio_seriatim_coalesce_gap: null
narratio_seriatim_report: null
narratio_seriatim_env_overlap_word_run_gap: null
narratio_seriatim_env_overlap_word_run_reorder_window: null
narratio_seriatim_env_backchannel_max_duration: null
narratio_seriatim_env_filler_max_duration: null
narratio_audita_binary: null
narratio_audita_timeout: null
narratio_audita_credentials: null
narratio_audita_modules: null
narratio_audita_overlay: null
narratio_audita_proposal_profile: null
narratio_audita_validation_profile: null
narratio_audita_transcript_description: null
narratio_audita_config_path: null
narratio_audita_output_schema: null
narratio_normalize_output_path: null
narratio_normalize_output_schema: null
narratio_normalize_report: null
narratio_trim_enabled: null
narratio_trim_output_path: null
narratio_trim_bounds_prompt_id: null
narratio_trim_bounds_profile_id: null
narratio_trim_bounds_transcript_input_name: null
narratio_trim_bounds_output_path: null
narratio_trim_bounds_timeout: null
narratio_trim_bounds_render_debug: null
narratio_trim_bounds_render_output_path: null
narratio_trim_seriatim_report: null
narratio_render_enabled: null
narratio_render_format: null
narratio_render_title: null
narratio_render_include_timestamps: null
narratio_render_include_segment_ids: null
narratio_render_include_metadata: null
narratio_scriptorium_binary: null
narratio_scriptorium_config_path: null
narratio_scriptorium_timeout: null
narratio_scriptorium_render_debug: null
narratio_scriptorium_artifacts: null
narratio_scriptorium_artifact_families: null
narratio_notarius_enabled: null
narratio_notarius_binary: null
narratio_notarius_config_path: null
narratio_notarius_config_overlay: null
narratio_notarius_pipeline_id: null
narratio_notarius_timeout: null
narratio_notarius_working_directory: null
narratio_notarius_credentials: null
narratio_notarius_resume: null
narratio_notarius_chunk_cache: null
narratio_notarius_references: null
narratio_notarius_outputs: null
narratio_notification_mode: null

With dependency management enabled, the role installs Git and the classic Go Snap from narratio_go_snap_channel. When disabled, Git and the executable at narratio_go_binary must already be available. The role checks out narratio_version, builds ./cmd/narratio to narratio_binary_path, and rebuilds only when the checkout changes or the binary is absent.

The narratio account owns the workspace, spool, and cache roots, which are group-writable setgid directories. The campaign registry is root:narratio and operator-readable; its content remains caller-managed. Configuration ownership and modes are independently configurable: the standalone defaults are root:narratio, mode 0750 for the directory and 0640 for the managed pipeline file. Composing roles may override these inputs without changing the writable-root policy.

Null pipeline values and their empty parent mappings are omitted; non-null falsey values are preserved. narratio_publish_outputs, narratio_notarius_references, narratio_notarius_outputs, narratio_scriptorium_artifacts, and narratio_scriptorium_artifact_families are complete native caller values, so callers may compose them before assigning them and the role does not merge or rewrite them. Credential lists contain environment-variable names only; credential values remain outside this role and are the caller's responsibility. The optional narratio_notarius_config_overlay selects a Notarius ConfigKit overlay without coupling it to Narratio's own overlay name. The optional narratio_notarius_resume and narratio_notarius_chunk_cache settings expose Narratio's native extraction and chunk-plan choices; this generic role assigns no D&D-specific credential or cache policy. ConfigKit imports and selected overlays are externally managed, and this role does not install the downstream applications, campaign content, or suite policy.

Narratio v3 removes the old Audita tuning, report, retention, and singular-key role variables. It also replaces narratio_notarius_llm_api_key with narratio_notarius_credentials and renames narratio_notarius_config_profile to narratio_notarius_config_overlay. Existing deployments that cannot migrate these inputs should retain their previous Narratio role pin.

Example

- hosts: narratio_hosts
  roles:
    - role: ansible-role-narratio
      vars:
        narratio_whisperx_transcribe_url: https://whisperx.example.test/transcribe

Validation

The repository-local integration suite installs its pinned collection and runs syntax checking and production-profile lint. It validates a baseline managed pipeline through Narratio as its application account and requires immediate clean repeated convergence. It explicitly selects v2.1.0 and checks native version output, then combines missing-binary recovery with a caller-supplied Go executable while dependency management is disabled. A representative pipeline checks null omission, falsey values, caller-composed native collections, and the native Notarius credential-reference, resume, and chunk-cache fields before native validation and a clean repeat. The suite restores the baseline deployment during cleanup.

tests/integration