Brain-5D-Space / scripts /update_dissertation_results.py
github-actions[bot]
Sync: publish Space API fix
5e0b58b
Raw History Blame Contribute Delete
8.03 kB
"""Append verified Brain-5D experiment results to the dissertation basis DOCX."""
from __future__ import annotations
import json
from pathlib import Path
from statistics import fmean
import yaml
from docx import Document
ROOT = Path(__file__).resolve().parents[1]
DOCX = ROOT / "docs/06-research/KI_Die_geliehene_Intelligenz_Kontrollverlust_Embodiment_Dissertationsbasis.docx"
RESEARCH = ROOT / "research"
MARKER = "Empirischer Brain-5D-Nachtrag"
def read_json(path: Path) -> dict:
return json.loads(path.read_text(encoding="utf-8"))
def runs(experiment_id: str) -> list[dict]:
return read_json(RESEARCH / "experiments" / experiment_id / "DATA" / "runs.json")
def main() -> None:
document = Document(DOCX)
if any(MARKER in paragraph.text for paragraph in document.paragraphs):
print(f"{DOCX} already contains {MARKER}")
return
questions = yaml.safe_load(
(RESEARCH / "registry/questions.yaml").read_text(encoding="utf-8")
)
document.add_page_break()
document.add_heading(MARKER, level=1)
document.add_paragraph(
"Stand: 7. September 2026. Dieser Nachtrag dokumentiert technische Brain-5D-Läufe "
"aus dem Forschungsregister. Die Angaben wurden aus Manifesten, deterministischen "
"Statistiken und DATA-Artefakten übernommen. Ein abgeschlossener Lauf ist keine "
"automatische wissenschaftliche Evidenz; Dirty-Tree- und Human-Review-Gates bleiben "
"maßgeblich."
)
document.add_heading("Ergebnisübersicht", level=2)
table = document.add_table(rows=1, cols=6)
table.style = "Table Grid"
headers = ["Forschungsfrage", "Experiment", "Modus", "Umfang", "Technisches Ergebnis", "Evidenzstatus"]
for cell, text in zip(table.rows[0].cells, headers):
cell.text = text
rows = [
(
"RQ-SNN-001",
"EXP-SNN-001-R2",
"CONFIRMATORY",
"20 Läufe; 10 Seeds; 100.000 Ticks",
"20/20 Stabilitätspässe; 0 Laufzeitfehler; Kontroll- und Tonic-Drive-Bedingung vollständig.",
"Review pending; Dirty Source Tree; kontrollierter Runner, keine Generalisierung auf den Vollkern.",
),
(
"RQ-REPL-001",
"EXP-REPL-0001-R1",
"REPLICATION",
"40 Läufe; 20 Seeds; 256 Ticks",
"Recurrence off/on vollständig ausgeführt; 0 Laufzeitfehler; Effektrichtung über alle Seeds konsistent.",
"Review pending; Dirty Source Tree; deskriptiv, kein registrierter Inferenztest.",
),
(
"RQ-LIFE-001",
"EXP-LIFE-0001-R1",
"EXPLORATORY",
"20 Läufe; 20 Seeds; drei Tasks",
"Alle drei Tasks in allen Läufen erfolgreich; retained success fraction = 1.0.",
"Vorläuferscreen; kein Beleg für Catastrophic-Forgotten im Shared-Network-Sinn.",
),
(
"RQ-SUITE-001",
"EXP-GEN-0033-R1",
"EXPLORATORY",
"57 Teilruns; 3 Seeds; bis 100.000 Ticks",
"Science-Suite vollständig; Tickvertrag erfüllt; 0 Laufzeitfehler; DATA und Statistik vorhanden.",
"Diagnostik-/Omnibuslauf; keine Primärevidenz für die enthaltenen Fachfragen.",
),
]
for row in rows:
cells = table.add_row().cells
for cell, text in zip(cells, row):
cell.text = text
document.add_heading("RQ-SNN-001: Langzeitstabilität", level=2)
snn = runs("EXP-SNN-001-R2")
tonic = [item for item in snn if item["condition"] == "tonic_drive"]
control = [item for item in snn if item["condition"] == "no_input_control"]
document.add_paragraph(
f"Der eingefrorene Runner absolvierte {len(snn)} Läufe mit jeweils "
f"{snn[0]['metrics']['ticks_executed']:,} Ticks. Alle {len(snn)} Läufe erfüllten "
"die registrierten Kriterien für finite Zustände und unveränderte Topologie. "
f"Unter Tonic Drive lag die mittlere Aktivität bei "
f"{fmean(item['metrics']['post_burn_in_mean_spikes'] for item in tonic):.0f} "
"Spikes pro 1.000-Tick-Fenster; CV und relative Drift lagen jeweils bei 0.0. "
f"Die No-Input-Kontrolle blieb mit {len(control)} von {len(control)} Pässen ruhig."
)
document.add_paragraph(
"Interpretationsgrenze: Der Runner verwendet ein kontrolliertes Kleinnetzwerk. "
"Das Ergebnis stützt die technische Stabilität dieses Versuchsaufbaus, nicht "
"automatisch die Stabilität des vollständigen produktiven Brain-5D-Netzes."
)
document.add_heading("RQ-REPL-001: Unabhängige Replikation", level=2)
repl = runs("EXP-REPL-0001-R1")
off = [item for item in repl if item["condition"] == "recurrence_off"]
on = [item for item in repl if item["condition"] == "recurrence_on"]
document.add_paragraph(
f"Die Replikation umfasst {len(repl)} Läufe über 20 unabhängige Seeds und "
"beide Rekurrenzarme. Ohne Rekurrenz wurden im Mittel 3 Spikes, 2 synaptische "
"Ereignisse und Rekurrenzereignisse 0 beobachtet. Mit Rekurrenz wurden im Mittel "
"33 Spikes, 33 synaptische Ereignisse, 10 Rekurrenzereignisse und eine "
"Propagationstiefe von 61 beobachtet. Die Werte waren über die Seeds identisch "
f"({len(off)} Kontroll- und {len(on)} Treatmentläufe; keine Runtime-Fehler)."
)
document.add_paragraph(
"Die Differenzen sind deskriptive Ergebnisse. Der Lauf enthält keinen registrierten "
"Inferenztest und wurde aus einem Dirty Source Tree erzeugt; deshalb wird keine "
"allgemeine Kausal- oder Signifikanzbehauptung in die Dissertation übernommen."
)
document.add_heading("RQ-LIFE-001: Learning-Interference-Screen", level=2)
life = runs("EXP-LIFE-0001-R1")
successes = [item["metrics"]["task_successes"] for item in life]
document.add_paragraph(
f"Der explorative Vorläuferscreen umfasst {len(life)} Seeds. In jedem Lauf waren "
f"alle drei Task-Ergebnisse positiv ({sum(all(item) for item in successes)}/{len(successes)} "
"Läufe; retained success fraction = 1.0). Der Reset transienten neuronalen "
"Zustands zwischen unabhängigen Tasks wurde protokollspezifisch ergänzt, während "
"gelernte Gewichte erhalten blieben."
)
document.add_paragraph(
"Dieser Screen prüft unabhängige Task-Instanzen und ist ausdrücklich kein Nachweis "
"gegen Catastrophic Forgetting in einem gemeinsamen sequenziellen Netzwerk."
)
document.add_heading("RQ-SUITE-001: Science-Suite-Diagnostik", level=2)
suite_manifest = read_json(RESEARCH / "experiments" / "EXP-GEN-0033-R1" / "manifest.json")
document.add_paragraph(
f"Die vollständige Suite erzeugte {suite_manifest['results']['run_count']} Teilruns "
"unter gemeinsamer Provenienz. Der Tickvertrag bis 100.000 Ticks wurde erfüllt; "
"Laufzeitfehler traten nicht auf. Die Suite bleibt eine technische Omnibus-Diagnostik "
"und ersetzt keine spezifischen, präregistrierten Fachprotokolle."
)
document.add_heading("Wissenschaftlicher Gesamtstatus", level=2)
document.add_paragraph(
"Die neuen Läufe erweitern den empirischen Anschluss der Dissertation. Sie zeigen "
"reproduzierbare technische Resultate unter den jeweils angegebenen Bedingungen. "
"Alle vier Ergebnislinien wurden jedoch mit Dirty-Tree-Provenienz geführt; zudem "
"stehen Human Reviews aus. Die Forschungsfragen werden daher nicht als bestätigt "
"oder widerlegt markiert. Die primären Belege bleiben die verlinkten Manifeste, "
"Summaries, DATA- und Statistikdateien im Repository."
)
document.add_paragraph(
"Repository-Artefakte: research/experiments/EXP-SNN-001-R2, "
"EXP-REPL-0001-R1, EXP-LIFE-0001-R1 und EXP-GEN-0033-R1."
)
document.save(DOCX)
print(f"Updated {DOCX}")
if __name__ == "__main__":
main()