Files
flan 8cefa325a6 v0.8.0: full-codebase audit remediation
Custody: rows+chain commit atomically per batch; audit gains reverse check
(unchained content fails), opens read-only, refuses missing stores. Gate:
tie-averaged Spearman (order-invariant; old impl could flip the gate by
alphabetization), both raters required, peeks labeled + unservable + never
pass. Manifests: corpus_hash covers full records (manifest_version 2).
Embedding cache self-invalidating (text-hash + model@revision key, chunked
reads, one implementation). serve: --config, health survives bad timestamps,
routes generated from artifacts.KINDS. cycle command owns window policy;
compose ships the collector. artifacts.py pins byte-determinism (utf-8,
sorted keys) for every writer. congress.py (dead custody-bypassing draft)
deleted. stats.py + hardening regression suite; 60 tests.
2026-07-10 16:58:26 +00:00

39 lines
1.0 KiB
YAML

# The full deployment: read-only API plus the 6-hourly collector.
# docker compose up -d # api :8477 + collector
# docker compose run --rm api ingest # any one-shot command
# docker compose run --rm api validate --ratings ... # gate day
#
# The collector's only shell is a sleep loop; everything with logic in it —
# window policy, artifact naming, audit — is `tiltmeter cycle`, tested Python.
x-common: &common
image: tiltmeter:latest
build: .
user: "568:568"
environment:
HOME: /tmp
volumes:
- ./data:/app/data
- ./releases:/app/releases
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 10m
max-file: "3"
services:
api:
<<: *common
command: ["serve", "--releases", "releases"]
ports:
- "8477:8477"
collector:
<<: *common
entrypoint: ["/bin/sh", "-c"]
command:
- |
while true; do
tiltmeter cycle || echo "cycle failed; retrying next interval"
sleep 21600
done