V6.1 backups: once more into the breach.
Quality Gate / gate (push) Successful in 2m29s

This commit is contained in:
Jim Lancaster
2026-09-02 10:59:28 -05:00
parent 494f378e48
commit 96bb80d91f
17 changed files with 120 additions and 353 deletions
+25 -55
View File
@@ -101,14 +101,14 @@ def test_canonical_authority_references_are_present():
assert missing == {}
def _declared_env_example_keys(*, include_commented: bool) -> set[str]:
text = _read(".env.example")
def _declared_env_production_example_keys(*, include_commented: bool) -> set[str]:
text = _read(".env.production.example")
pattern = r"^\s*#?\s*([A-Z0-9_]+)\s*=" if include_commented else r"^\s*([A-Z0-9_]+)\s*="
return {match.group(1) for match in re.finditer(pattern, text, flags=re.MULTILINE)}
def _active_env_example_values() -> dict[str, str]:
text = _read(".env.example")
def _active_env_production_example_values() -> dict[str, str]:
text = _read(".env.production.example")
return {key: value.strip() for key, value in re.findall(r"^\s*([A-Z0-9_]+)\s*=\s*(.*)$", text, flags=re.MULTILINE)}
@@ -121,9 +121,9 @@ def _normalize_env_path_value(value: str | None) -> str | None:
return normalized
def test_env_example_keys_match_runtime_settings_contract():
"""Guard against .env.example drift from Settings keys."""
declared = _declared_env_example_keys(include_commented=True)
def test_env_production_example_keys_match_runtime_settings_contract():
"""Guard against .env.production.example drift from Settings keys."""
declared = _declared_env_production_example_keys(include_commented=True)
settings_keys = {field.upper() for field in Settings.model_fields if field != "database"}
database_keys = {
"DATABASE__DRIVER",
@@ -134,7 +134,16 @@ def test_env_example_keys_match_runtime_settings_contract():
"DATABASE__USER",
"DATABASE__PASSWORD",
}
allowed = settings_keys | database_keys
deployment_helper_keys = {
"POSTGRES_DB",
"POSTGRES_USER",
"POSTGRES_PASSWORD",
"CLOUDFLARE_TUNNEL_TOKEN",
"RUNTIME_SETTINGS_ENV_FILE",
"BACKUP_DIR",
"BACKUP_RETENTION_DAYS",
}
allowed = settings_keys | database_keys | deployment_helper_keys
missing = sorted(allowed - declared)
unknown = sorted(declared - allowed)
@@ -142,50 +151,11 @@ def test_env_example_keys_match_runtime_settings_contract():
assert unknown == []
def test_env_example_default_values_match_settings_defaults():
"""Uncommented .env.example entries should mirror in-code defaults."""
defaults = Settings(_env_file=None, openrouter_api_key="placeholder-key")
expected = {
"HOST": defaults.host,
"PORT": str(defaults.port),
"LOG_LEVEL": defaults.log_level,
"RELOAD": str(defaults.reload).lower(),
"LOG_DIR": str(defaults.log_dir),
"LOG_FILE_NAME": defaults.log_file_name,
"LOG_FILE_MAX_BYTES": str(defaults.log_file_max_bytes),
"LOG_FILE_BACKUP_COUNT": str(defaults.log_file_backup_count),
"PROVIDER": defaults.provider.value,
"PROVIDER_MODEL": defaults.provider_model or "",
"DEFAULT_PROMPT_NAME": defaults.default_prompt_name,
"ENVIRONMENT": defaults.environment,
"DATABASE__DRIVER": defaults.database.driver,
"DATABASE__PATH": getattr(defaults.database, "path", ""),
"BOOTSTRAP_SCHEMA_ON_STARTUP": str(defaults.bootstrap_schema_on_startup).lower(),
"SQLITE_CHECK_SAME_THREAD": str(defaults.sqlite_check_same_thread).lower(),
"UPLOAD_DIR": str(defaults.upload_dir),
"PROMPT_DIR": str(defaults.prompt_dir),
"DATABASE_BACKUP_DIR": str(defaults.database_backup_dir),
"WORKER_MAX_RETRIES": str(defaults.worker_max_retries),
"WORKER_PROVIDER_TIMEOUT_SECONDS": str(defaults.worker_provider_timeout_seconds),
"WORKER_STALE_JOB_SECONDS": str(defaults.worker_stale_job_seconds),
"WORKER_RETRY_BACKOFF_SECONDS": str(defaults.worker_retry_backoff_seconds),
"WORKER_SHUTDOWN_GRACE_SECONDS": str(defaults.worker_shutdown_grace_seconds),
"WORKER_POLL_INTERVAL_SECONDS": str(defaults.worker_poll_interval_seconds),
"WORKER_MIN_TRANSCRIPTION_CHARS": str(defaults.worker_min_transcription_chars),
"WORKER_MIN_TRANSCRIPTION_LINES": str(defaults.worker_min_transcription_lines),
"WORKER_FAIL_ON_FINISH_REASON_LENGTH": str(defaults.worker_fail_on_finish_reason_length).lower(),
}
active = _active_env_example_values()
path_like_keys = {"LOG_DIR", "UPLOAD_DIR", "PROMPT_DIR", "DATABASE_BACKUP_DIR"}
mismatches = {
key: {
"expected": _normalize_env_path_value(expected_value) if key in path_like_keys else expected_value,
"actual": _normalize_env_path_value(active.get(key)) if key in path_like_keys else active.get(key),
}
for key, expected_value in expected.items()
if (
(_normalize_env_path_value(active.get(key)) if key in path_like_keys else active.get(key))
!= (_normalize_env_path_value(expected_value) if key in path_like_keys else expected_value)
)
}
assert mismatches == {}
def test_env_production_example_builds_settings_and_keeps_production_defaults():
"""The production template must parse into Settings and preserve intended production posture."""
active = _active_env_production_example_values()
Settings(_env_file=PROJECT_ROOT / ".env.production.example", _cli_parse_args=False)
assert active["ENVIRONMENT"] == "production"
assert active["RUN_EMBEDDED_WORKER"] == "false"
assert active["DATABASE__DRIVER"] == "postgres"