Write

#!/usr/bin/env python3
"""
gap_analysis_to_excel.py
Convert gap_analysis_whitepaper_vs_master_table.tsv to a formatted Excel workbook.
Output: Downloads/cubie_gap_analysis.xlsx
"""

import csv
from pathlib import Path
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter

REPO     = Path(__file__).parent.parent
TSV      = REPO / "gap_analysis_whitepaper_vs_master_table.tsv"
OUT_XLSX = Path("C:/Users/NickV/Downloads/cubie_gap_analysis.xlsx")

# Colour map by in_master_table value
STATUS_COLORS = {
    "NO":      "FFD7D7",   # red   — missing
    "PARTIAL": "FFF3CD",   # amber — partial
    "YES":     "D6F0D6",   # green — covered
}

HEADER_FILL = PatternFill("solid", fgColor="1F4E79")
HEADER_FONT = Font(bold=True, color="FFFFFF", size=10)
BODY_FONT   = Font(size=9)
WRAP        = Alignment(wrap_text=True, vertical="top")
TOP         = Alignment(vertical="top")

COLUMNS = [
    # (tsv_key, display_label, width)
    ("whitepaper_ref",    "Whitepaper Ref",       28),
    ("type",              "Type",                  14),
    ("section",           "Section",               34),
    ("page_approx",       "Page",                   6),
    ("formal_name_guess", "Formal Name Guess",     30),
    ("in_master_table",   "In Master Table",       14),
    ("whitepaper_quote",  "Whitepaper Quote",      60),
    ("notes",             "Notes / Match Details", 60),
]

def load_tsv():
    rows = []
    with open(TSV, encoding="utf-8") as f:
        reader = csv.DictReader(f, delimiter="\t")
        for row in reader:
            rows.append(row)
    return rows

def status_fill(val):
    color = STATUS_COLORS.get(val, "FFFFFF")
    return PatternFill("solid", fgColor=color)

def write_main_sheet(wb, rows):
    ws = wb.active
    ws.title = "GapAnalysis"

    # Header row
    for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
        cell = ws.cell(row=1, column=col_idx, value=label)
        cell.fill = HEADER_FILL
        cell.font = HEADER_FONT
        cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
        ws.column_dimensions[get_column_letter(col_idx)].width = width
    ws.row_dimensions[1].height = 28

    # Data rows
    for row_idx, rec in enumerate(rows, 2):
        status = rec.get("in_master_table", "").strip()
        fill   = status_fill(status)
        for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
            val = rec.get(key, "").strip()
            cell = ws.cell(row=row_idx, column=col_idx, value=val)
            cell.fill = fill
            cell.font = BODY_FONT
            # Wrap long text columns
            if key in ("whitepaper_quote", "notes", "section"):
                cell.alignment = WRAP
            else:
                cell.alignment = TOP
        ws.row_dimensions[row_idx].height = 48

    ws.freeze_panes = "A2"
    ws.auto_filter.ref = ws.dimensions
    ws.sheet_properties.tabColor = "1F4E79"

def write_gaps_only_sheet(wb, rows):
    """Sheet with only NO rows — the actionable gap list."""
    ws = wb.create_sheet("GAPS_TO_ADD")
    ws.sheet_properties.tabColor = "C00000"

    gaps = [r for r in rows if r.get("in_master_table", "").strip() == "NO"]

    for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
        cell = ws.cell(row=1, column=col_idx, value=label)
        cell.fill = HEADER_FILL
        cell.font = HEADER_FONT
        cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
        ws.column_dimensions[get_column_letter(col_idx)].width = width
    ws.row_dimensions[1].height = 28

    for row_idx, rec in enumerate(gaps, 2):
        fill = PatternFill("solid", fgColor="FFD7D7")
        for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
            val = rec.get(key, "").strip()
            cell = ws.cell(row=row_idx, column=col_idx, value=val)
            cell.fill = fill
            cell.font = BODY_FONT
            if key in ("whitepaper_quote", "notes", "section"):
                cell.alignment = WRAP
            else:
                cell.alignment = TOP
        ws.row_dimensions[row_idx].height = 60

    ws.freeze_panes = "A2"
    ws.auto_filter.ref = ws.dimensions

def write_partials_sheet(wb, rows):
    """Sheet with PARTIAL rows — needs review."""
    ws = wb.create_sheet("PARTIALS_REVIEW")
    ws.sheet_properties.tabColor = "C6A800"

    partials = [r for r in rows if r.get("in_master_table", "").strip() == "PARTIAL"]

    for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
        cell = ws.cell(row=1, column=col_idx, value=label)
        cell.fill = HEADER_FILL
        cell.font = HEADER_FONT
        cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
        ws.column_dimensions[get_column_letter(col_idx)].width = width
    ws.row_dimensions[1].height = 28

    for row_idx, rec in enumerate(partials, 2):
        fill = PatternFill("solid", fgColor="FFF3CD")
        for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
            val = rec.get(key, "").strip()
            cell = ws.cell(row=row_idx, column=col_idx, value=val)
            cell.fill = fill
            cell.font = BODY_FONT
            if key in ("whitepaper_quote", "notes", "section"):
                cell.alignment = WRAP
            else:
                cell.alignment = TOP
        ws.row_dimensions[row_idx].height = 60

    ws.freeze_panes = "A2"
    ws.auto_filter.ref = ws.dimensions

def write_summary_sheet(wb, rows):
    ws = wb.create_sheet("Summary")
    ws.sheet_properties.tabColor = "375623"

    no_rows      = [r for r in rows if r.get("in_master_table","").strip() == "NO"]
    partial_rows = [r for r in rows if r.get("in_master_table","").strip() == "PARTIAL"]
    yes_rows     = [r for r in rows if r.get("in_master_table","").strip() == "YES"]

    summary = [
        ("Metric", "Count"),
        ("Total whitepaper refs analysed",  len(rows)),
        ("Fully covered in master table (YES)",  len(yes_rows)),
        ("Partially covered (PARTIAL)",       len(partial_rows)),
        ("MISSING — not in master table (NO)", len(no_rows)),
        ("", ""),
        ("GAPS (NO) by type", ""),
    ]
    type_counts = {}
    for r in no_rows:
        t = r.get("type", "unknown").strip()
        type_counts[t] = type_counts.get(t, 0) + 1
    for t, c in sorted(type_counts.items()):
        summary.append((f"  {t}", c))

    summary += [
        ("", ""),
        ("Priority-1 critical gaps (must add to master table)", ""),
        ("  Cubie V2.1 module (consumed-hash ledger, replay rejection)", "CRITICAL"),
        ("  Definition: Permission Attenuation (Perm/Scope/TTL/Depth constraints)", "HIGH"),
        ("  Proposition: Subagent Containment (authority cannot expand along chain)", "HIGH"),
        ("  Proposition: Head-Shape Mismatch (HeadShapeOK runtime design rule)", "MEDIUM"),
        ("  Extended waste_ok 7-factor conjunction", "MEDIUM"),
        ("", ""),
        ("Priority-2 gaps (v2.5 additions, no formal counterpart yet)", ""),
        ("  adapter_swap_ok definition", "MEDIUM"),
        ("  nvlink_waiter_safe(r,e) definition", "MEDIUM"),
        ("  Symmetric MAC fast-path constraint", "MEDIUM"),
        ("", ""),
        ("Priority-3 gaps (engineering formulas, lower priority)", ""),
        ("  Failure probability P_fail = 1-(1-eta)^E_N", "LOW"),
        ("  KVBytes estimator formula", "LOW"),
        ("  t_gpu roofline formula", "LOW"),
        ("  L_ctx pessimistic bound", "LOW"),
        ("  48/54 boundary site fraction", "LOW"),
        ("  Cubie site 9-tuple q definition", "LOW"),
    ]

    hdr_fill = PatternFill("solid", fgColor="1F4E79")
    red_fill = PatternFill("solid", fgColor="FFD7D7")
    amb_fill = PatternFill("solid", fgColor="FFF3CD")
    grn_fill = PatternFill("solid", fgColor="D6F0D6")

    ws.column_dimensions["A"].width = 60
    ws.column_dimensions["B"].width = 16

    for row_idx, (label, val) in enumerate(summary, 1):
        ca = ws.cell(row=row_idx, column=1, value=label)
        cb = ws.cell(row=row_idx, column=2, value=val)
        ca.font = BODY_FONT
        cb.font = BODY_FONT
        if row_idx == 1:
            ca.fill = hdr_fill; ca.font = HEADER_FONT
            cb.fill = hdr_fill; cb.font = HEADER_FONT
        elif "MISSING" in str(label) or str(val) == "CRITICAL":
            ca.fill = red_fill; cb.fill = red_fill
        elif "Partially" in str(label) or str(val) == "HIGH":
            ca.fill = amb_fill; cb.fill = amb_fill
        elif "Fully covered" in str(label) or str(val) == "LOW":
            ca.fill = grn_fill; cb.fill = grn_fill
        ca.alignment = TOP
        cb.alignment = TOP

