2.0 KiB
2.0 KiB
M14 operations and packaging evidence
Delivered
- Pinned non-root OCI application and proxy images; isolated web, scheduler, worker,
migrate, and admin roles; same-origin Unix-socket proxy; no reload or embedded roles.
The proxy port is loopback-bound by default (
127.0.0.1), so the localhost public URL cannot permit remote first-admin setup takeover. Operators exposing it through an external reverse proxy must set a non-loopback public URL and bootstrap secret. - Role-aware readiness, JSON structured logs, safe worker claim shutdown, and dependency-free Prometheus metrics for request volume/duration, active/stale/failed execution state, schedule lag, corrupt/unavailable repositories, and free space.
- SBOM generation at
tools/generate_sbom.py, generated CycloneDX artifactm14-sbom.json, and base-image/source provenance inm14-provenance.md. - Metadata, repository, key, upgrade, disaster-recovery, and observability runbooks.
Green verification
docker compose config --quiet # passed (loopback port binding)
docker compose build --pull # passed
make test-e2e # 1 passed in 51.69s (loopback regression)
make check # passed after loopback regression
91 unit/contract, 61 integration, 15 fault, 33 security
Ruff/format, mypy (40 files), TypeScript, frontend build all passed
python tools/generate_sbom.py # 256 components
test_compose_v2.py creates its source and host-bind key fixture in pytest temporary
directories. The actual service-owned master key is generated only in an ephemeral
Compose named volume, then down --volumes --remove-orphans removes it. No fixture
secret or source directory is committed. The test runs migration, starts the stack,
checks readiness and metrics, stops/restarts the worker cleanly, restarts runtime
roles, verifies setup metadata persists, and tears down the project.