fix: fail closed on missing production inputs

This commit is contained in:
m
2026-08-21 01:42:24 +03:00
parent da94ed17a6
commit 49036e6397
3 changed files with 103 additions and 7 deletions
+5 -5
View File
@@ -8,8 +8,8 @@ services:
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-assistant}
POSTGRES_USER: ${POSTGRES_SUPERUSER}
POSTGRES_PASSWORD: ${POSTGRES_SUPERUSER_PASSWORD}
POSTGRES_USER: ${POSTGRES_SUPERUSER:?POSTGRES_SUPERUSER is required}
POSTGRES_PASSWORD: ${POSTGRES_SUPERUSER_PASSWORD:?POSTGRES_SUPERUSER_PASSWORD is required}
CONTINUITY_DB_PASSWORD: ${CONTINUITY_DB_PASSWORD}
IDENTITY_DB_PASSWORD: ${IDENTITY_DB_PASSWORD}
AUTHORITY_DB_PASSWORD: ${AUTHORITY_DB_PASSWORD}
@@ -23,7 +23,7 @@ services:
- assistant_pg:/var/lib/postgresql
- assistant_core_secrets:/run/secrets:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_SUPERUSER} -d ${POSTGRES_DB:-assistant}"]
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_SUPERUSER:?POSTGRES_SUPERUSER is required} -d ${POSTGRES_DB:-assistant}"]
interval: 10s
timeout: 5s
retries: 20
@@ -95,7 +95,7 @@ services:
POSTGRES_USER: continuity_role
POSTGRES_PASSWORD: ${CONTINUITY_DB_PASSWORD}
CORE_RUNTIME_URL: http://core-runtime:8080
COMMIT_EXECUTOR_TOKEN: ${COMMIT_EXECUTOR_TOKEN}
COMMIT_EXECUTOR_TOKEN: ${COMMIT_EXECUTOR_TOKEN:?COMMIT_EXECUTOR_TOKEN is required}
commit-runtime:
build: { context: .., dockerfile: deploy/images/runtime.Dockerfile, args: { TARGET: commit-runtime, SOURCE_REVISION: "${ASSISTANT_SOURCE_REVISION:-unknown}" } }
@@ -111,7 +111,7 @@ services:
AUTHORITY_POSTGRES_PASSWORD: ${AUTHORITY_DB_PASSWORD}
CORE_RUNTIME_URL: http://core-runtime:8080
CONTINUITY_RUNTIME_URL: http://continuity-runtime:8081
COMMIT_EXECUTOR_TOKEN: ${COMMIT_EXECUTOR_TOKEN}
COMMIT_EXECUTOR_TOKEN: ${COMMIT_EXECUTOR_TOKEN:?COMMIT_EXECUTOR_TOKEN is required}
NOTIFICATION_WRITE_TOKEN_FILE: /run/notification-writer/token
NOTIFICATION_WRITE_SECRET_REF: domovoy-notification-write-v1
# External mutation credentials belong here only via Portainer/Docker secrets/env injection.
+2 -2
View File
@@ -1,5 +1,5 @@
{
"task_file": "dev/tasks/DEV-000072-semantic-interpretation-deferral-boundary.json",
"task_id": "DEV-000072",
"task_file": "dev/tasks/DEV-000073-production-compose-fail-closed.json",
"task_id": "DEV-000073",
"task_revision": 1
}
@@ -0,0 +1,96 @@
{
"task_id": "DEV-000073",
"task_revision": 1,
"architecture_revision": "DEV-000072-baseline",
"base_repo_revision": "da94ed1",
"risk_tier": "E",
"intent": "Make Assistant production Compose fail closed when required PostgreSQL and executor inputs are absent, without mutating neighboring projects or storing secrets in the repository.",
"requirement_ids": [
"Production missing inputs must fail before container startup",
"Assistant-only deployment scope",
"No secret values in Git",
"No neighboring project mutation"
],
"allowed_change_scope": {
"modules": [],
"paths": [
"deploy/docker-compose.prod.yml",
"docs/PROJECT_STATUS.md",
"dev/ACTIVE_TASK.json",
"dev/tasks/DEV-000073-production-compose-fail-closed.json"
]
},
"forbidden_change_scope": {
"paths": [
"architecture/**",
"security/**",
"modules/**",
"contracts/**",
"database/migrations/**",
"deploy/docker-compose.dev.yml",
".gitea/**"
]
},
"allowed_architecture_delta": {
"new_cross_module_dependencies": 0,
"new_canonical_owners": 0,
"new_privileges": 0,
"new_third_party_dependencies": 0,
"new_provider_adapters": 0,
"new_database_owner_roles": 0
},
"contracts": {
"consume": [
"existing production Compose topology",
"existing external secret injection"
],
"may_change": []
},
"semantic_owner": "none-production-configuration",
"canonical_state": [],
"state_transitions": [
"missing required production input -> Compose validation failure",
"all required inputs present -> existing Assistant stack topology remains unchanged"
],
"side_effects_and_privileges": [
"No secret creation or storage in Git",
"No deployment of neighboring projects",
"Promotion only after exact artifact and health checks"
],
"persistence_and_migrations": [
"No database migration",
"No canonical state change"
],
"failure_retry_restart": [
"Missing required input fails before Compose startup",
"Existing Assistant containers remain untouched until explicit promotion"
],
"assumptions": [
"Production control plane is docker-prod / docker.cin.su",
"Required secret values remain external to the repository",
"Neighboring Docker projects must not be included in any Compose operation"
],
"acceptance_scenarios": [
"Compose rejects missing POSTGRES_SUPERUSER",
"Compose rejects missing POSTGRES_SUPERUSER_PASSWORD",
"Compose rejects missing COMMIT_EXECUTOR_TOKEN",
"Compose renders with synthetic non-secret values",
"scope check passes",
"Assistant-only production inspection identifies exact artifact and health state"
],
"required_tests": [
"docker compose config -q with missing inputs",
"docker compose config -q with synthetic inputs",
"go test ./...",
"go vet ./...",
"go run ./cmd/devctl preflight -active dev/ACTIVE_TASK.json",
"go run ./cmd/devctl check-diff -active dev/ACTIVE_TASK.json",
"go run ./cmd/devctl check-architecture",
"production Assistant-only health and artifact inspection"
],
"terminal_gap_states": [
"BLOCKED_BY_MISSING_CAPABILITY",
"BLOCKED_BY_CONFLICT",
"REQUIRES_MIGRATION_DECISION"
]
}