def main():
    print(f"Loading TSV ({TSV.name})...")
    rows = load_tsv()
    print(f"  {len(rows)} rows loaded")

    wb = Workbook()
    write_main_sheet(wb, rows)
    write_gaps_only_sheet(wb, rows)
    write_partials_sheet(wb, rows)
    write_summary_sheet(wb, rows)

    # Sheet order
    order = ["Summary", "GAPS_TO_ADD", "PARTIALS_REVIEW", "GapAnalysis"]
    for i, name in enumerate(order):
        if name in wb.sheetnames:
            wb.move_sheet(name, offset=wb.sheetnames.index(name) - i)

    print(f"Saving -> {OUT_XLSX}")
    wb.save(OUT_XLSX)
    size_kb = OUT_XLSX.stat().st_size // 1024
    print(f"Done. {size_kb} KB")

    # Print gap summary to console
    no_rows = [r for r in rows if r.get("in_master_table","").strip() == "NO"]
    partial_rows = [r for r in rows if r.get("in_master_table","").strip() == "PARTIAL"]
    yes_rows = [r for r in rows if r.get("in_master_table","").strip() == "YES"]
    print(f"\nSummary: {len(yes_rows)} YES | {len(partial_rows)} PARTIAL | {len(no_rows)} NO (gaps)")
    print("\nGAPS (NO):")
    for r in no_rows:
        print(f"  [{r.get('type','').strip():12s}] {r.get('whitepaper_ref','').strip()}")

if __name__ == "__main__":
    main()


File created successfully at: C:\Users\NickV\cubie-verification\tools\gap_analysis_to_excel.py

#!/usr/bin/env python3
"""
gap_analysis_to_excel.py
Convert gap_analysis_whitepaper_vs_master_table.tsv to a formatted Excel workbook.
Output: Downloads/cubie_gap_analysis.xlsx
"""

import csv
from pathlib import Path
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter

REPO     = Path(__file__).parent.parent
TSV      = REPO / "gap_analysis_whitepaper_vs_master_table.tsv"
OUT_XLSX = Path("C:/Users/NickV/Downloads/cubie_gap_analysis.xlsx")

# Colour map by in_master_table value
STATUS_COLORS = {
    "NO":      "FFD7D7",   # red   — missing
    "PARTIAL": "FFF3CD",   # amber — partial
    "YES":     "D6F0D6",   # green — covered
}

HEADER_FILL = PatternFill("solid", fgColor="1F4E79")
HEADER_FONT = Font(bold=True, color="FFFFFF", size=10)
BODY_FONT   = Font(size=9)
WRAP        = Alignment(wrap_text=True, vertical="top")
TOP         = Alignment(vertical="top")

COLUMNS = [
    # (tsv_key, display_label, width)
    ("whitepaper_ref",    "Whitepaper Ref",       28),
    ("type",              "Type",                  14),
    ("section",           "Section",               34),
    ("page_approx",       "Page",                   6),
    ("formal_name_guess", "Formal Name Guess",     30),
    ("in_master_table",   "In Master Table",       14),
    ("whitepaper_quote",  "Whitepaper Quote",      60),
    ("notes",             "Notes / Match Details", 60),
]

def load_tsv():
    rows = []
    with open(TSV, encoding="utf-8") as f:
        reader = csv.DictReader(f, delimiter="\t")
        for row in reader:
            rows.append(row)
    return rows

def status_fill(val):
    color = STATUS_COLORS.get(val, "FFFFFF")
    return PatternFill("solid", fgColor=color)

def write_main_sheet(wb, rows):
    ws = wb.active
    ws.title = "GapAnalysis"

    # Header row
    for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
        cell = ws.cell(row=1, column=col_idx, value=label)
        cell.fill = HEADER_FILL
        cell.font = HEADER_FONT
        cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
        ws.column_dimensions[get_column_letter(col_idx)].width = width
    ws.row_dimensions[1].height = 28

    # Data rows
    for row_idx, rec in enumerate(rows, 2):
        status = rec.get("in_master_table", "").strip()
        fill   = status_fill(status)
        for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
            val = rec.get(key, "").strip()
            cell = ws.cell(row=row_idx, column=col_idx, value=val)
            cell.fill = fill
            cell.font = BODY_FONT
            # Wrap long text columns
            if key in ("whitepaper_quote", "notes", "section"):
                cell.alignment = WRAP
            else:
                cell.alignment = TOP
        ws.row_dimensions[row_idx].height = 48

    ws.freeze_panes = "A2"
    ws.auto_filter.ref = ws.dimensions
    ws.sheet_properties.tabColor = "1F4E79"

def write_gaps_only_sheet(wb, rows):
    """Sheet with only NO rows — the actionable gap list."""
    ws = wb.create_sheet("GAPS_TO_ADD")
    ws.sheet_properties.tabColor = "C00000"

    gaps = [r for r in rows if r.get("in_master_table", "").strip() == "NO"]

    for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
        cell = ws.cell(row=1, column=col_idx, value=label)
        cell.fill = HEADER_FILL
        cell.font = HEADER_FONT
        cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
        ws.column_dimensions[get_column_letter(col_idx)].width = width
    ws.row_dimensions[1].height = 28

    for row_idx, rec in enumerate(gaps, 2):
        fill = PatternFill("solid", fgColor="FFD7D7")
        for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
            val = rec.get(key, "").strip()
            cell = ws.cell(row=row_idx, column=col_idx, value=val)
            cell.fill = fill
            cell.font = BODY_FONT
            if key in ("whitepaper_quote", "notes", "section"):
                cell.alignment = WRAP
            else:
                cell.alignment = TOP
        ws.row_dimensions[row_idx].height = 60

    ws.freeze_panes = "A2"
    ws.auto_filter.ref = ws.dimensions

def write_partials_sheet(wb, rows):
    """Sheet with PARTIAL rows — needs review."""
    ws = wb.create_sheet("PARTIALS_REVIEW")
    ws.sheet_properties.tabColor = "C6A800"

    partials = [r for r in rows if r.get("in_master_table", "").strip() == "PARTIAL"]

    for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
        cell = ws.cell(row=1, column=col_idx, value=label)
        cell.fill = HEADER_FILL
        cell.font = HEADER_FONT
        cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
        ws.column_dimensions[get_column_letter(col_idx)].width = width
    ws.row_dimensions[1].height = 28

    for row_idx, rec in enumerate(partials, 2):
        fill = PatternFill("solid", fgColor="FFF3CD")
        for col_idx, (key, label, width) in enumerate(COLUMNS, 1):
            val = rec.get(key, "").strip()
            cell = ws.cell(row=row_idx, column=col_idx, value=val)
            cell.fill = fill
            cell.font = BODY_FONT
            if key in ("whitepaper_quote", "notes", "section"):
                cell.alignment = WRAP
            else:
                cell.alignment = TOP
        ws.row_dimensions[row_idx].height = 60

    ws.freeze_panes = "A2"
    ws.auto_filter.ref = ws.dimensions

def write_summary_sheet(wb, rows):
    ws = wb.create_sheet("Summary")
    ws.sheet_properties.tabColor = "375623"

    no_rows      = [r for r in rows if r.get("in_master_table","").strip() == "NO"]
    partial_rows = [r for r in rows if r.get("in_master_table","").strip() == "PARTIAL"]
    yes_rows     = [r for r in rows if r.get("in_master_table","").strip() == "YES"]

    summary = [
        ("Metric", "Count"),
        ("Total whitepaper refs analysed",  len(rows)),
        ("Fully covered in master table (YES)",  len(yes_rows)),
        ("Partially covered (PARTIAL)",       len(partial_rows)),
        ("MISSING — not in master table (NO)", len(no_rows)),
        ("", ""),
        ("GAPS (NO) by type", ""),
    ]
    type_counts = {}
    for r in no_rows:
        t = r.get("type", "unknown").strip()
        type_counts[t] = type_counts.get(t, 0) + 1
    for t, c in sorted(type_counts.items()):
        summary.append((f"  {t}", c))

    summary += [
        ("", ""),
        ("Priority-1 critical gaps (must add to master table)", ""),
        ("  Cubie V2.1 module (consumed-hash ledger, replay rejection)", "CRITICAL"),
        ("  Definition: Permission Attenuation (Perm/Scope/TTL/Depth constraints)", "HIGH"),
        ("  Proposition: Subagent Containment (authority cannot expand along chain)", "HIGH"),
        ("  Proposition: Head-Shape Mismatch (HeadShapeOK runtime design rule)", "MEDIUM"),
        ("  Extended waste_ok 7-factor conjunction", "MEDIUM"),
        ("", ""),
        ("Priority-2 gaps (v2.5 additions, no formal counterpart yet)", ""),
        ("  adapter_swap_ok definition", "MEDIUM"),
        ("  nvlink_waiter_safe(r,e) definition", "MEDIUM"),
        ("  Symmetric MAC fast-path constraint", "MEDIUM"),
        ("", ""),
        ("Priority-3 gaps (engineering formulas, lower priority)", ""),
        ("  Failure probability P_fail = 1-(1-eta)^E_N", "LOW"),
        ("  KVBytes estimator formula", "LOW"),
        ("  t_gpu roofline formula", "LOW"),
        ("  L_ctx pessimistic bound", "LOW"),
        ("  48/54 boundary site fraction", "LOW"),
        ("  Cubie site 9-tuple q definition", "LOW"),
    ]

    hdr_fill = PatternFill("solid", fgColor="1F4E79")
    red_fill = PatternFill("solid", fgColor="FFD7D7")
    amb_fill = PatternFill("solid", fgColor="FFF3CD")
    grn_fill = PatternFill("solid", fgColor="D6F0D6")

    ws.column_dimensions["A"].width = 60
    ws.column_dimensions["B"].width = 16

    for row_idx, (label, val) in enumerate(summary, 1):
        ca = ws.cell(row=row_idx, column=1, value=label)
        cb = ws.cell(row=row_idx, column=2, value=val)
        ca.font = BODY_FONT
        cb.font = BODY_FONT
        if row_idx == 1:
            ca.fill = hdr_fill; ca.font = HEADER_FONT
            cb.fill = hdr_fill; cb.font = HEADER_FONT
        elif "MISSING" in str(label) or str(val) == "CRITICAL":
            ca.fill = red_fill; cb.fill = red_fill
        elif "Partially" in str(label) or str(val) == "HIGH":
            ca.fill = amb_fill; cb.fill = amb_fill
        elif "Fully covered" in str(label) or str(val) == "LOW":
            ca.fill = grn_fill; cb.fill = grn_fill
        ca.alignment = TOP
        cb.alignment = TOP

