fix(object-store): make the repository guard refuse what the authority refuses #145

Merged
binjovi-bot merged 1 commit from sean/object-store-guard into trunk 2026-09-09 12:10:27 +00:00 AGit
Owner

tests/object-store-test and Binjovi.Domain.ObjectStorePlan are twins and were disagreeing on exact keys: the authority pins map_size on the document, each identity and each secret block, the guard did not. A document with an extra key passed the guard and would be refused at deploy time -- the feedback failure the pairing exists to prevent. Five more negative controls, sixteen in total. https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76

tests/object-store-test and Binjovi.Domain.ObjectStorePlan are twins and were disagreeing on exact keys: the authority pins map_size on the document, each identity and each secret block, the guard did not. A document with an extra key passed the guard and would be refused at deploy time -- the feedback failure the pairing exists to prevent. Five more negative controls, sixteen in total. https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76
fix(object-store): make the repository guard refuse what the authority refuses
All checks were successful
binjovi/ci Binjovi completed the frozen plan
c66a9ce884
`tests/object-store-test` and `Binjovi.Domain.ObjectStorePlan` are twins: the
guard refuses a bad document before it is committed and can tell the committer
why, and the authority refuses one that reaches the control plane by any other
path. Neither replaces the other, and they are only useful while they agree.

They did not agree on EXACT KEYS. The authority refuses a document, an
identity or a secret block carrying any key it does not know -- `map_size` is
pinned on all three. The guard checked the keys it cared about and ignored the
rest, so a document with an extra key passed here, was committed, and would
then be refused at deploy time.

That is exactly the feedback failure the pairing exists to prevent: a green
guard, a merged change, and a failure that surfaces later somewhere with less
context. The guard now pins the same three key sets, with `ilm` optional on a
bucket as the authority allows.

Five more negative controls, taking the guard to sixteen: an extra top-level
key, an extra identity key, an extra secret key, an extra bucket key, and a
required identity key removed. Weakening the exact-key rules turns the first of
them red, which is what a negative control is for.

Claude-Session: https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
sean/binjovi-plans!145
No description provided.