D16: desacoplar clave de operador de identidad de agente #9

Open
cayce wants to merge 0 commits from decouple-operator-key into main
Owner

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.
cayce added 1 commit 2026-10-28 19:51:14 +00:00
audit-D16: operator key must never be an agent identity
ci / lint-test-leaks (pull_request) Canceled after 0s
0d24309433
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).
Some required checks failed
ci / lint-test-leaks (pull_request) Canceled after 0s
This branch is already included in the target branch. There is nothing to merge.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin decouple-operator-key:decouple-operator-key
git checkout decouple-operator-key
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cayce/cayce-ops#9