def main():
    print(f"Loading TSV ({TSV.name})...")
    rows = load_tsv()
    print(f"  {len(rows)} rows loaded")

    wb = Workbook()
    write_main_sheet(wb, rows)
    write_gaps_only_sheet(wb, rows)
    write_partials_sheet(wb, rows)
    write_summary_sheet(wb, rows)

    # Sheet order
    order = ["Summary", "GAPS_TO_ADD", "PARTIALS_REVIEW", "GapAnalysis"]
    for i, name in enumerate(order):
        if name in wb.sheetnames:
            wb.move_sheet(name, offset=wb.sheetnames.index(name) - i)

    print(f"Saving -> {OUT_XLSX}")
    wb.save(OUT_XLSX)
    size_kb = OUT_XLSX.stat().st_size // 1024
    print(f"Done. {size_kb} KB")

    # Print gap summary to console
    no_rows = [r for r in rows if r.get("in_master_table","").strip() == "NO"]
    partial_rows = [r for r in rows if r.get("in_master_table","").strip() == "PARTIAL"]
    yes_rows = [r for r in rows if r.get("in_master_table","").strip() == "YES"]
    print(f"\nSummary: {len(yes_rows)} YES | {len(partial_rows)} PARTIAL | {len(no_rows)} NO (gaps)")
    print("\nGAPS (NO):")
    for r in no_rows:
        print(f"  [{r.get('type','').strip():12s}] {r.get('whitepaper_ref','').strip()}")

if __name__ == "__main__":
    main()


Bash

cd "C:/Users/NickV/cubie-verification" && python tools/gap_analysis_to_excel.py

Generate the gap analysis Excel file


Loading TSV (gap_analysis_whitepaper_vs_master_table.tsv)...
  51 rows loaded
Saving -> C:\Users\NickV\Downloads\cubie_gap_analysis.xlsx
Done. 23 KB

Summary: 14 YES | 22 PARTIAL | 15 NO (gaps)

GAPS (NO):
  [definition  ] Def:Permission attenuation
  [proposition ] Prop:Subagent containment
  [proposition ] Prop:Head-shape mismatch as a runtime design rule
  [equation    ] Eq:Failure probability P_fail
  [equation    ] Eq:KVBytes formula
  [equation    ] Eq:t_gpu roofline formula
  [equation    ] Eq:HeadShapeOK predicate
  [equation    ] Eq:waste_ok extended conjunction
  [named result (referenced)] Named:Cubie V2.1
  [equation    ] Eq:Cubie site q tuple
  [equation    ] Eq:Boundary site fraction 48/54
  [equation    ] Eq:L_ctx pessimistic bound
  [equation    ] Eq:adapter_swap_ok definition
  [equation    ] Eq:nvlink_waiter_safe definition
  [description ] Eq:Symmetric fast-path constraint


cd "C:/Users/NickV/cubie-verification" && git add gap_analysis_whitepaper_vs_master_table.tsv tools/gap_analysis_to_excel.py && git commit -m "Add whitepaper v2.5 vs master table gap analysis — 15 gaps identified"

Commit the gap analysis files


warning: in the working copy of 'gap_analysis_whitepaper_vs_master_table.tsv', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'tools/gap_analysis_to_excel.py', LF will be replaced by CRLF the next time Git touches it
[master d701523] Add whitepaper v2.5 vs master table gap analysis — 15 gaps identified
 2 files changed, 314 insertions(+)
 create mode 100644 gap_analysis_whitepaper_vs_master_table.tsv
 create mode 100644 tools/gap_analysis_to_excel.py


cd "C:/Users/NickV/cubie-verification" && git push origin master

Push gap analysis to GitHub


To https://github.com/iamdatanick/cubie-math.git
   da73952..d701523  master -> master


`cubie_gap_analysis.xlsx` is in your Downloads folder with 4 sheets. Here's the full gap report:

---

## Gap Analysis: Whitepaper v2.5 vs Master Table

**Totals:** 14 YES (covered) | 22 PARTIAL (concept exists, name differs) | **15 NO (gaps)**

---

### GAPS — Not in Master Table (NO)

| Priority | Ref | Type | Whitepaper Quote | Page |
|----------|-----|------|-----------------|------|
| **CRITICAL** | `Named:Cubie V2.1` | named result | *"Execution physics with consumed-hash ledger — One-time execution leases and replay rejection"* | 5 (Appendix B) |
| **HIGH** | `Def:Permission attenuation` | definition | *"Perm(C_child) ⊆ Perm(C_parent), Scope ≤, TTL ≤, Depth = parent+1"* | §6 |
| **HIGH** | `Prop:Subagent containment` | proposition | *"Delegated authority cannot expand along the agent chain"* | §6 |
| **MEDIUM** | `Prop:Head-shape mismatch` | proposition | *"If HeadShapeOK and declared Q/KV geometry doesn't match compiled runtime, set waste_ok=0"* (whitepaper says: "not yet separately listed") | §7.2 |
| **MEDIUM** | `Eq:waste_ok extended conjunction` | equation | *"waste_ok = roofline_ok AND kv_heads_ok AND q_heads_ok AND adapter_swap_ok AND nvlink_waiter_safe(r,e) AND loop_free AND target_pool_ok"* | §7.2 |
| **MEDIUM** | `Eq:adapter_swap_ok definition` | equation | *"adapter_swap_ok = 1 if LoRA adapter cached or PCIe bandwidth available without NVLink stall"* | §7.2 |
| **MEDIUM** | `Eq:nvlink_waiter_safe(r,e)` | equation | *"=1 when telemetry epoch does not indicate a target-pool waiter signature"* | §7.2 |
| **MEDIUM** | `Eq:HeadShapeOK predicate` | equation | *"HeadShapeOK = 1 if manifest, engine metadata, and runtime profile agree on (L_layers, H_q, H_kv, D_head, b_elem, KV_precision, TP, PP)"* | §7.2 |
| **MEDIUM** | `Eq:Symmetric fast-path constraint` | description | *"Subagent delegation chains must use symmetric chained MACs (Macaroons), not asymmetric nested JWTs — O(1) validation"* | §8.2 |
| LOW | `Eq:Failure probability P_fail` | equation | *"P_fail = 1-(1-eta)^E_N"* | §6.1 |
| LOW | `Eq:KVBytes formula` | equation | *"KVBytes ≈ 2 × L_layers × B × L_ctx × H_kv × D_head × b_elem"* | §7.1 |
| LOW | `Eq:t_gpu roofline formula` | equation | *"t_gpu(r,e) = max(t_compute, t_mem)"* | §7.1 |
| LOW | `Eq:L_ctx pessimistic bound` | equation | *"L_ctx = input_tokens + max_output_tokens"* | §7.1 |
| LOW | `Eq:Cubie site 9-tuple q` | equation | *"q = (f, i, j, γ(f), σ, θ, λ, μ, χ)"* | §4.2 |
| LOW | `Eq:48/54 boundary fraction` | equation | *"48 of 54 oriented sites are non-center boundary sites"* | §4.1 |

---

### Notable PARTIAL gaps (need consolidation)

- **ToR V1.31** — only 2 definition entries in master; the corner-level spoofing separation theorems it's credited with in the whitepaper appear to be missing or mislabeled
- **Def:Seam, Def:Corner, Def:Face, Def:Edge** — scattered across 5+ modules with no single canonical CTCP-chain definition matching the whitepaper's formal `\begin{definition}` blocks
- **Seam product J_e** — whitepaper's 10-factor version (`J_loop` included) is more expansive than the 7-dimensional Ramen model in the master table


continue


cd "C:/Users/NickV/cubie-verification" && tail -20 roadmap/master_theorem_table.csv && echo "---" && head -1 roadmap/master_theorem_table.csv

Check last rows and header of master table


CUB-0697,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,stochastic_handoff_requires_vrf_proof,Theorem,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,193,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0698,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,cached_macrograph_ok_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,214,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0699,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,macrograph_ok_or_percolation_ok_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,217,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0700,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,attested_cached_macrograph_passes,Theorem,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,221,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0701,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,dual_audit_ok_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,242,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0702,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,dual_audit_ok_implies_duality_ok,Theorem,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,247,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0703,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,center_move_ok_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,264,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0704,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,center_move_requires_authority,Theorem,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,268,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0705,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,how_stale_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,296,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0706,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,reclaim_if_how_stale_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,299,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0707,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,stale_how_reclaims,Theorem,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,302,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0708,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,proof_ref_ok_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,340,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0709,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,evidence_record_ok_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,343,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0710,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,grand_fusion_ok_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,348,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0711,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,edge_corner_ok_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,354,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0712,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,Auth_v1_10_b,Definition,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,364,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0713,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,Auth_v1_10_implies_grand_fusion_ok,Theorem,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,375,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0714,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,Auth_v1_10_implies_mode_ok,Theorem,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,384,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0715,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,Auth_v1_10_implies_edge_corner_ok,Theorem,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,395,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
CUB-0716,cubieq_omega_incremental_next_addendum,CubieQ Omega Next Addendum,CubieQ Addenda,15,CUBIEQ_ADDENDUM,Auth_v1_10_implies_evidence_ok,Theorem,cubieq_omega_incremental_next_addendum.v,,34aa72334343d9e7...,,406,0 axioms,VERIFIED_EXACT,YES,Coq,Next increment theorems.
---
master_id,module,deliverable,cluster,cluster_no,version_chain,theorem_name,kind,coq_file,lean_file,coq_sha256,lean_sha256,coq_line,axiom_profile,status,canonical,formal_systems,notes


