File size: 3,969 Bytes
8cfc5e2
3f1f29b
8cfc5e2
 
 
 
 
 
 
 
1121d82
 
8cfc5e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3f1f29b
8cfc5e2
 
 
 
 
3f1f29b
8cfc5e2
 
 
3f1f29b
 
 
 
 
 
 
8cfc5e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3f1f29b
 
 
 
8cfc5e2
 
 
 
 
 
 
 
3f1f29b
8cfc5e2
 
 
 
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
#!/usr/bin/env python3
"""Dependency-free consistency checks for the RAGForge release."""

from __future__ import annotations

import json
import re
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
APP_VERSION = "2.0.3"
BENCHMARK_VERSION = "2.0.3"


def read(path: str) -> str:
    return (ROOT / path).read_text(encoding="utf-8")


def require(condition: bool, message: str) -> None:
    if not condition:
        raise SystemExit(f"RELEASE CHECK FAILED: {message}")


def main() -> None:
    pyproject = read("pyproject.toml")
    init_py = read("src/ragforge/__init__.py")
    api_py = read("src/ragforge/api.py")
    ui_py = read("src/ragforge/ui.py")
    readme = read("README.md")
    metrics_py = read("src/ragforge/eval_metrics.py")
    benchmark = json.loads(read("evals/demo_benchmark.json"))

    require(f'version = "{APP_VERSION}"' in pyproject, "pyproject version mismatch")
    require(f'__version__ = "{APP_VERSION}"' in init_py, "package version mismatch")
    require(f'version="{APP_VERSION}"' in api_py, "FastAPI version mismatch")
    require(f'`v{APP_VERSION}`' in ui_py, "runtime UI version mismatch")
    require(benchmark.get("version") == BENCHMARK_VERSION, "benchmark version mismatch")

    require("—" not in ui_py and "–" not in ui_py, "UI contains long dash glyphs")
    require("Final portfolio release" not in ui_py, "release-marketing copy remains in UI")
    require("Pre-final readiness" not in ui_py, "readiness billboard remains in UI")
    require("Verified v1.9 grade" not in ui_py, "historical grade billboard remains in UI")
    require("[D#] [T#] [W#] citations" not in ui_py, "internal citation syntax remains in hero copy")
    require("The results describe this demo benchmark only; they are not general accuracy claims." in ui_py, "evaluation scope note missing")
    require("final portfolio release" not in readme.lower(), "README still reads like portfolio-release marketing")
    require("_contains_expected_term" in metrics_py, "boundary-aware answer matcher missing")

    required_docs = [
        "CHANGELOG.md",
        "SECURITY.md",
        "docs/FINAL_RESULTS.md",
        "docs/PORTFOLIO_GUIDE.md",
        "docs/EVALUATION.md",
        "docs/ARCHITECTURE_API.md",
    ]
    for path in required_docs:
        require((ROOT / path).is_file(), f"missing {path}")

    demo_files = [
        "acme_cloud_runbook.md",
        "orbitpay_policy.txt",
        "release_notes.html",
        "support_matrix.csv",
        "NIST_AI_RMF_1.0.pdf",
    ]
    for name in demo_files:
        require((ROOT / "demo_documents" / name).is_file(), f"missing demo file {name}")

    hard_cases = {case.get("id"): case for case in benchmark.get("hard_mode_cases", [])}
    multihop = hard_cases.get("hard_multihop_time_compare", {})
    require(multihop.get("mode") == "Auto", "multi-hop Hard Mode must use Auto")
    require(multihop.get("profile") == "Balanced", "multi-hop Hard Mode must use Balanced")
    require(multihop.get("expected_task") == "comparison", "multi-hop Hard Mode expected task mismatch")
    require(multihop.get("expected_strategy") == "hierarchical", "multi-hop Hard Mode expected strategy mismatch")

    planner_cases = {case.get("id"): case for case in benchmark.get("planner_cases", [])}
    source_lookup = planner_cases.get("plan_find_refund_file", {})
    require(set(source_lookup.get("strategy_any", [])) == {"semantic", "hierarchical"}, "source-localization strategy alternatives missing")

    architecture_fn = re.search(
        r"def _architecture_snapshot\(.*?\n\s*return sid, runtime, curl, runtime_json",
        ui_py,
        flags=re.S,
    )
    require(architecture_fn is not None, "architecture snapshot function missing")
    require(architecture_fn.group(0).count("**RAGForge:**") == 1, "runtime header is duplicated")

    print(f"RAGForge release check PASS - app {APP_VERSION}, benchmark {BENCHMARK_VERSION}.")


if __name__ == "__main__":
    main()