Spaces:
Running
Running
Sync GitHub main a02dcc46dc38f6a5cfddfcce49132b171241cfc8 (part 6)
Browse files
src/research/literature_registry.py
CHANGED
|
@@ -7,6 +7,7 @@ relevance matrices for research questions.
|
|
| 7 |
|
| 8 |
from __future__ import annotations
|
| 9 |
|
|
|
|
| 10 |
from pathlib import Path
|
| 11 |
|
| 12 |
from .registry import REPO_ROOT, ResearchRegistry, Source
|
|
@@ -14,6 +15,19 @@ from .registry import REPO_ROOT, ResearchRegistry, Source
|
|
| 14 |
LITERATURE_DIR = REPO_ROOT / "research" / "literature"
|
| 15 |
|
| 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
class LiteratureRegistry:
|
| 18 |
"""Manages literature sources and generates reference documents."""
|
| 19 |
|
|
@@ -61,7 +75,7 @@ class LiteratureRegistry:
|
|
| 61 |
[
|
| 62 |
"",
|
| 63 |
"---",
|
| 64 |
-
f"*Automatisch generiert am {
|
| 65 |
]
|
| 66 |
)
|
| 67 |
|
|
|
|
| 7 |
|
| 8 |
from __future__ import annotations
|
| 9 |
|
| 10 |
+
import json
|
| 11 |
from pathlib import Path
|
| 12 |
|
| 13 |
from .registry import REPO_ROOT, ResearchRegistry, Source
|
|
|
|
| 15 |
LITERATURE_DIR = REPO_ROOT / "research" / "literature"
|
| 16 |
|
| 17 |
|
| 18 |
+
def _generated_on() -> str:
|
| 19 |
+
"""Return the canonical release snapshot date for deterministic reports."""
|
| 20 |
+
release_path = REPO_ROOT / "releases" / "current.json"
|
| 21 |
+
try:
|
| 22 |
+
data = json.loads(release_path.read_text(encoding="utf-8"))
|
| 23 |
+
value = data.get("as_of")
|
| 24 |
+
if isinstance(value, str) and value.strip():
|
| 25 |
+
return value.strip()
|
| 26 |
+
except (OSError, json.JSONDecodeError):
|
| 27 |
+
pass
|
| 28 |
+
return "undated"
|
| 29 |
+
|
| 30 |
+
|
| 31 |
class LiteratureRegistry:
|
| 32 |
"""Manages literature sources and generates reference documents."""
|
| 33 |
|
|
|
|
| 75 |
[
|
| 76 |
"",
|
| 77 |
"---",
|
| 78 |
+
f"*Automatisch generiert am {_generated_on()}*",
|
| 79 |
]
|
| 80 |
)
|
| 81 |
|
src/research/report_builder.py
CHANGED
|
@@ -13,7 +13,6 @@ from __future__ import annotations
|
|
| 13 |
|
| 14 |
import json
|
| 15 |
from collections import Counter
|
| 16 |
-
from datetime import datetime
|
| 17 |
from pathlib import Path
|
| 18 |
from typing import Any, cast
|
| 19 |
|
|
@@ -23,6 +22,19 @@ GENERATED_DIR = REPO_ROOT / "research" / "generated"
|
|
| 23 |
EVIDENCE_DIR = REPO_ROOT / "research" / "registry" / "evidence"
|
| 24 |
|
| 25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
class EvidenceRecord:
|
| 27 |
"""Typed wrapper for an EVID-*.json record."""
|
| 28 |
|
|
@@ -162,7 +174,7 @@ class ReportBuilder:
|
|
| 162 |
lines = [
|
| 163 |
"# MHRN Research Catalog",
|
| 164 |
"",
|
| 165 |
-
f"*Generiert am {
|
| 166 |
"",
|
| 167 |
"## Übersicht",
|
| 168 |
"",
|
|
@@ -261,7 +273,7 @@ class ReportBuilder:
|
|
| 261 |
lines = [
|
| 262 |
"# MHRN Evidence Matrix",
|
| 263 |
"",
|
| 264 |
-
f"*Generiert am {
|
| 265 |
"",
|
| 266 |
"RQ-Status und Claim-Status sind unterschiedliche wissenschaftliche Zustände und werden nicht gegenseitig abgeleitet.",
|
| 267 |
"",
|
|
@@ -341,7 +353,7 @@ class ReportBuilder:
|
|
| 341 |
lines = [
|
| 342 |
"# MHRN Open Questions",
|
| 343 |
"",
|
| 344 |
-
f"*Generiert am {
|
| 345 |
"",
|
| 346 |
"Die folgenden Forschungsfragen sind noch offen und warten auf experimentelle Evidenz.",
|
| 347 |
"",
|
|
@@ -388,7 +400,7 @@ class ReportBuilder:
|
|
| 388 |
lines = [
|
| 389 |
"# MHRN Claim Register",
|
| 390 |
"",
|
| 391 |
-
f"*Generiert am {
|
| 392 |
"",
|
| 393 |
"| Claim | Status | Konfidenz | Evidenzen | Experimente |",
|
| 394 |
"|-------|--------|-----------|-----------|-------------|",
|
|
@@ -484,7 +496,7 @@ class ReportBuilder:
|
|
| 484 |
lines = [
|
| 485 |
"# MHRN Dissertation Map",
|
| 486 |
"",
|
| 487 |
-
f"*Generiert am {
|
| 488 |
"",
|
| 489 |
"Diese Karte zeigt, wie die Forschungsergebnisse von MHRN in eine",
|
| 490 |
"Dissertationsstruktur eingeordnet werden können.",
|
|
|
|
| 13 |
|
| 14 |
import json
|
| 15 |
from collections import Counter
|
|
|
|
| 16 |
from pathlib import Path
|
| 17 |
from typing import Any, cast
|
| 18 |
|
|
|
|
| 22 |
EVIDENCE_DIR = REPO_ROOT / "research" / "registry" / "evidence"
|
| 23 |
|
| 24 |
|
| 25 |
+
def _generated_on() -> str:
|
| 26 |
+
"""Return the canonical release snapshot date for deterministic reports."""
|
| 27 |
+
release_path = REPO_ROOT / "releases" / "current.json"
|
| 28 |
+
try:
|
| 29 |
+
data = json.loads(release_path.read_text(encoding="utf-8"))
|
| 30 |
+
value = data.get("as_of")
|
| 31 |
+
if isinstance(value, str) and value.strip():
|
| 32 |
+
return value.strip()
|
| 33 |
+
except (OSError, json.JSONDecodeError):
|
| 34 |
+
pass
|
| 35 |
+
return "undated"
|
| 36 |
+
|
| 37 |
+
|
| 38 |
class EvidenceRecord:
|
| 39 |
"""Typed wrapper for an EVID-*.json record."""
|
| 40 |
|
|
|
|
| 174 |
lines = [
|
| 175 |
"# MHRN Research Catalog",
|
| 176 |
"",
|
| 177 |
+
f"*Generiert am {_generated_on()}*",
|
| 178 |
"",
|
| 179 |
"## Übersicht",
|
| 180 |
"",
|
|
|
|
| 273 |
lines = [
|
| 274 |
"# MHRN Evidence Matrix",
|
| 275 |
"",
|
| 276 |
+
f"*Generiert am {_generated_on()}*",
|
| 277 |
"",
|
| 278 |
"RQ-Status und Claim-Status sind unterschiedliche wissenschaftliche Zustände und werden nicht gegenseitig abgeleitet.",
|
| 279 |
"",
|
|
|
|
| 353 |
lines = [
|
| 354 |
"# MHRN Open Questions",
|
| 355 |
"",
|
| 356 |
+
f"*Generiert am {_generated_on()}*",
|
| 357 |
"",
|
| 358 |
"Die folgenden Forschungsfragen sind noch offen und warten auf experimentelle Evidenz.",
|
| 359 |
"",
|
|
|
|
| 400 |
lines = [
|
| 401 |
"# MHRN Claim Register",
|
| 402 |
"",
|
| 403 |
+
f"*Generiert am {_generated_on()}*",
|
| 404 |
"",
|
| 405 |
"| Claim | Status | Konfidenz | Evidenzen | Experimente |",
|
| 406 |
"|-------|--------|-----------|-----------|-------------|",
|
|
|
|
| 496 |
lines = [
|
| 497 |
"# MHRN Dissertation Map",
|
| 498 |
"",
|
| 499 |
+
f"*Generiert am {_generated_on()}*",
|
| 500 |
"",
|
| 501 |
"Diese Karte zeigt, wie die Forschungsergebnisse von MHRN in eine",
|
| 502 |
"Dissertationsstruktur eingeordnet werden können.",
|