FIX7 P0 Final Pre-Real-Data — generate_production_shaped_surrogate.py
#!/usr/bin/env python3
-- coding: ascii --
"""FIX7 P0 - production-shaped surrogate fixture generator.
GENERATED_SURROGATE_NOT_REAL_PRODUCTION_DUMP
Generates an isolated, secret-free, PII-free SQLite database whose SHAPE models the governed production surface inventory (production-readiness scoping packet, production-surface-inventory.json Table B) and the shaped-clone schema requirements (shaped-clone packet, schema-compatibility.json Table B):
- birth_registry - fn_birth_register output shape (object identity, status, content hash/bytes, timestamps, approval ref)
- registry-row fields - object_id + status fields inside birth_registry
- os_proposal_approvals - models the Tier-0 executor gate (db=directus AND os_proposal_approvals>=1)
- directus_objects - modeled Directus-relevant fields
- system_issues - modeled system_issues fields
- ids/hashes/timestamps - synthetic, deterministic, hash-comparable
- rollback_anchors - snapshot/restore anchor support
EVERY value is synthetic. No production data, no secrets, no PII, no live system contact, no network. Timestamps are FIXED constants so generation is deterministic. This surrogate closes the ENGINEERING rehearsal gap only; it does NOT replace an operator-provided production-shaped dump where real production data is required. """ import hashlib import os import sqlite3 import sys
MARKER = "GENERATED_SURROGATE_NOT_REAL_PRODUCTION_DUMP" MACRO = "FIX7_P0_FINAL_PRE_REAL_DATA_READINESS_LANE_MACRO_2026_06_12" FIXED_DATE = "2026-06-12"
def synth_sha(text): return hashlib.sha256(("FIX7-P0-SURROGATE::" + text).encode("ascii")).hexdigest()
def generate(db_path): if os.path.exists(db_path): raise SystemExit("REJECT_TARGET_ALREADY_EXISTS: " + db_path) conn = sqlite3.connect(db_path) c = conn.cursor()
# provenance marker FIRST: anything reading this DB can prove it is a surrogate
c.execute("""CREATE TABLE surrogate_provenance (
marker TEXT NOT NULL,
generated_by_macro TEXT NOT NULL,
generated_date TEXT NOT NULL,
real_production_data TEXT NOT NULL CHECK (real_production_data = 'NO'),
contains_secrets TEXT NOT NULL CHECK (contains_secrets = 'NO'),
contains_pii TEXT NOT NULL CHECK (contains_pii = 'NO'))""")
c.execute("INSERT INTO surrogate_provenance VALUES (?,?,?,'NO','NO','NO')",
(MARKER, MACRO, FIXED_DATE))
# 1+2. birth_registry: fn_birth_register output shape + registry-row fields
c.execute("""CREATE TABLE birth_registry (
id INTEGER PRIMARY KEY,
object_id TEXT NOT NULL UNIQUE,
object_kind TEXT NOT NULL,
status TEXT NOT NULL,
content_sha256 TEXT NOT NULL,
content_bytes INTEGER NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
born_by TEXT NOT NULL,
approval_id INTEGER)""")
seed_rows = [
(1, "SURR-OBJ-0001", "document", "ACTIVE", synth_sha("doc-0001"), 1111,
"2026-06-12T00:00:01Z", "2026-06-12T00:00:01Z", "SYNTHETIC_PIPELINE", 1),
(2, "SURR-OBJ-0002", "validator", "ACTIVE", synth_sha("val-0002"), 2222,
"2026-06-12T00:00:02Z", "2026-06-12T00:00:02Z", "SYNTHETIC_PIPELINE", 1),
(3, "SURR-OBJ-0003", "packet", "ACTIVE", synth_sha("pkt-0003"), 3333,
"2026-06-12T00:00:03Z", "2026-06-12T00:00:03Z", "SYNTHETIC_PIPELINE", 2),
(4, "SURR-OBJ-0004", "report", "SUPERSEDED", synth_sha("rep-0004"), 4444,
"2026-06-12T00:00:04Z", "2026-06-12T00:00:04Z", "SYNTHETIC_PIPELINE", 2),
(5, "SURR-OBJ-0005", "addendum", "ACTIVE", synth_sha("add-0005"), 5555,
"2026-06-12T00:00:05Z", "2026-06-12T00:00:05Z", "SYNTHETIC_PIPELINE", 2),
]
c.executemany("INSERT INTO birth_registry VALUES (?,?,?,?,?,?,?,?,?,?)", seed_rows)
# 3. os_proposal_approvals: models the Tier-0 executor gate inputs
c.execute("""CREATE TABLE os_proposal_approvals (
id INTEGER PRIMARY KEY,
proposal_id TEXT NOT NULL,
approver TEXT NOT NULL,
approved INTEGER NOT NULL,
approved_at TEXT NOT NULL,
db_target TEXT NOT NULL)""")
c.executemany("INSERT INTO os_proposal_approvals VALUES (?,?,?,?,?,?)", [
(1, "SURR-PROPOSAL-APPROVED", "SYNTHETIC_OWNER", 1,
"2026-06-12T00:00:10Z", "directus"),
(2, "SURR-PROPOSAL-UNAPPROVED", "SYNTHETIC_OWNER", 0,
"2026-06-12T00:00:11Z", "directus"),
(3, "SURR-PROPOSAL-WRONG-DB", "SYNTHETIC_OWNER", 1,
"2026-06-12T00:00:12Z", "not_directus"),
])
# 4. directus_objects: modeled Directus-relevant fields
c.execute("""CREATE TABLE directus_objects (
id INTEGER PRIMARY KEY,
collection TEXT NOT NULL,
item_pk TEXT NOT NULL,
payload_sha256 TEXT NOT NULL,
created_at TEXT NOT NULL)""")
c.executemany("INSERT INTO directus_objects VALUES (?,?,?,?,?)", [
(1, "objects", "SURR-OBJ-0001", synth_sha("directus-0001"),
"2026-06-12T00:00:01Z"),
(2, "objects", "SURR-OBJ-0003", synth_sha("directus-0003"),
"2026-06-12T00:00:03Z"),
])
# 5. system_issues: modeled fields
c.execute("""CREATE TABLE system_issues (
id INTEGER PRIMARY KEY,
issue_code TEXT NOT NULL,
severity TEXT NOT NULL,
object_id TEXT,
opened_at TEXT NOT NULL,
status TEXT NOT NULL)""")
c.executemany("INSERT INTO system_issues VALUES (?,?,?,?,?,?)", [
(1, "SURR-ISSUE-SEED-1", "low", "SURR-OBJ-0004",
"2026-06-12T00:00:20Z", "OPEN"),
])
# 7. rollback_anchors: snapshot anchor support
c.execute("""CREATE TABLE rollback_anchors (
id INTEGER PRIMARY KEY,
anchor_label TEXT NOT NULL,
table_name TEXT NOT NULL,
snapshot_sha256 TEXT NOT NULL,
created_at TEXT NOT NULL)""")
c.execute("INSERT INTO rollback_anchors VALUES (?,?,?,?,?)",
(1, "SURR-ANCHOR-SEED", "birth_registry",
synth_sha("anchor-seed"), "2026-06-12T00:00:30Z"))
conn.commit()
conn.close()
def main(): if len(sys.argv) != 2: print("usage: generate_production_shaped_surrogate.py <db_path>") sys.exit(2) generate(sys.argv[1]) print("SURROGATE_GENERATED: " + sys.argv[1]) print("SURROGATE_MARKER: " + MARKER) sys.exit(0)
if name == "main": main()