- Remove legacy FILE_VERSION path usage
- Add custom lookup plugin `version` to read pyproject.toml
- Resolve version via [project].version with poetry fallback
- Refactor sys-version role to use lookup('version')
- Add unit tests for version lookup plugin
https://chatgpt.com/share/e/699433f7-1278-8013-af8e-da1b7f303886
- rename mirror-images-* workflows to images-mirror-*
- update ci-orchestrator job ids and dependencies accordingly
- add weekly + manual GHCR cleanup workflow (images-cleanup-ci)
- extract cleanup logic into scripts/administration/ghcr/cleanup_ci_images.sh
- support org and user GHCR owners via automatic API scope detection
- delete only ci-* tagged image versions older than N days (default: 7)
https://chatgpt.com/share/e/69906083-93d4-8013-bd0b-e441615e72bf
- Update bootstrap image from 1.1.4 to 1.1.7
- Explicitly set installer stability timeouts:
- MATOMO_INSTALLER_READY_TIMEOUT_S
- MATOMO_INSTALLER_STEP_TIMEOUT_S
- MATOMO_INSTALLER_STEP_DEADLINE_S
- MATOMO_INSTALLER_TABLES_CREATION_TIMEOUT_S
- MATOMO_INSTALLER_TABLES_ERASE_TIMEOUT_S
Improves robustness on slow VPS/CI environments and aligns role
with current bootstrap image defaults.
- force PYTHON=python3 for scripts/meta/resolve/apps.sh to avoid host venv leakage into container exec
- pipe output through jq to guarantee compact JSON array only
- tolerate compose warnings on stdout during discovery
- add debug fallback printing first lines of raw apps.sh output when discovery is empty
This aligns local test behavior with CI discovery robustness without changing CI logic.
https://chatgpt.com/share/698e24d6-7200-800f-a2f5-28a81a639cf3
* replace implicit modules with ansible.builtin.* for consistency
* normalize redirect domain sources and targets to avoid string slicing issues
* wrap domain lookups in list before flatten/first to prevent single-character truncation
* materialize CURRENT_PLAY_DOMAINS before generate_all_domains to eliminate _AnsibleLazyTemplateList errors
* minor whitespace and formatting cleanup for improved readability
https://chatgpt.com/share/698de3f8-2d50-800f-ab99-edcce4f0734a
* introduce EXCLUDED_TOP_LEVEL_DIRS in test_vars_usage_in_yaml
* skip files under inventories/ when scanning YAML/Jinja sources
* prevent bundle metadata vars from triggering false-positive unused var failures
Inventories are declarative data bundles, not task/template files,
and may legitimately contain vars not referenced in Jinja or Ansible expressions.
https://chatgpt.com/share/698df4ba-20b4-800f-93ab-ee5d54f62dca
* ensure source and target domains are flattened and cast to string
* prevent _AnsibleLazyTemplateList from being used as dict keys in items2dict
* stabilize generate_all_domains execution for redirect mappings
* switch to ansible.builtin.set_fact for consistency
https://chatgpt.com/share/698de3f8-2d50-800f-ab99-edcce4f0734a
* flatten DOMAIN_PRIMARY before merging into CURRENT_PLAY_DOMAINS
* convert lazy template values to plain strings to avoid unhashable type errors
* fix generate_all_domains failure caused by nested _AnsibleLazyTemplateList
https://chatgpt.com/share/698de3f8-2d50-800f-ab99-edcce4f0734a
* explicitly merge DOMAIN_PRIMARY as canonical domain for svc-prx-openresty into CURRENT_PLAY_DOMAINS
* prevents tls lookup failures when rendering default_server.conf.j2
* stabilize domain mapping for webserver + OpenResty bootstrap phase
* normalize ansible.builtin.set_fact usage in constructor stage
* minor whitespace alignment in WEBSERVER_CPUS_EFFECTIVE
https://chatgpt.com/share/698de3f8-2d50-800f-ab99-edcce4f0734a
The lookup plugin 'tls' failed: tls: domain 'infinito.example' not found (domains/applications)
Origin: /root/Repositories/github.com/kevinveenbirkenbach/infinito-nexus/roles/sys-svc-webserver-core/templates/default_server.conf.j2
* add SOFTWARE_DOMAIN derived from SOFTWARE_NAME lowercased
* introduce DOMAIN_HOMEPAGE defaulting to dashboard domain if present, otherwise SOFTWARE_DOMAIN
* add automatic primary → homepage redirect mapping in constructor
* migrate TLS and CA paths from SOFTWARE_NAME|lower to SOFTWARE_DOMAIN
* update systemd unit suffix and timer/service discovery globs to SOFTWARE_DOMAIN
* switch OIDC default realm and client id to SOFTWARE_DOMAIN
* adjust SuiteCRM well-known software name to SOFTWARE_DOMAIN
* update unit tests to use SOFTWARE_DOMAIN for strict Jinja expansion
https://chatgpt.com/share/698db094-22bc-800f-8454-10d97f817659
* replace compose.services.desktop with compose.services.dashboard across all roles
* rename role web-app-desktop to web-app-dashboard
* rename sys-front-inj-desktop to sys-front-inj-dashboard
* update resolver mapping to include web-app-dashboard when dashboard is enabled
* adjust CSP filters to reference dashboard for frame-ancestors handling
* update lookup plugins, filter plugins, templates, vars and run_once flags
* migrate all tests to dashboard naming and service key
* update role dependencies and port mappings
* remove legacy desktop role and variables
BREAKING CHANGE:
The service key compose.services.desktop has been renamed to compose.services.dashboard.
All custom configs, inventories, or overrides must be updated accordingly.
https://chatgpt.com/share/698da7ad-1978-800f-82b4-4755b17be026
* replace docker with container wrapper for image pull
* add retry mechanism with 6 attempts and 20s delay
* register pull result and retry until successful
* improve deployment reliability against transient registry errors
https://chatgpt.com/share/698d9150-064c-800f-a16b-650e09473e87
Add *cpus*, *mem_reservation*, *mem_limit*, and *pids_limit* defaults for web-app-chess to ensure predictable and lightweight runtime behavior.
fix(web-svc-onlyoffice): correct typo in CI resource limit comment
https://chatgpt.com/share/698cffcb-e4a8-800f-a674-22bdfad0a765