cd "C:/Users/NickV/cubie-verification" && python -c "
import csv
from pathlib import Path
rows = list(csv.DictReader(open('roadmap/master_theorem_table.csv')))
cluster_nos = sorted(set(int(r['cluster_no']) for r in rows if r['cluster_no'].strip().isdigit()))
print('cluster_nos used:', cluster_nos)
# show cluster labels
seen = set()
for r in rows:
    k = (r['cluster_no'], r['cluster'])
    if k not in seen:
        seen.add(k)
        print(f'  {r[\"cluster_no\"]:>4} | {r[\"cluster\"]}')
"

List all cluster numbers and names in master table


cluster_nos used: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
     7 | Cubie Bridge
    10 | CubieQ Non-Quantum
     9 | Cubie-Omega Integration
    12 | CubieQ Geometric
     8 | Cubie Trust Compiler
    13 | Runtime Trust Compiler
    11 | Theorem Omega
     5 | Ramen Corner Consensus
    14 | Semantic Calculus
     6 | ToR Admission Compiler
     6 | ToR Corner Spoofing
    15 | CubieQ Addenda


Write

#!/usr/bin/env python3
"""
append_whitepaper_gaps.py
Append 17 new rows to master_theorem_table.csv for theorems/definitions
present in whitepaper v2.5 but absent from the master table.

New cluster assignments:
  16 — Cubie V2.1 Execution Physics
  17 — Delegation & Recursion (§6)
  18 — Attention Geometry v2.5 (§7)
  19 — Engineering Physics / Estimators (§7.1)
  20 — Cubie Site Topology (§4)

Status: WHITEPAPER_ONLY — in whitepaper, not yet formally verified in Coq/Lean/Verus.
"""

from pathlib import Path
import csv

REPO = Path(__file__).parent.parent
CSV  = REPO / "roadmap" / "master_theorem_table.csv"

HEADER = [
    "master_id","module","deliverable","cluster","cluster_no","version_chain",
    "theorem_name","kind","coq_file","lean_file","coq_sha256","lean_sha256",
    "coq_line","axiom_profile","status","canonical","formal_systems","notes"
]

NEW_ROWS = [
    # =========================================================
    # CLUSTER 16 — Cubie V2.1 Execution Physics  (3 entries)
    # =========================================================
    {
        "master_id":      "CUB-0717",
        "module":         "CubieTrustCompilerV2_1",
        "deliverable":    "V2.1 Execution Physics",
        "cluster":        "Cubie V2.1 Execution Physics",
        "cluster_no":     "16",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "consumed_hash_ledger",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 Appendix B. Consumed-hash ledger data structure that records hashes of executed requests to prevent replay. Must be formalized in V2.1 module.",
    },
    {
        "master_id":      "CUB-0718",
        "module":         "CubieTrustCompilerV2_1",
        "deliverable":    "V2.1 Execution Physics",
        "cluster":        "Cubie V2.1 Execution Physics",
        "cluster_no":     "16",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "one_time_execution_lease",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 Appendix B. One-time execution lease: a lease token bound to a single request hash; cannot be reused after execution. Extends AdmissionLeaseV1 from V2.0.",
    },
    {
        "master_id":      "CUB-0719",
        "module":         "CubieTrustCompilerV2_1",
        "deliverable":    "V2.1 Execution Physics",
        "cluster":        "Cubie V2.1 Execution Physics",
        "cluster_no":     "16",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "replay_rejection",
        "kind":           "Theorem",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 Appendix B. Theorem: if request_hash is in consumed_hash_ledger then Admit(r,e) = false. Formally: ∀r, consumed(hash(r)) → ¬Admit(r,e). Must be proven in V2.1 module.",
    },

    # =========================================================
    # CLUSTER 17 — Delegation & Recursion §6  (2 entries)
    # =========================================================
    {
        "master_id":      "CUB-0720",
        "module":         "CubieDelegationRecursion_v6",
        "deliverable":    "V2.5 Delegation & Recursion",
        "cluster":        "Delegation & Recursion",
        "cluster_no":     "17",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "permission_attenuation",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §6 \\begin{definition}[Permission attenuation]. C_child valid only if: Perm(C_child) ⊆ Perm(C_parent), Scope(C_child) ≤ Scope(C_parent), TTL(C_child) ≤ TTL(C_parent), Depth(C_child) = Depth(C_parent)+1, depth ≤ D_max. No formal Coq/Lean counterpart exists.",
    },
    {
        "master_id":      "CUB-0721",
        "module":         "CubieDelegationRecursion_v6",
        "deliverable":    "V2.5 Delegation & Recursion",
        "cluster":        "Delegation & Recursion",
        "cluster_no":     "17",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "subagent_containment",
        "kind":           "Proposition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §6 \\begin{proposition}[Subagent containment]. If every child Cubie is created by permission_attenuation and every subagent action requires a valid seam-string from root to child, then delegated authority cannot expand along the agent chain. Proof: transitivity of subset inclusion. No formal counterpart.",
    },

    # =========================================================
    # CLUSTER 18 — Attention Geometry v2.5 §7  (5 entries)
    # =========================================================
    {
        "master_id":      "CUB-0722",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "HeadShapeOK",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2. HeadShapeOK = 1 iff declared model manifest, compiled engine metadata, and runtime profile agree on (L_layers, H_q, H_kv, D_head, b_elem, KV_precision, TP, PP). 8-tuple agreement predicate. New in v2.5.",
    },
    {
        "master_id":      "CUB-0723",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "waste_ok_decomposition",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2. waste_ok = roofline_ok ∧ kv_heads_ok ∧ q_heads_ok ∧ adapter_swap_ok ∧ nvlink_waiter_safe(r,e) ∧ loop_free ∧ target_pool_ok. V1.40/V2.0 treat waste_ok as atomic. This 7-factor decomposition is new in v2.5.",
    },
    {
        "master_id":      "CUB-0724",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "adapter_swap_ok",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2. adapter_swap_ok = 1 iff requested LoRA adapter is already cached or PCIe bandwidth has capacity to swap without NVLink stall. New in v2.5 change notes.",
    },
    {
        "master_id":      "CUB-0725",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "nvlink_waiter_safe",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2. nvlink_waiter_safe(r,e) = 1 when telemetry epoch does not indicate a target-pool waiter signature (zero SM activity with allocated VRAM on TP peer). New in v2.5.",
    },
    {
        "master_id":      "CUB-0726",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "head_shape_mismatch_implies_waste_zero",
        "kind":           "Proposition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2 \\begin{proposition}[Head-shape mismatch as a runtime design rule]. If request requires HeadShapeOK and declared Q/KV attention geometry does not match compiled runtime geometry then waste_ok=0. Whitepaper explicitly notes: 'not yet separately listed theorem'. Backed by V1.40 gpu_failure_implies_denial (CUB-0010).",
    },

    # =========================================================
    # CLUSTER 18 — Architecture §8  (1 entry, same cluster)
    # =========================================================
    {
        "master_id":      "CUB-0727",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Architecture",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "symmetric_mac_fast_path_constraint",
        "kind":           "Theorem",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §8.2. Subagent delegation chains must not use asymmetric nested JWTs. Must use symmetric chained MACs (Macaroons) allowing O(1) validation vs O(depth) for asymmetric. New hard requirement in v2.5.",
    },

    # =========================================================
    # CLUSTER 19 — Engineering Physics / Estimators §7.1  (4 entries)
    # =========================================================
    {
        "master_id":      "CUB-0728",
        "module":         "CubieEngineeringPhysics_v7",
        "deliverable":    "V2.5 Engineering Physics",
        "cluster":        "Engineering Physics",
        "cluster_no":     "19",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "kv_cache_byte_estimator",
        "kind":           "Engineering_Formula",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.1. KVBytes ≈ 2 × L_layers × B × L_ctx × H_kv × D_head × b_elem. KV-cache byte estimator used in waste_ok / budget gate. Should be formalized as a Definition with arithmetic bound proof.",
    },
    {
        "master_id":      "CUB-0729",
        "module":         "CubieEngineeringPhysics_v7",
        "deliverable":    "V2.5 Engineering Physics",
        "cluster":        "Engineering Physics",
        "cluster_no":     "19",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "roofline_admission_time",
        "kind":           "Engineering_Formula",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.1. t_gpu(r,e) = max(t_compute(r,e), t_mem(r,e)). Roofline-inspired admission time estimator used in time_ok seam. Should be formalized as a Definition.",
    },
    {
        "master_id":      "CUB-0730",
        "module":         "CubieEngineeringPhysics_v7",
        "deliverable":    "V2.5 Engineering Physics",
        "cluster":        "Engineering Physics",
        "cluster_no":     "19",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "l_ctx_pessimistic_bound",
        "kind":           "Engineering_Formula",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.1. L_ctx = input_tokens + max_output_tokens (pessimistic bound for hot-path admission). Policy decision to use max_output rather than expected_output to avoid under-reservation.",
    },
    {
        "master_id":      "CUB-0731",
        "module":         "CubieEngineeringPhysics_v7",
        "deliverable":    "V2.5 Engineering Physics",
        "cluster":        "Engineering Physics",
        "cluster_no":     "19",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "failure_probability_bound",
        "kind":           "Lemma",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §6.1. P_fail = 1-(1-eta)^E_N where eta is per-node failure rate and E_N is number of nodes at depth N. Failure probability bound for holographic routing. Needs formal treatment.",
    },

    # =========================================================
    # CLUSTER 20 — Cubie Site Topology §4  (2 entries)
    # =========================================================
    {
        "master_id":      "CUB-0732",
        "module":         "CubieSiteTopology_v4",
        "deliverable":    "V2.5 Site Topology",
        "cluster":        "Cubie Site Topology",
        "cluster_no":     "20",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "cubie_site_tuple",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §4.2. q = (f, i, j, γ(f), σ, θ, λ, μ, χ): face index, local row/col address (i,j), color γ(f), seam-string status σ, frame θ, lineage λ, incidence μ, child-root χ. 9-tuple canonical site representation. No formal definition in master table.",
    },
    {
        "master_id":      "CUB-0733",
        "module":         "CubieSiteTopology_v4",
        "deliverable":    "V2.5 Site Topology",
        "cluster":        "Cubie Site Topology",
        "cluster_no":     "20",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "boundary_site_fraction",
        "kind":           "Lemma",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §4.1. 48 of 54 oriented facelets (88.9%) are non-center boundary sites. Lemma: |boundary_sites| = 48, |center_sites| = 6, |S| = 54. Arithmetic fact that should be formally proven.",
    },
]

def main():
    # Read existing rows
    with open(CSV, encoding="utf-8", newline="") as f:
        reader = csv.DictReader(f)
        existing = list(reader)

    # Check no ID collision
    existing_ids = {r["master_id"] for r in existing}
    for row in NEW_ROWS:
        assert row["master_id"] not in existing_ids, f"Duplicate ID: {row['master_id']}"

    # Append
    with open(CSV, "a", encoding="utf-8", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=HEADER)
        for row in NEW_ROWS:
            writer.writerow(row)

    print(f"Appended {len(NEW_ROWS)} rows to {CSV.name}")
    print(f"New total: {len(existing) + len(NEW_ROWS)} rows (was {len(existing)})")
    for r in NEW_ROWS:
        print(f"  {r['master_id']} | {r['cluster']:32s} | {r['theorem_name']}")

if __name__ == "__main__":
    main()


File created successfully at: C:\Users\NickV\cubie-verification\tools\append_whitepaper_gaps.py

#!/usr/bin/env python3
"""
append_whitepaper_gaps.py
Append 17 new rows to master_theorem_table.csv for theorems/definitions
present in whitepaper v2.5 but absent from the master table.

New cluster assignments:
  16 — Cubie V2.1 Execution Physics
  17 — Delegation & Recursion (§6)
  18 — Attention Geometry v2.5 (§7)
  19 — Engineering Physics / Estimators (§7.1)
  20 — Cubie Site Topology (§4)

Status: WHITEPAPER_ONLY — in whitepaper, not yet formally verified in Coq/Lean/Verus.
"""

from pathlib import Path
import csv

REPO = Path(__file__).parent.parent
CSV  = REPO / "roadmap" / "master_theorem_table.csv"

HEADER = [
    "master_id","module","deliverable","cluster","cluster_no","version_chain",
    "theorem_name","kind","coq_file","lean_file","coq_sha256","lean_sha256",
    "coq_line","axiom_profile","status","canonical","formal_systems","notes"
]

NEW_ROWS = [
    # =========================================================
    # CLUSTER 16 — Cubie V2.1 Execution Physics  (3 entries)
    # =========================================================
    {
        "master_id":      "CUB-0717",
        "module":         "CubieTrustCompilerV2_1",
        "deliverable":    "V2.1 Execution Physics",
        "cluster":        "Cubie V2.1 Execution Physics",
        "cluster_no":     "16",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "consumed_hash_ledger",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 Appendix B. Consumed-hash ledger data structure that records hashes of executed requests to prevent replay. Must be formalized in V2.1 module.",
    },
    {
        "master_id":      "CUB-0718",
        "module":         "CubieTrustCompilerV2_1",
        "deliverable":    "V2.1 Execution Physics",
        "cluster":        "Cubie V2.1 Execution Physics",
        "cluster_no":     "16",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "one_time_execution_lease",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 Appendix B. One-time execution lease: a lease token bound to a single request hash; cannot be reused after execution. Extends AdmissionLeaseV1 from V2.0.",
    },
    {
        "master_id":      "CUB-0719",
        "module":         "CubieTrustCompilerV2_1",
        "deliverable":    "V2.1 Execution Physics",
        "cluster":        "Cubie V2.1 Execution Physics",
        "cluster_no":     "16",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "replay_rejection",
        "kind":           "Theorem",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 Appendix B. Theorem: if request_hash is in consumed_hash_ledger then Admit(r,e) = false. Formally: ∀r, consumed(hash(r)) → ¬Admit(r,e). Must be proven in V2.1 module.",
    },

    # =========================================================
    # CLUSTER 17 — Delegation & Recursion §6  (2 entries)
    # =========================================================
    {
        "master_id":      "CUB-0720",
        "module":         "CubieDelegationRecursion_v6",
        "deliverable":    "V2.5 Delegation & Recursion",
        "cluster":        "Delegation & Recursion",
        "cluster_no":     "17",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "permission_attenuation",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §6 \\begin{definition}[Permission attenuation]. C_child valid only if: Perm(C_child) ⊆ Perm(C_parent), Scope(C_child) ≤ Scope(C_parent), TTL(C_child) ≤ TTL(C_parent), Depth(C_child) = Depth(C_parent)+1, depth ≤ D_max. No formal Coq/Lean counterpart exists.",
    },
    {
        "master_id":      "CUB-0721",
        "module":         "CubieDelegationRecursion_v6",
        "deliverable":    "V2.5 Delegation & Recursion",
        "cluster":        "Delegation & Recursion",
        "cluster_no":     "17",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "subagent_containment",
        "kind":           "Proposition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §6 \\begin{proposition}[Subagent containment]. If every child Cubie is created by permission_attenuation and every subagent action requires a valid seam-string from root to child, then delegated authority cannot expand along the agent chain. Proof: transitivity of subset inclusion. No formal counterpart.",
    },

    # =========================================================
    # CLUSTER 18 — Attention Geometry v2.5 §7  (5 entries)
    # =========================================================
    {
        "master_id":      "CUB-0722",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "HeadShapeOK",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2. HeadShapeOK = 1 iff declared model manifest, compiled engine metadata, and runtime profile agree on (L_layers, H_q, H_kv, D_head, b_elem, KV_precision, TP, PP). 8-tuple agreement predicate. New in v2.5.",
    },
    {
        "master_id":      "CUB-0723",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "waste_ok_decomposition",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2. waste_ok = roofline_ok ∧ kv_heads_ok ∧ q_heads_ok ∧ adapter_swap_ok ∧ nvlink_waiter_safe(r,e) ∧ loop_free ∧ target_pool_ok. V1.40/V2.0 treat waste_ok as atomic. This 7-factor decomposition is new in v2.5.",
    },
    {
        "master_id":      "CUB-0724",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "adapter_swap_ok",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2. adapter_swap_ok = 1 iff requested LoRA adapter is already cached or PCIe bandwidth has capacity to swap without NVLink stall. New in v2.5 change notes.",
    },
    {
        "master_id":      "CUB-0725",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "nvlink_waiter_safe",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2. nvlink_waiter_safe(r,e) = 1 when telemetry epoch does not indicate a target-pool waiter signature (zero SM activity with allocated VRAM on TP peer). New in v2.5.",
    },
    {
        "master_id":      "CUB-0726",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Attention Geometry",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "head_shape_mismatch_implies_waste_zero",
        "kind":           "Proposition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.2 \\begin{proposition}[Head-shape mismatch as a runtime design rule]. If request requires HeadShapeOK and declared Q/KV attention geometry does not match compiled runtime geometry then waste_ok=0. Whitepaper explicitly notes: 'not yet separately listed theorem'. Backed by V1.40 gpu_failure_implies_denial (CUB-0010).",
    },

    # =========================================================
    # CLUSTER 18 — Architecture §8  (1 entry, same cluster)
    # =========================================================
    {
        "master_id":      "CUB-0727",
        "module":         "CubieAttentionGeometry_v7",
        "deliverable":    "V2.5 Architecture",
        "cluster":        "Attention Geometry v2.5",
        "cluster_no":     "18",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "symmetric_mac_fast_path_constraint",
        "kind":           "Theorem",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §8.2. Subagent delegation chains must not use asymmetric nested JWTs. Must use symmetric chained MACs (Macaroons) allowing O(1) validation vs O(depth) for asymmetric. New hard requirement in v2.5.",
    },

    # =========================================================
    # CLUSTER 19 — Engineering Physics / Estimators §7.1  (4 entries)
    # =========================================================
    {
        "master_id":      "CUB-0728",
        "module":         "CubieEngineeringPhysics_v7",
        "deliverable":    "V2.5 Engineering Physics",
        "cluster":        "Engineering Physics",
        "cluster_no":     "19",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "kv_cache_byte_estimator",
        "kind":           "Engineering_Formula",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.1. KVBytes ≈ 2 × L_layers × B × L_ctx × H_kv × D_head × b_elem. KV-cache byte estimator used in waste_ok / budget gate. Should be formalized as a Definition with arithmetic bound proof.",
    },
    {
        "master_id":      "CUB-0729",
        "module":         "CubieEngineeringPhysics_v7",
        "deliverable":    "V2.5 Engineering Physics",
        "cluster":        "Engineering Physics",
        "cluster_no":     "19",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "roofline_admission_time",
        "kind":           "Engineering_Formula",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.1. t_gpu(r,e) = max(t_compute(r,e), t_mem(r,e)). Roofline-inspired admission time estimator used in time_ok seam. Should be formalized as a Definition.",
    },
    {
        "master_id":      "CUB-0730",
        "module":         "CubieEngineeringPhysics_v7",
        "deliverable":    "V2.5 Engineering Physics",
        "cluster":        "Engineering Physics",
        "cluster_no":     "19",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "l_ctx_pessimistic_bound",
        "kind":           "Engineering_Formula",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §7.1. L_ctx = input_tokens + max_output_tokens (pessimistic bound for hot-path admission). Policy decision to use max_output rather than expected_output to avoid under-reservation.",
    },
    {
        "master_id":      "CUB-0731",
        "module":         "CubieEngineeringPhysics_v7",
        "deliverable":    "V2.5 Engineering Physics",
        "cluster":        "Engineering Physics",
        "cluster_no":     "19",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "failure_probability_bound",
        "kind":           "Lemma",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §6.1. P_fail = 1-(1-eta)^E_N where eta is per-node failure rate and E_N is number of nodes at depth N. Failure probability bound for holographic routing. Needs formal treatment.",
    },

    # =========================================================
    # CLUSTER 20 — Cubie Site Topology §4  (2 entries)
    # =========================================================
    {
        "master_id":      "CUB-0732",
        "module":         "CubieSiteTopology_v4",
        "deliverable":    "V2.5 Site Topology",
        "cluster":        "Cubie Site Topology",
        "cluster_no":     "20",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "cubie_site_tuple",
        "kind":           "Definition",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §4.2. q = (f, i, j, γ(f), σ, θ, λ, μ, χ): face index, local row/col address (i,j), color γ(f), seam-string status σ, frame θ, lineage λ, incidence μ, child-root χ. 9-tuple canonical site representation. No formal definition in master table.",
    },
    {
        "master_id":      "CUB-0733",
        "module":         "CubieSiteTopology_v4",
        "deliverable":    "V2.5 Site Topology",
        "cluster":        "Cubie Site Topology",
        "cluster_no":     "20",
        "version_chain":  "CTCP_CHAIN",
        "theorem_name":   "boundary_site_fraction",
        "kind":           "Lemma",
        "coq_file":       "",
        "lean_file":      "",
        "coq_sha256":     "",
        "lean_sha256":    "",
        "coq_line":       "",
        "axiom_profile":  "PENDING",
        "status":         "WHITEPAPER_ONLY",
        "canonical":      "PENDING",
        "formal_systems": "PENDING",
        "notes":          "Whitepaper v2.5 §4.1. 48 of 54 oriented facelets (88.9%) are non-center boundary sites. Lemma: |boundary_sites| = 48, |center_sites| = 6, |S| = 54. Arithmetic fact that should be formally proven.",
    },
]

def main():
    # Read existing rows
    with open(CSV, encoding="utf-8", newline="") as f:
        reader = csv.DictReader(f)
        existing = list(reader)

    # Check no ID collision
    existing_ids = {r["master_id"] for r in existing}
    for row in NEW_ROWS:
        assert row["master_id"] not in existing_ids, f"Duplicate ID: {row['master_id']}"

    # Append
    with open(CSV, "a", encoding="utf-8", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=HEADER)
        for row in NEW_ROWS:
            writer.writerow(row)

    print(f"Appended {len(NEW_ROWS)} rows to {CSV.name}")
    print(f"New total: {len(existing) + len(NEW_ROWS)} rows (was {len(existing)})")
    for r in NEW_ROWS:
        print(f"  {r['master_id']} | {r['cluster']:32s} | {r['theorem_name']}")

if __name__ == "__main__":
    main()


Bash

cd "C:/Users/NickV/cubie-verification" && python tools/append_whitepaper_gaps.py

Append 17 gap rows to master theorem table


Appended 17 rows to master_theorem_table.csv
New total: 733 rows (was 716)
  CUB-0717 | Cubie V2.1 Execution Physics     | consumed_hash_ledger
  CUB-0718 | Cubie V2.1 Execution Physics     | one_time_execution_lease
  CUB-0719 | Cubie V2.1 Execution Physics     | replay_rejection
  CUB-0720 | Delegation & Recursion           | permission_attenuation
  CUB-0721 | Delegation & Recursion           | subagent_containment
  CUB-0722 | Attention Geometry v2.5          | HeadShapeOK
  CUB-0723 | Attention Geometry v2.5          | waste_ok_decomposition
  CUB-0724 | Attention Geometry v2.5          | adapter_swap_ok
  CUB-0725 | Attention Geometry v2.5          | nvlink_waiter_safe
  CUB-0726 | Attention Geometry v2.5          | head_shape_mismatch_implies_waste_zero
  CUB-0727 | Attention Geometry v2.5          | symmetric_mac_fast_path_constraint
  CUB-0728 | Engineering Physics              | kv_cache_byte_estimator
  CUB-0729 | Engineering Physics              | roofline_admission_time
  CUB-0730 | Engineering Physics              | l_ctx_pessimistic_bound
  CUB-0731 | Engineering Physics              | failure_probability_bound
  CUB-0732 | Cubie Site Topology              | cubie_site_tuple
  CUB-0733 | Cubie Site Topology              | boundary_site_fraction


Good. Now rebuild the JSONL and update the Excel spreadsheet:


cd "C:/Users/NickV/cubie-verification" && python tools/build_full_jsonl.py

Rebuild the full JSONL with new rows


Loading Coq sources...
  30 Coq files
Loading Lean sources...
  29 Lean files
Loading master theorem table (716 formal rows)...
  733 rows
Loading predicate scaffold (128 rows)...
  128 rows
Extracting Verus proof functions...
  251 Verus proof functions
Loading roadmap obligations (203 rows)...
  203 rows

Total records: 1315
Written: C:\Users\NickV\cubie-verification\roadmap\cubie_full_proof_stack.jsonl
Size: 1,747 KB  |  1,315 records


cd "C:/Users/NickV/cubie-verification" && python tools/load_jsonl_to_excel.py

Rebuild the master Excel with updated JSONL


Loading JSONL (cubie_full_proof_stack.jsonl)...
  1,315 records loaded
Opening source workbook (cubie_theorem_roadmap_full.xlsx)...
Writing ProofStack sheet (all records)...
Writing MasterTheorems sheet...
  733 rows
Writing VerusProofs sheet...
  251 rows
Writing Predicates sheet...
  128 rows
Writing RoadmapObligs sheet...
  203 rows

Saving -> C:\Users\NickV\Downloads\cubie_master_proof_stack.xlsx
Done. 0.5 MB


cd "C:/Users/NickV/cubie-verification" && git add roadmap/master_theorem_table.csv roadmap/cubie_full_proof_stack.jsonl tools/append_whitepaper_gaps.py && git commit -m "Add 17 whitepaper v2.5 gap entries to master table (CUB-0717 to CUB-0733)

New clusters:
  16 — Cubie V2.1 Execution Physics (3: consumed_hash_ledger, one_time_execution_lease, replay_rejection)
  17 — Delegation & Recursion §6 (2: permission_attenuation, subagent_containment)
  18 — Attention Geometry v2.5 §7 (6: HeadShapeOK, waste_ok_decomposition, adapter_swap_ok, nvlink_waiter_safe, head_shape_mismatch_implies_waste_zero, symmetric_mac_fast_path_constraint)
  19 — Engineering Physics §7.1 (4: kv_cache_byte_estimator, roofline_admission_time, l_ctx_pessimistic_bound, failure_probability_bound)
  20 — Cubie Site Topology §4 (2: cubie_site_tuple, boundary_site_fraction)

Status: WHITEPAPER_ONLY — present in whitepaper v2.5, not yet formally verified.
Master table: 716 -> 733 rows. JSONL: 1298 -> 1315 records." && git push origin master

Commit and push all gap analysis additions


warning: in the working copy of 'tools/append_whitepaper_gaps.py', LF will be replaced by CRLF the next time Git touches it
[master 01d41d3] Add 17 whitepaper v2.5 gap entries to master table (CUB-0717 to CUB-0733)
 3 files changed, 454 insertions(+)
 create mode 100644 tools/append_whitepaper_gaps.py
To https://github.com/iamdatanick/cubie-math.git
   d701523..01d41d3  master -> master


Done. Here's what was done:

**17 new rows added** (CUB-0717 to CUB-0733), all tagged `WHITEPAPER_ONLY` — in the paper, not yet formally verified:

| Cluster | Module | Entries |
|---------|--------|---------|
| **16** — Cubie V2.1 Execution Physics | `CubieTrustCompilerV2_1` | `consumed_hash_ledger`, `one_time_execution_lease`, `replay_rejection` |
| **17** — Delegation & Recursion | `CubieDelegationRecursion_v6` | `permission_attenuation`, `subagent_containment` |
| **18** — Attention Geometry v2.5 | `CubieAttentionGeometry_v7` | `HeadShapeOK`, `waste_ok_decomposition`, `adapter_swap_ok`, `nvlink_waiter_safe`, `head_shape_mismatch_implies_waste_zero`, `symmetric_mac_fast_path_constraint` |
| **19** — Engineering Physics | `CubieEngineeringPhysics_v7` | `kv_cache_byte_estimator`, `roofline_admission_time`, `l_ctx_pessimistic_bound`, `failure_probability_bound` |
| **20** — Cubie Site Topology | `CubieSiteTopology_v4` | `cubie_site_tuple`, `boundary_site_fraction` |

**Updated artifacts:**
- `roadmap/master_theorem_table.csv` — 716 → **733 rows**
- `roadmap/cubie_full_proof_stack.jsonl` — 1,298 → **1,315 records**
- `Downloads/cubie_master_proof_stack.xlsx` — MasterTheorems sheet now shows 733 rows with the new `WHITEPAPER_ONLY` status visible in the Status column
- `Downloads/cubie_gap_analysis.xlsx` — gap analysis reference (15 NO gaps, now all tracked)

The next step would be to write Coq/Lean proofs for the CRITICAL and HIGH priority gaps (V2.1 module, permission_attenuation, subagent_containment) to move them from `WHITEPAPER_ONLY` to `VERIFIED_EXACT`.


please do thay following same prior process


ls "C:/Users/NickV/cubie-verification/coq/" | head -20 && echo "---" && ls "C:/Users/NickV/cubie-verification/lean/" | head -20

List existing Coq and Lean files


CubieBridgeV1_40.v
CubieNonQuantum_v1_10.v
CubieOmegaBridgeV2_3.v
CubieOmegaStage2V2_3.v
CubieQApex.v
CubieQGeometric.v
CubieQuantumConsent.v
CubieQv14.v
CubieTrustCompilerV1_50.v
CubieTrustCompilerV2_0.v
CubieTrustCompilerV2_0_PerPredicate.v
OAI_cubie_trust_compiler_theorems.v
OmegaEight.v
OmegaSeven.v
RamenCornerConsensusV1191.v
RamenCornerConsensusV1192.v
RamenCornerConsensus_v1_19_addon.v
Ramen_v1_17_1.v
Ramen_v1_18.v
Ramen_v1_19.v
---
CubieBridgeV1_40.lean
CubieNonQuantum_v1_10.lean
CubieOmegaBridgeV2_3.lean
CubieOmegaStage2V2_3.lean
CubieQApex.lean
CubieQGeometric.lean
CubieQuantumConsent.lean
CubieQv14.lean
CubieTrustCompilerV1_50.lean
CubieTrustCompilerV2_0.lean
CubieTrustCompilerV2_0_PerPredicate.lean
OAI_Cubie_TrustCompiler_Theorems.lean
OmegaEight.lean
OmegaSeven.lean
RamenCornerConsensusV1191.lean
RamenCornerConsensusV1192.lean
RamenCornerConsensusV1193.lean
RamenCornerConsensus_v1_19_addon.lean
Ramen_v1_17_1.lean
Ramen_v1_18.lean


1	Definition face_pass (f : CubieFace) : bool :=
2	Record CubieRequest := {
3	}.
4	Definition GpuCornerPass (r : CubieRequest) : bool :=
5	Definition DeploymentCornerPass (r : CubieRequest) : bool :=
6	Record EpochCache := {
7	}.
8	Definition policy_fresh (e : EpochCache) : bool :=
9	Definition telemetry_fresh (e : EpochCache) : bool :=
10	Definition Admit (r : CubieRequest) (e : EpochCache) : bool :=
11	(* ============================================================================== *)
12	(* 2. T2: FACE-LOCALIZED DENIAL (6 theorems) *)
13	(* ============================================================================== *)
14	Theorem face_localized_denial_identity : forall r e,
15	Proof.
16	intros r e H. unfold Admit, DeploymentCornerPass.
17	rewrite H.
18	destruct (GpuCornerPass r), (face_pass (lineage r)), (face_pass (policy r)),
19	Qed.
20	Theorem face_localized_denial_lineage : forall r e,
21	Proof.
22	intros r e H. unfold Admit, DeploymentCornerPass.
23	rewrite H.
24	destruct (GpuCornerPass r), (face_pass (identity r)), (face_pass (policy r)),
25	Qed.
26	Theorem face_localized_denial_runtime : forall r e,
27	Proof.
28	intros r e H. unfold Admit, GpuCornerPass.
29	rewrite H.
30	destruct (DeploymentCornerPass r), (face_pass (context r)), (face_pass (outcome r)),
31	Qed.
32	Theorem face_localized_denial_context : forall r e,
33	Proof.
34	intros r e H. unfold Admit, GpuCornerPass.
35	rewrite H.
36	destruct (DeploymentCornerPass r), (face_pass (runtime r)), (face_pass (outcome r)),
37	Qed.
38	Theorem face_localized_denial_policy : forall r e,
39	Proof.
40	intros r e H. unfold Admit, DeploymentCornerPass.
41	rewrite H.
42	destruct (GpuCornerPass r), (face_pass (identity r)), (face_pass (lineage r)),
43	Qed.
44	Theorem face_localized_denial_outcome : forall r e,
45	Proof.
46	intros r e H. unfold Admit, GpuCornerPass.
47	rewrite H.
48	destruct (DeploymentCornerPass r), (face_pass (context r)), (face_pass (runtime r)),
49	Qed.
50	(* ============================================================================== *)
51	(* 3. T4: ADMIT IMPLIES FACE PASS (6 theorems, converse direction) *)
52	(* ============================================================================== *)
53	Theorem admit_implies_identity_pass : forall r e,
54	Proof.
55	intros r e H.
56	destruct (face_pass (identity r)) eqn:E; [reflexivity | ].
57	pose proof (face_localized_denial_identity r e E).
58	rewrite H in H0. discriminate.
59	Qed.
60	Theorem admit_implies_lineage_pass : forall r e,
61	Proof.
62	intros r e H.
63	destruct (face_pass (lineage r)) eqn:E; [reflexivity | ].
64	pose proof (face_localized_denial_lineage r e E).
65	rewrite H in H0. discriminate.
66	Qed.
67	Theorem admit_implies_runtime_pass : forall r e,
68	Proof.
69	intros r e H.
70	destruct (face_pass (runtime r)) eqn:E; [reflexivity | ].
71	pose proof (face_localized_denial_runtime r e E).
72	rewrite H in H0. discriminate.
73	Qed.
74	Theorem admit_implies_context_pass : forall r e,
75	Proof.
76	intros r e H.
77	destruct (face_pass (context r)) eqn:E; [reflexivity | ].
78	pose proof (face_localized_denial_context r e E).
79	rewrite H in H0. discriminate.
80	Qed.

Definition face_pass (f : CubieFace) : bool :=
Record CubieRequest := {
}.
Definition GpuCornerPass (r : CubieRequest) : bool :=
Definition DeploymentCornerPass (r : CubieRequest) : bool :=
Record EpochCache := {
}.
Definition policy_fresh (e : EpochCache) : bool :=
Definition telemetry_fresh (e : EpochCache) : bool :=
Definition Admit (r : CubieRequest) (e : EpochCache) : bool :=
(* ============================================================================== *)
(* 2. T2: FACE-LOCALIZED DENIAL (6 theorems) *)
(* ============================================================================== *)
Theorem face_localized_denial_identity : forall r e,
Proof.
intros r e H. unfold Admit, DeploymentCornerPass.
rewrite H.
destruct (GpuCornerPass r), (face_pass (lineage r)), (face_pass (policy r)),
Qed.
Theorem face_localized_denial_lineage : forall r e,
Proof.
intros r e H. unfold Admit, DeploymentCornerPass.
rewrite H.
destruct (GpuCornerPass r), (face_pass (identity r)), (face_pass (policy r)),
Qed.
Theorem face_localized_denial_runtime : forall r e,
Proof.
intros r e H. unfold Admit, GpuCornerPass.
rewrite H.
destruct (DeploymentCornerPass r), (face_pass (context r)), (face_pass (outcome r)),
Qed.
Theorem face_localized_denial_context : forall r e,
Proof.
intros r e H. unfold Admit, GpuCornerPass.
rewrite H.
destruct (DeploymentCornerPass r), (face_pass (runtime r)), (face_pass (outcome r)),
Qed.
Theorem face_localized_denial_policy : forall r e,
Proof.
intros r e H. unfold Admit, DeploymentCornerPass.
rewrite H.
destruct (GpuCornerPass r), (face_pass (identity r)), (face_pass (lineage r)),
Qed.
Theorem face_localized_denial_outcome : forall r e,
Proof.
intros r e H. unfold Admit, GpuCornerPass.
rewrite H.
destruct (DeploymentCornerPass r), (face_pass (context r)), (face_pass (runtime r)),
Qed.
(* ============================================================================== *)
(* 3. T4: ADMIT IMPLIES FACE PASS (6 theorems, converse direction) *)
(* ============================================================================== *)
Theorem admit_implies_identity_pass : forall r e,
Proof.
intros r e H.
destruct (face_pass (identity r)) eqn:E; [reflexivity | ].
pose proof (face_localized_denial_identity r e E).
rewrite H in H0. discriminate.
Qed.
Theorem admit_implies_lineage_pass : forall r e,
Proof.
intros r e H.
destruct (face_pass (lineage r)) eqn:E; [reflexivity | ].
pose proof (face_localized_denial_lineage r e E).
rewrite H in H0. discriminate.
Qed.
Theorem admit_implies_runtime_pass : forall r e,
Proof.
intros r e H.
destruct (face_pass (runtime r)) eqn:E; [reflexivity | ].
pose proof (face_localized_denial_runtime r e E).
rewrite H in H0. discriminate.
Qed.
Theorem admit_implies_context_pass : forall r e,
Proof.
intros r e H.
destruct (face_pass (context r)) eqn:E; [reflexivity | ].
pose proof (face_localized_denial_context r e E).
rewrite H in H0. discriminate.
Qed.


