user-engine/docs/evidence/2026-10-11-one-app-catalogue-proposal/preflight.py
tegwick 1eefbfc44a
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Document exact native catalogue gap and bounded owner proposal
Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
2026-10-11 03:07:31 +02:00

15 lines
1.4 KiB
Python

"""Fixed READ ONLY preflight for one proposed catalogue registration; never writes."""
import os,json,datetime,hashlib
from pathlib import Path
from user_engine.domain import Application,ApplicationBinding,ProfileScope,ProjectionType
from user_engine.store_records import store_record_for
from user_engine.adapters.postgres import PostgresUserEngineStore
import psycopg
application=Application('informed-decision','Informed Decision','informed-decision',allowed_profile_scopes=(ProfileScope.GLOBAL,),allowed_projection_types=(ProjectionType.APPLICATION_RUNTIME,))
binding=ApplicationBinding('informed-decision',oidc_client_id='informed-decision-approver',protected_system_id='informed-decision',catalog_namespaces=(),event_source=None,deployment_ref=None)
out={'fixed_application_id':'informed-decision','read_only':True,'native_mutation':False}
try:
with psycopg.connect(os.environ['USER_ENGINE_DATABASE_URL']) as conn:
conn.execute('SET TRANSACTION READ ONLY');store=PostgresUserEngineStore(conn);a=store.application('informed-decision');b=store.binding('informed-decision');out.update(application_absent=a is None,binding_absent=b is None,exact_match=a==application and b==binding,partial_or_conflicting=not ((a is None and b is None) or (a==application and b==binding)));conn.rollback()
except Exception as e:out['exception_class']=type(e).__name__
print(json.dumps(out,sort_keys=True))