Critical 1 (approval forgery): audit_log is now hash-chained (prev_hash/entry_hash, verify_audit_chain); executor approve REQUIRES a BIP-340 signature over sha256(cayce-ops:approve:<id>) when CAYCE_OPS_OPERATOR_PUBKEY is set; deploy/roles.sql ships least-privilege per-daemon DB roles. Critical 2 (threading dead): sends create real OUTBOUND rows (own Message-ID, In-Reply-To -> inbound); inbound message_id never overwritten; maild compose adds the first-contact path; _match_proposal falls back to inbound chains. Critical 3 (duplicate sends): per-message transactions in send path — SMTP failure on message N no longer resurrects 1..N-1; failures audited (send_failed) and the row stays queued. Critical 4 (classifier): negated approvals (cannot accept / not approved / not accepting) classify REJECTION at 0.95 before the bare-keyword rule; LLM prompt braces escaped (.format no longer KeyError into silent fallback). Critical 5 (systemd): every daemon has a run subcommand (maild run = poll+send, publisher run = publish-due, monitor run = build); deploy README documents the separate daily publisher plan timer. Mediums: approved_hash binds drafts/captions to the approved text (edited text refuses to send/publish until re-approved); risk_score renamed match_score (migration 0002) and auto-approve orders HIGHEST relevance first; compose binds postgres to 127.0.0.1; IMAP marks \\Seen only after commit (fetch returns (num, raw), mark post-commit); disabled channels are terminal (ContentStatus.SKIPPED) and publish failures burn a bounded attempt budget before abandonment; make hooks installs the pre-push gate. tests: 12 new — 56 total, all green; ruff 0 findings; gitleaks clean.
26 lines
844 B
Makefile
26 lines
844 B
Makefile
.PHONY: check lint test migrate-check leaks sync hooks
|
|
|
|
sync: ## install locked deps (creates .venv)
|
|
uv sync --frozen
|
|
|
|
lint: ## ruff
|
|
uv run ruff check .
|
|
|
|
test: ## pytest
|
|
uv run pytest
|
|
|
|
migrate-check: ## smoke the alembic chain on a scratch sqlite db
|
|
rm -f /tmp/cayce-ops-migrate.db
|
|
CAYCE_OPS_DATABASE_URL=sqlite:////tmp/cayce-ops-migrate.db uv run alembic upgrade head
|
|
@rm -f /tmp/cayce-ops-migrate.db
|
|
|
|
leaks: ## gitleaks over the full history
|
|
gitleaks detect --source . --log-opts="--all" -v
|
|
|
|
hooks: ## install the pre-push gate as a git hook (part of setup)
|
|
git config core.hooksPath scripts/githooks
|
|
@echo "pre-push gate installed (scripts/githooks/pre-push)"
|
|
|
|
check: lint test migrate-check leaks ## the pre-push gate — must be green before every push
|
|
@echo "check: OK"
|