- пути томов и профиль Caddy задаются как GLCHAT_DATA_DIR/GLCHAT_CADDY_PROFILE
(внутренний DATA_DIR=/app/data остаётся в environment сервиса app)
- значения записываются в .env, поэтому docker compose config проходит без
предупреждений "variable is not set"
- install.sh: флаг --skip-image для прогона в DinD, где сборка невозможна
(overlay поверх overlay), с пропуском pull/up/smoke
- scripts/test-install.sh: полный набор проверок артефактов (compose config -q,
Caddyfile, livekit.yaml, nftables, fail2ban, systemd-юниты, UFW, jails)
resolve_derived_values() вычисляет CADDY_PROFILE, LIVEKIT_PUBLISH,
TURN_EXTERNAL_TLS, PROFILE_LIVEKIT_DISABLE_SIMULCAST и
PROFILE_LIVEKIT_USE_EXTERNAL_IP после выбора профиля и до write_env_file:
устраняет падение set -u на PROFILE_LIVEKIT_SIMULCAST_DISABLED.
- resolve_derived_values(): производные значения (files.<domain>) считаются
до записи .env; раньше set -u ронял установщик на write_env_file
- убраны local-объявления, маскировавшие turn_external_tls/use_external_ip/
disable_simulcast/compose_template внутри render_all_templates
- из рендера compose убрана неиспользуемая пара IMAGE_TAG
- guard чётности аргументов рендера пишет в журнал, а не в консоль:
проверка результата — отсутствие незаполненных плейсхолдеров
- render_template: значения передаются через окружение (envsubst), а не
подставляются в variadic-аргументы — многострочные значения больше не
ломают разбор, неполный список не уводит bash в бесконечный цикл
- export "$pair": bash сам разбирает KEY=value (было export "${pair}")
- шаблоны переведены на ${VAR}-синтаксис, добавлен compose.test.yaml.tpl
для тестового режима установщика (--skip-tls без публикации портов)
- dry-run не требует root и работает вне Linux (проверка ОС пропускается)
- install.sh: учитываются --livekit-*-порты и --turn-*-порты в livekit.yaml,
исправлено экранирование апострофа в итоговой сводке
- scripts/debug-install.sh: трассировка установщика в контейнере
- .golangci.yml: набор линтеров под требования §14 (gosec, gocritic, sloglint,
noctx, revive, depguard для запрета циклических зависимостей internal/*)
- gofumpt вынесен из formatters golangci-lint v2.13 (сообщал о расхождениях,
которые сам же не устранял) и применяется отдельным инструментом
- make fmt/go-lint: проверка gofumpt + golangci-lint fmt --diff
- scripts/gitleaks-scan.sh: поддержка gitleaks 8.19+ (dir) и старых версий (detect)
- исправлены замечания линтеров: обработка ошибок Close, контекст в логах,
NewRequestWithContext в тестах, комментарий к blank-import драйвера SQLite
- структура по AGENT.md §12: cmd/, internal/, web/, deploy/, queries/, docs/
- LICENSE: полный текст AGPL-3.0-or-later
- NOTICE: атрибуция референсов (Spacebar, Fermo) и сторонних компонентов
- SECURITY.md и .well-known/security.txt: правила раскрытия уязвимостей
- .env.example: все переменные окружения с дефолтами
- .gitignore/.dockerignore/.editorconfig/.gitattributes/.gitleaks.toml