Punto 1 de Tanda A. La clave del operador era la de Cayce — se aprobaba a sí misma. Ahora el daemon rechaza esa configuración. La firma del operador pasa a ser externa.
validate_no_self_approval()
6 tests nuevos
D16 en DECISIONS
Gate verde: ruff 0, 71 tests, gitleaks clean.
Punto 1 de Tanda A. La clave del operador era la de Cayce — se aprobaba a sí misma. Ahora el daemon rechaza esa configuración. La firma del operador pasa a ser externa.
- validate_no_self_approval()
- 6 tests nuevos
- D16 en DECISIONS
Gate verde: ruff 0, 71 tests, gitleaks clean.
Background: CAYCE_OPS_OPERATOR_PUBKEY was set to Cayce nostr pubkey —
Cayce was approving itself. Signature was technically valid but semantically
null: human approval signed by the agent is not human approval.
- signing.py: validate_no_self_approval() rejects the operator pubkey when
it matches (a) the pubkey derived from any private key in the config,
or (b) any pubkey in CAYCE_OPS_FORBIDDEN_OPERATOR_PUBKEYS deny-list.
- executor/maild/publisher _signing() now calls the validation, so every
daemon and every CLI approve-* path refuses to operate (D16).
- tests: 6 new (agent-key refusal, human key passes, empty passes,
explicit denylist, end-to-end daemon refusal, derivation roundtrip).
- docs/DECISIONS.md: D16.
The operator signature is now produced OUTSIDE the VPS. CAYCE_OPS_OPERATOR_PUBKEY
must stay empty until the external signer exists — daemons refuse, which is
correct. The Cayce nsec itself is NOT touched (still the agent identity for
publishing and anchoring).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Punto 1 de Tanda A. La clave del operador era la de Cayce — se aprobaba a sí misma. Ahora el daemon rechaza esa configuración. La firma del operador pasa a ser externa.
Gate verde: ruff 0, 71 tests, gitleaks clean.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.