feat: verify Anthropic custody through metadata only
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0726e-5232-73f2-aaca-2c05ceb62efb
This commit is contained in:
parent
a16c33942a
commit
b2c2848e49
2 changed files with 31 additions and 6 deletions
|
|
@ -10,10 +10,9 @@ in_flight:
|
|||
missing_fields:
|
||||
- openbao.policy_file
|
||||
- openbao.auth
|
||||
blocking_reason: Provider organization, key name and expiration supplied by user.
|
||||
Empty-only KV seed authorized for operator UI handoff; live custody and the sandbox
|
||||
owner machine identity/delivery remain unverified. Workspace scope and budget
|
||||
are not confirmed.
|
||||
blocking_reason: User reports key saved through UI; metadata-only owner check confirms
|
||||
live version 2. Sandbox owner machine identity and protected delivery remain unimplemented;
|
||||
workspace scope/budget and provider authentication are unverified.
|
||||
owner: railiance-platform
|
||||
requester:
|
||||
agent: codex
|
||||
|
|
@ -64,8 +63,8 @@ delivery:
|
|||
risk:
|
||||
classification: high
|
||||
notes:
|
||||
- Proposed KV coordinates and catalog selector are reserved design names, not surveyed
|
||||
live objects.
|
||||
- KV path exists with live version 2. Catalog selector is still proposed and no
|
||||
runtime read grant has been activated.
|
||||
- Provider credential can incur API charges; use a dedicated workspace and user-selected
|
||||
budget.
|
||||
- Use a workspace-scoped service account key; organization administration is outside
|
||||
|
|
@ -110,6 +109,17 @@ verification:
|
|||
- Provider metadata recorded; metadata-only recovery completed after empty response
|
||||
parsing fix; contained sessions revoked.
|
||||
- No secret data read or real key handled; runtime lane remains inactive.
|
||||
- at: '2026-09-05'
|
||||
actor: codex
|
||||
kind: custody_metadata_verification
|
||||
result: passed
|
||||
details:
|
||||
- User reports secret saved in UI. Metadata confirms live version 2 created 2026-09-05T19:12:40.442796563Z,
|
||||
neither deleted nor destroyed.
|
||||
- Metadata request id d0b60424-a749-c72f-593b-ced6172dd183; contained session
|
||||
revoked.
|
||||
- No value read; field content and provider authentication not verified. Runtime
|
||||
lane remains inactive.
|
||||
lifecycle:
|
||||
deactivate: Disable the owner route and provider key; revoke outstanding OpenBao
|
||||
reader tokens. Preserve KV history under platform retention rules.
|
||||
|
|
|
|||
|
|
@ -17,6 +17,21 @@ def bao(*args, payload=None):
|
|||
return json.loads(r.stdout) if r.stdout.strip() else {}
|
||||
|
||||
def main():
|
||||
if sys.argv[1:] == ['--verify-custody']:
|
||||
result = bao('read', '-format=json', META_PATH)
|
||||
observed = result['data']
|
||||
version = observed.get('current_version', 0)
|
||||
current = observed.get('versions', {}).get(str(version), {})
|
||||
if version < 2 or not current or current.get('destroyed') or current.get('deletion_time'):
|
||||
raise RuntimeError('no_live_successor_version')
|
||||
# Deliberately exclude arbitrary custom metadata and all data values.
|
||||
receipt = {'ccr': 'CCR-2026-0016', 'path': META_PATH,
|
||||
'current_version': version, 'created_time': current.get('created_time'),
|
||||
'live_successor_observed': True, 'secret_value_read': False,
|
||||
'provider_authentication_verified': False,
|
||||
'request_id': result.get('request_id')}
|
||||
Path('/tmp/glas-anthropic-custody-receipt.json').write_text(json.dumps(receipt))
|
||||
return
|
||||
if sys.argv[1:] == ['--complete-metadata']:
|
||||
receipt = json.loads(RECEIPT.read_text())
|
||||
if receipt.get('path') != DATA_PATH or receipt.get('version') != 1:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue