File size: 8,030 Bytes
5e0b58b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
"""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()