1	def face_pass (f : CubieFace) : Bool :=
2	structure CubieRequest where
3	def GpuCornerPass (r : CubieRequest) : Bool :=
4	def DeploymentCornerPass (r : CubieRequest) : Bool :=
5	structure EpochCache where
6	def policy_fresh (e : EpochCache) : Bool :=
7	def telemetry_fresh (e : EpochCache) : Bool :=
8	def Admit (r : CubieRequest) (e : EpochCache) : Bool :=
9	-- ==============================================================================
10	-- 2. T2: FACE-LOCALIZED DENIAL (6 theorems)
11	-- ==============================================================================
12	theorem face_localized_denial_identity (r : CubieRequest) (e : EpochCache) :
13	intro h
14	cases GpuCornerPass r <;> cases face_pass r.lineage <;> cases face_pass r.policy <;>
15	cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
16	theorem face_localized_denial_lineage (r : CubieRequest) (e : EpochCache) :
17	intro h
18	cases GpuCornerPass r <;> cases face_pass r.identity <;> cases face_pass r.policy <;>
19	cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
20	theorem face_localized_denial_runtime (r : CubieRequest) (e : EpochCache) :
21	intro h
22	cases DeploymentCornerPass r <;> cases face_pass r.context <;> cases face_pass r.outcome <;>
23	cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
24	theorem face_localized_denial_context (r : CubieRequest) (e : EpochCache) :
25	intro h
26	cases DeploymentCornerPass r <;> cases face_pass r.runtime <;> cases face_pass r.outcome <;>
27	cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
28	theorem face_localized_denial_policy (r : CubieRequest) (e : EpochCache) :
29	intro h
30	cases GpuCornerPass r <;> cases face_pass r.identity <;> cases face_pass r.lineage <;>
31	cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
32	theorem face_localized_denial_outcome (r : CubieRequest) (e : EpochCache) :
33	intro h
34	cases DeploymentCornerPass r <;> cases face_pass r.context <;> cases face_pass r.runtime <;>
35	cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
36	-- ==============================================================================
37	-- 3. T4: ADMIT IMPLIES FACE PASS (6 theorems, contrapositive of T2)
38	-- ==============================================================================
39	theorem admit_implies_identity_pass (r : CubieRequest) (e : EpochCache) :
40	intro h
41	cases hi : face_pass r.identity
42	· have := face_localized_denial_identity r e hi
43	· rfl
44	theorem admit_implies_lineage_pass (r : CubieRequest) (e : EpochCache) :
45	intro h
46	cases hi : face_pass r.lineage
47	· have := face_localized_denial_lineage r e hi
48	· rfl
49	theorem admit_implies_runtime_pass (r : CubieRequest) (e : EpochCache) :
50	intro h
51	cases hi : face_pass r.runtime
52	· have := face_localized_denial_runtime r e hi
53	· rfl
54	theorem admit_implies_context_pass (r : CubieRequest) (e : EpochCache) :
55	intro h
56	cases hi : face_pass r.context
57	· have := face_localized_denial_context r e hi
58	· rfl
59	theorem admit_implies_policy_pass (r : CubieRequest) (e : EpochCache) :
60	intro h
61	cases hi : face_pass r.policy
62	· have := face_localized_denial_policy r e hi
63	· rfl
64	theorem admit_implies_outcome_pass (r : CubieRequest) (e : EpochCache) :
65	intro h
66	cases hi : face_pass r.outcome
67	· have := face_localized_denial_outcome r e hi
68	· rfl
69	-- ==============================================================================
70	-- 4. T5: DENIAL COUNTING (3 theorems)
71	-- ==============================================================================
72	def bool_to_failure (b : Bool) : Nat := if b then 0 else 1
73	def face_denial_count (f : CubieFace) : Nat :=
74	def request_denial_count (r : CubieRequest) : Nat :=
75	theorem face_denial_count_zero_iff (f : CubieFace) :
76	cases f.c1 <;> cases f.c2 <;> cases f.c3 <;> cases f.c4 <;> cases f.c5 <;>
77	cases f.c6 <;> cases f.c7 <;> cases f.c8 <;> cases f.c9 <;> decide
78	theorem face_denial_count_le_9 (f : CubieFace) : face_denial_count f ≤ 9 := by
79	cases f.c1 <;> cases f.c2 <;> cases f.c3 <;> cases f.c4 <;> cases f.c5 <;>
80	cases f.c6 <;> cases f.c7 <;> cases f.c8 <;> cases f.c9 <;> decide

def face_pass (f : CubieFace) : Bool :=
structure CubieRequest where
def GpuCornerPass (r : CubieRequest) : Bool :=
def DeploymentCornerPass (r : CubieRequest) : Bool :=
structure EpochCache where
def policy_fresh (e : EpochCache) : Bool :=
def telemetry_fresh (e : EpochCache) : Bool :=
def Admit (r : CubieRequest) (e : EpochCache) : Bool :=
-- ==============================================================================
-- 2. T2: FACE-LOCALIZED DENIAL (6 theorems)
-- ==============================================================================
theorem face_localized_denial_identity (r : CubieRequest) (e : EpochCache) :
intro h
cases GpuCornerPass r <;> cases face_pass r.lineage <;> cases face_pass r.policy <;>
cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
theorem face_localized_denial_lineage (r : CubieRequest) (e : EpochCache) :
intro h
cases GpuCornerPass r <;> cases face_pass r.identity <;> cases face_pass r.policy <;>
cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
theorem face_localized_denial_runtime (r : CubieRequest) (e : EpochCache) :
intro h
cases DeploymentCornerPass r <;> cases face_pass r.context <;> cases face_pass r.outcome <;>
cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
theorem face_localized_denial_context (r : CubieRequest) (e : EpochCache) :
intro h
cases DeploymentCornerPass r <;> cases face_pass r.runtime <;> cases face_pass r.outcome <;>
cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
theorem face_localized_denial_policy (r : CubieRequest) (e : EpochCache) :
intro h
cases GpuCornerPass r <;> cases face_pass r.identity <;> cases face_pass r.lineage <;>
cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
theorem face_localized_denial_outcome (r : CubieRequest) (e : EpochCache) :
intro h
cases DeploymentCornerPass r <;> cases face_pass r.context <;> cases face_pass r.runtime <;>
cases policy_fresh e <;> cases telemetry_fresh e <;> rfl
-- ==============================================================================
-- 3. T4: ADMIT IMPLIES FACE PASS (6 theorems, contrapositive of T2)
-- ==============================================================================
theorem admit_implies_identity_pass (r : CubieRequest) (e : EpochCache) :
intro h
cases hi : face_pass r.identity
· have := face_localized_denial_identity r e hi
· rfl
theorem admit_implies_lineage_pass (r : CubieRequest) (e : EpochCache) :
intro h
cases hi : face_pass r.lineage
· have := face_localized_denial_lineage r e hi
· rfl
theorem admit_implies_runtime_pass (r : CubieRequest) (e : EpochCache) :
intro h
cases hi : face_pass r.runtime
· have := face_localized_denial_runtime r e hi
· rfl
theorem admit_implies_context_pass (r : CubieRequest) (e : EpochCache) :
intro h
cases hi : face_pass r.context
· have := face_localized_denial_context r e hi
· rfl
theorem admit_implies_policy_pass (r : CubieRequest) (e : EpochCache) :
intro h
cases hi : face_pass r.policy
· have := face_localized_denial_policy r e hi
· rfl
theorem admit_implies_outcome_pass (r : CubieRequest) (e : EpochCache) :
intro h
cases hi : face_pass r.outcome
· have := face_localized_denial_outcome r e hi
· rfl
-- ==============================================================================
-- 4. T5: DENIAL COUNTING (3 theorems)
-- ==============================================================================
def bool_to_failure (b : Bool) : Nat := if b then 0 else 1
def face_denial_count (f : CubieFace) : Nat :=
def request_denial_count (r : CubieRequest) : Nat :=
theorem face_denial_count_zero_iff (f : CubieFace) :
cases f.c1 <;> cases f.c2 <;> cases f.c3 <;> cases f.c4 <;> cases f.c5 <;>
cases f.c6 <;> cases f.c7 <;> cases f.c8 <;> cases f.c9 <;> decide
theorem face_denial_count_le_9 (f : CubieFace) : face_denial_count f ≤ 9 := by
cases f.c1 <;> cases f.c2 <;> cases f.c3 <;> cases f.c4 <;> cases f.c5 <;>
cases f.c6 <;> cases f.c7 <;> cases f.c8 <;> cases f.c9 <;> decide


ls "C:/Users/NickV/cubie-verification/verus/" && echo "---" && ls "C:/Users/NickV/cubie-verification/coq/" | wc -l && ls "C:/Users/NickV/cubie-verification/lean/" | wc -l

List all existing Verus specs and count Coq/Lean files


cubie_capacity_spec.rs
cubie_delegation_spec.rs
cubie_geometry_spec.rs
cubie_lease_spec.rs
cubie_per_predicate_spec.rs
cubie_runtime_spec.rs
cubieq_addendum_spec.rs
oai_runtime_spec.rs
omega_bridge_spec.rs
omega_spec.rs
quantum_geometric_spec.rs
ramen_seam_spec.rs
---
30
29