File size: 3,961 Bytes
70b8adf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""Validate the public Dot Reflex release without loading model weights."""

from __future__ import annotations

import hashlib
import json
import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))

from inference import validate_trajectory

ROOT = Path(__file__).resolve().parents[1]
EXPECTED_BASE = "Qwen/Qwen3-14B-Base"
EXPECTED_REVISION = "0b0bd3732e2c374d483664439ea334928b65f304"
EXPECTED_ADAPTER_SHA256 = "48854c62d147af3ee144fa0cb312b1d46af23ff6fc67dbb8a197aad780710361"

REQUIRED = (
    "README.md",
    "LICENSE",
    "adapter_config.json",
    "adapter_model.safetensors",
    "tokenizer.json",
    "tokenizer_config.json",
    "trajectory.schema.json",
    "inference.py",
    "serve.py",
    "INSTALL.md",
    "INTEGRATION.md",
    "EVALUATION.md",
    "SECURITY.md",
    "evaluation/benchmark_overview.png",
    "evaluation/action_accuracy.png",
    "evaluation/efficiency.png",
    "evaluation/training_dynamics.png",
    "evaluation/chart_receipt.json",
    "provenance/run_receipt.json",
)


def sha256(path: Path) -> str:
    digest = hashlib.sha256()
    with path.open("rb") as handle:
        for chunk in iter(lambda: handle.read(1024 * 1024), b""):
            digest.update(chunk)
    return digest.hexdigest()


def require(condition: bool, message: str, errors: list[str]) -> None:
    if not condition:
        errors.append(message)


def main() -> int:
    errors: list[str] = []
    for relative in REQUIRED:
        require((ROOT / relative).is_file(), f"missing required file: {relative}", errors)

    adapter_config = json.loads((ROOT / "adapter_config.json").read_text(encoding="utf-8"))
    require(
        adapter_config.get("base_model_name_or_path") == EXPECTED_BASE,
        "adapter base model does not match release identity",
        errors,
    )
    require(
        adapter_config.get("revision") == EXPECTED_REVISION,
        "adapter base revision does not match pinned receipt",
        errors,
    )
    require(
        sha256(ROOT / "adapter_model.safetensors") == EXPECTED_ADAPTER_SHA256,
        "adapter_model.safetensors digest mismatch",
        errors,
    )

    schema = json.loads((ROOT / "trajectory.schema.json").read_text(encoding="utf-8"))
    require(schema.get("type") == "object", "trajectory schema root must be an object", errors)
    require(
        set(schema.get("required", []))
        == {
            "task_summary",
            "execution_history",
            "tool_results",
            "current_state",
            "detected_failure_signals",
        },
        "trajectory schema required fields differ from runtime contract",
        errors,
    )
    for example in sorted((ROOT / "examples").glob("trajectory_*.json")):
        payload = json.loads(example.read_text(encoding="utf-8"))
        try:
            validate_trajectory(payload)
        except ValueError as exc:
            errors.append(f"{example.relative_to(ROOT)}: {exc}")

    chart_receipt = json.loads((ROOT / "evaluation/chart_receipt.json").read_text(encoding="utf-8"))
    for group in ("sources", "outputs"):
        for relative, expected in chart_receipt[group].items():
            path = ROOT / relative
            require(path.is_file(), f"chart receipt path missing: {relative}", errors)
            if path.is_file():
                require(sha256(path) == expected, f"chart receipt digest mismatch: {relative}", errors)

    if errors:
        for error in errors:
            print(f"ERROR: {error}", file=sys.stderr)
        return 1

    print("Dot Reflex release validation passed")
    print(f"base: {EXPECTED_BASE}@{EXPECTED_REVISION}")
    print(f"adapter sha256: {EXPECTED_ADAPTER_SHA256}")
    print(f"validated examples: {len(list((ROOT / 'examples').glob('trajectory_*.json')))}")
    print(f"validated charts: {len(chart_receipt['outputs'])}")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())