informed-decision/docs/evidence/2026-10-11-zlib-image-release/execution/authority_journal.py
tegwick 312ab97e87 Prepare owner-reviewed zlib-only native release decision
Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
2026-10-11 12:37:05 +02:00

233 lines
16 KiB
Python

"""Supervised receipt bookkeeping, not an authenticated approval provider."""
import datetime
import fcntl
import hashlib
import json
import os
import re
from pathlib import Path
import stat
import uuid
FOUNDER = {'kind': 'person', 'sub': 'uid=platform-root,ou=people,dc=netkingdom,dc=local'}
MEMO_ID = 'infd-20261011-zlib-remediation-r1'
PROPOSAL = 'INFD-WP-0009-T05/zlib85091-r1'
PHASES = ('drill-backup', 'drill-copy', 'offline-verify', 'cleanup-offline',
'cutover-backup', 'cutover-copy', 'release', 'verify', 'rollback', 'rollback-verify')
def require(value, reason):
if not value:
raise ValueError(reason)
def sha(path):
digest = hashlib.sha256()
with Path(path).open('rb') as stream:
for block in iter(lambda: stream.read(1024**2), b''):
digest.update(block)
return digest.hexdigest()
def private(path, directory=False):
info = Path(path).lstat()
require((stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode))
and info.st_uid == os.getuid() and stat.S_IMODE(info.st_mode) == (0o700 if directory else 0o600)
and (directory or info.st_nlink == 1), 'private owned custody required')
def authority(receipt, outcome, memo_sha, source_revision, phase, now=None):
"""Root must freshly verify native outcome at fixed ORIGIN outside this helper.
Receipt files/flags are not signed grants. This function checks the exact
supervised receipt relation; existing harness/founder authority remains the
actual permission boundary. It never authenticates a caller as human.
"""
now = now or datetime.datetime.now(datetime.timezone.utc)
require(phase in PHASES, 'fixed phase required')
require(receipt.get('proposal_id') == PROPOSAL and receipt.get('memo_id') == MEMO_ID
and receipt.get('memo_version') == 1 and receipt.get('memo_sha256') == memo_sha
and receipt.get('source_revision') == source_revision
and receipt.get('activation') == 'APPROVED'
and receipt.get('authority_mode') == 'ADMINISTER'
and receipt.get('target') == 'realm:kubernetes/railiance01/informed-decision'
and receipt.get('verification_method') == 'root-fixed-origin-native-readback'
and receipt.get('runtime_authenticated_grant') is False
and receipt.get('outcome_query') == '/lifecycle/memos/' + MEMO_ID + '/outcomes?version=1',
'exact externally verified supervised receipt required')
verified = datetime.datetime.fromisoformat(receipt['verified_at'].replace('Z', '+00:00'))
require(verified.tzinfo is not None and 0 <= (now - verified).total_seconds() <= 120,
'fresh root native readback required before every phase')
deadline = datetime.datetime.fromisoformat('2026-10-12T23:59:59+00:00')
require(now < deadline, 'approved execution window expired')
if phase == 'release':
require((deadline-now).total_seconds() >= 1800, 'reserve thirty minutes for verification and recovery')
require(outcome.get('memo_id') == MEMO_ID and outcome.get('review', {}).get('stale') is False
and outcome['review'].get('intake_state') == 'ready', 'native review is not ready/current')
review_id = outcome['review']['memo_id']
require(review_id == receipt.get('review_memo_id'), 'native review identity changed')
accepted = [x for x in outcome.get('dispositions', [])
if x.get('submission_state') == 'confirmed'
and x.get('disposition', {}).get('verb') == 'accept'
and x['disposition'].get('memo_version') == 1]
require(len(accepted) == 1, 'one confirmed founder acceptance required')
accepted = accepted[0]['disposition']
require(accepted.get('actor') == FOUNDER and accepted.get('memo_id') == review_id
and accepted.get('approval_id') == receipt.get('approval_id')
and accepted.get('id') == receipt.get('disposition_id')
and accepted.get('at') == receipt.get('accepted_at'), 'exact founder disposition mismatch')
require(re.fullmatch(r'[a-f0-9-]{36}', accepted['approval_id']) is not None
and re.fullmatch(r'disp-[a-f0-9-]{36}', accepted['id']) is not None
and re.fullmatch(r'review-[a-f0-9-]{36}', review_id) is not None,
'native disposition identifiers are malformed')
accepted_at = datetime.datetime.fromisoformat(accepted['at'].replace('Z', '+00:00'))
require(accepted_at.tzinfo is not None and accepted_at <= verified, 'acceptance time not bounded')
return {key: receipt[key] for key in ('approval_id', 'disposition_id', 'accepted_at', 'verified_at')}
def fresh_scan(receipt, report, contract, now=None):
"""Root supervised scan bookkeeping; actual scanner proof stays retained."""
now=now or datetime.datetime.now(datetime.timezone.utc)
require(receipt.get('image')=='forgejo.coulomb.social/coulomb/informed-decision@sha256:f5588f496b1f267d07cdc9f5208e6f2f241f74b739c23924b03702dec13a5c23'
and receipt.get('artifact_source_revision')=='9b4bb25d325698ae543e7e8a8a3c3592db1f58fc'
and receipt.get('scanner')=='aquasec/trivy@sha256:62b1e65e8869bc4b4c6aa4fa2b21595256c7c2f6018a9d9ad61caf87187c1969'
and receipt.get('no_suppression') is True and receipt.get('full_allseverity_scan') is True
and receipt.get('exit_code')==0,'exact full immutable artifact scan required')
scanned=datetime.datetime.fromisoformat(receipt['completed_at'].replace('Z','+00:00'))
metadata=receipt['db_metadata'];updated=datetime.datetime.fromisoformat(metadata['UpdatedAt'].replace('Z','+00:00'));next_update=datetime.datetime.fromisoformat(metadata['NextUpdate'].replace('Z','+00:00'))
require(all(t.tzinfo is not None for t in (scanned,updated,next_update))
and updated<=scanned<=now<next_update and (now-scanned).total_seconds()<=14400
and metadata.get('Version')==2 and re.fullmatch(r'[a-f0-9]{64}',receipt.get('db_sha256','')) is not None,'scan or vulnerability database expired')
require(isinstance(report,dict) and isinstance(report.get('Results'),list) and report['Results'],'retained full scan results required')
require(report.get('SchemaVersion')==2 and report.get('ArtifactType')=='container_image','full immutable container scan schema required')
metadata_report=report.get('Metadata',{});config=metadata_report.get('ImageConfig',{})
require(metadata_report.get('ImageID')==contract['image_config_id'] and metadata_report.get('DiffIDs')==contract['diff_ids']
and config.get('rootfs')==contract['image_config_rootfs'] and config.get('config',{}).get('Labels')==contract['image_source_labels']
and metadata_report.get('OS')==contract['os'],'scan image config layers or source labels differ')
classes=[(x.get('Class'),x.get('Type')) for x in report['Results']]
require(sorted(classes)==[('lang-pkgs','python-pkg'),('os-pkgs','alpine')],'exact OS and Python scan coverage required')
inventory=[]
for result in report['Results']:
packages=result.get('Packages');expected_count=38 if result['Class']=='os-pkgs' else 6
require(isinstance(packages,list) and len(packages)==expected_count,'full package inventory coverage required')
for package in packages:
require(isinstance(package,dict) and isinstance(package.get('Name'),str) and isinstance(package.get('Version'),str)
and isinstance(package.get('Identifier',{}).get('PURL'),str),'package identity absent')
inventory.append([result['Class'],result['Type'],package['Name'],package['Version'],package['Identifier']['PURL']])
inventory.sort();require(len({tuple(p) for p in inventory})==44 and inventory==contract['inventory']
and hashlib.sha256(json.dumps(inventory,sort_keys=True,separators=(',',':')).encode()).hexdigest()==contract['inventory_canonical_sha256'],'immutable inventory differs from published 38 OS and 6 Python packages')
require(any(p[0]=='os-pkgs' and p[2]=='zlib' and p[3]=='1.3.2-r1' for p in inventory),'fixed zlib package missing')
for result in report['Results']:
require(isinstance(result,dict) and isinstance(result.get('Vulnerabilities',[]),(list,type(None))),'full scan result invalid')
require(not result.get('Vulnerabilities'),'new finding refuses release and closure')
return {'full_report_sha256':receipt['full_report_sha256'],'db_sha256':receipt['db_sha256'],'completed_at':receipt['completed_at'],'next_update':metadata['NextUpdate'],'allseverity_findings':0}
def recovery_authority(receipt, cache, journal, memo_sha, revision, sealed, dependencies, phase, now=None):
"""Explicit new human term: supervised bounded service-outage recovery.
Cached acceptance is historical evidence, not a current revocation read or
autonomous/signed grant. Root's fresh outage evidence never fabricates
current outcomes. Only this trial's disclosed image/source recovery applies.
"""
now=now or datetime.datetime.now(datetime.timezone.utc)
require(phase in ('rollback','rollback-verify'),'outage fallback is recovery-only')
release=journal.get('phases',{}).get('release');require(isinstance(release,dict) and release.get('state') in ('RUNNING','UNCERTAIN','COMPLETE'),'recorded actual release attempt required')
started=datetime.datetime.fromisoformat(release['started_at']);deadline=datetime.datetime.fromisoformat('2026-10-12T23:59:59+00:00')
require(started.tzinfo is not None and 0<=(now-started).total_seconds()<=1800 and now<deadline,'bounded recovery window expired')
require(receipt.get('kind')=='informed-decision.root-supervised-outage-recovery'
and receipt.get('proposal_id')==PROPOSAL and receipt.get('source_revision')==revision and receipt.get('memo_sha256')==memo_sha
and receipt.get('phase')==phase and receipt.get('release_attempt_id')==release['attempt_id']
and receipt.get('cache_sha256')==release.get('release_authority_cache_sha256')
and receipt.get('root_verified') is True and receipt.get('manual_supervised_recovery') is True
and receipt.get('current_native_outcomes_claimed') is False,'exact supervised bounded recovery receipt required')
observed=datetime.datetime.fromisoformat(receipt['observed_at'].replace('Z','+00:00'))
require(observed.tzinfo is not None and 0<=(now-observed).total_seconds()<=120,'fresh outage observation required')
require((receipt.get('native_probe_status')=='transport-unavailable' or type(receipt.get('native_probe_status')) is int and receipt['native_probe_status'] in (502,503,504))
and receipt.get('explicit_revoked') is False and receipt.get('current_conflict') is False
and receipt.get('identity_or_scope_mismatch') is False and receipt.get('service_healthy') is False,'outage recovery refuses denial/revocation/conflict/healthy service')
require(receipt.get('deployment_uid')==sealed['metadata']['uid'] and receipt.get('configmap_uid')==dependencies['configmap']['metadata']['uid']
and receipt.get('pvc_uid')==dependencies['pvc']['metadata']['uid']
and receipt.get('rollback_image')=='forgejo.coulomb.social/coulomb/informed-decision@sha256:763c36402c8be7cc4c1bd1a61623d1aff9116d52241877425b45a7018cc0883a'
and receipt.get('rollback_source')=='c96b0c6d881e855d1d158003c6de90ef390262e2','exact same-trial recovery custody required')
previous=cache['root_authority'];require(previous.get('bounded_outage_rollback_pre_authorized') is True,'new human packet must expressly preauthorize outage recovery')
verified=datetime.datetime.fromisoformat(previous['verified_at'].replace('Z','+00:00'))
require(verified.tzinfo is not None and 0<=(started-verified).total_seconds()<=120,'cached root acceptance must precede actual release freshly')
require(cache.get('memo_sha256')==memo_sha and cache.get('source_revision')==revision
and cache.get('plan_sha256')==journal['identity']['plan_sha256'],'cache trial/source/plan differs')
historical=authority(previous,cache['native_outcome'],memo_sha,revision,'release',verified)
if phase=='rollback':
placement=receipt.get('failed_candidate');require(isinstance(placement,dict) and placement.get('image')=='forgejo.coulomb.social/coulomb/informed-decision@sha256:f5588f496b1f267d07cdc9f5208e6f2f241f74b739c23924b03702dec13a5c23'
and placement.get('application_source')==revision and type(placement.get('ready_replicas')) is int and placement['ready_replicas']==0,'failed candidate placement required before recovery')
else:
rollback=journal['phases'].get('rollback');require(isinstance(rollback,dict) and rollback.get('state')=='COMPLETE'
and rollback.get('outage_recovery_receipt_sha256')==receipt.get('original_outage_receipt_sha256')
and isinstance(rollback.get('outage_recovery_anchor'),dict),'same-journal completed rollback and prior outage witness required')
require(receipt.get('recovered_image')==receipt['rollback_image'] and receipt.get('recovered_application_source')==receipt['rollback_source']
and type(receipt.get('ready_replicas')) is int and receipt['ready_replicas']==1,'separate exact recovered placement required')
return {**historical,'bounded_outage_recovery':True,'current_revocation_verified':False}
class Journal:
def __init__(self, parent, identity):
self.parent = Path(parent)
private(self.parent, directory=True)
self.path = self.parent / 'execution-journal.json'
self.lock = os.open(self.parent / 'execution.lock', os.O_CREAT | os.O_NOFOLLOW | os.O_RDWR, 0o600)
fcntl.flock(self.lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
private(self.parent / 'execution.lock')
if self.path.exists():
private(self.path)
self.data = json.loads(self.path.read_text())
require(self.data['identity'] == identity, 'journal case/source identity changed')
else:
self.data = {'identity': identity, 'phases': {}}
self.save()
def save(self):
temporary = self.parent / 'execution-journal.new'
fd = os.open(temporary, os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW | os.O_WRONLY, 0o600)
try:
with os.fdopen(fd, 'w') as stream:
json.dump(self.data, stream, indent=2)
stream.write('\n')
stream.flush()
os.fsync(stream.fileno())
os.replace(temporary, self.path)
directory = os.open(self.parent, os.O_DIRECTORY | os.O_RDONLY)
try:
os.fsync(directory)
finally:
os.close(directory)
except BaseException:
# Retain evidence rather than overwriting an uncertain durable intent.
raise
def start(self, phase, approval):
require(phase not in self.data['phases'], 'already attempted phase; no retry')
predecessors = dict(zip(PHASES[1:8], PHASES[:7]))
predecessors['rollback-verify'] = 'rollback'
if phase in predecessors:
require(self.data['phases'].get(predecessors[phase], {}).get('state') == 'COMPLETE',
'preceding phase is not verified complete')
if phase == 'rollback':
require('release' in self.data['phases'], 'rollback requires a recorded release attempt')
self.data['phases'][phase] = {'state': 'RUNNING', 'approval': approval,
'attempt_id': str(uuid.uuid4()),
'started_at': datetime.datetime.now(datetime.timezone.utc).isoformat()}
self.save()
def note(self, phase, key, value):
require(self.data['phases'][phase]['state'] == 'RUNNING', 'phase intent missing')
self.data['phases'][phase][key] = value
self.save()
def finish(self, phase, result):
entry = self.data['phases'][phase]
require(entry['state'] == 'RUNNING', 'phase intent missing')
entry['result'] = result
entry['state'] = 'COMPLETE' if result.get('all_checks_pass') is True else 'UNCERTAIN'
self.save()
def close(self):
os.close(self.lock)