OXYGENHUB

A keyless agent's grant stops working when its owner rotates their key issue #135 closed: completed andymccall opened this · 1 comment

andymccall

Found 2026-10-24 23:40 pushing oxygen (T1, oxygenhub#301) as agent:claude: the push was refused change caa5448d2b21 is not authenticated by its author, and oxy show says INVALID signature: key 75bd276a0cf7 is neither the author nor a delegate.

Cause: the agent's grant was signed on 2026-10-17 by Andy's key of the time (4cd9916c). Andy has rotated since (each delegation rotates his identity; now d89664ce), and the oxygen repository pins author.key to the new key. Repo::granted requires grant.grantor == author exactly, so a grant by an earlier key of the same identity chain no longer counts, and every keyless commit in a repository that pins the owner's newest key fails. Repositories where the agent home's author.key (still 4cd9916c) is used work.

Fix: a grant by a rotation predecessor of the author (the author identity's previous chain, each step stored or in the home's keys/) authorizes the agent as a grant by the author would; verify the grant with that predecessor's identity. The policy already accepts rotation predecessors for references (predecessor_authorized). Test: rotate the owner after granting, commit keyless with the new key as author.

Every rotation (delegate add/remove) would otherwise break every agent until the owner re-grants.

andymccall set labels bug ·

closed by change 45a6f5ec85cf ·

andymccall

Confirmed live (2026-10-25 02:05): with the hub at 936b24b2 (pins this fix) and oxy at main, oxygen 910c8ce4 was committed by agent:claude with this repository's author.key d89664ce (Andy's newest), sealed under the grant 4cd9916c signed, and the hub took the push. The workaround used for dd308902, faa079a1 and 8db4255e (author.key set to 4cd9916c for the commit and push only, then restored) is no longer needed.