Enforce Zhuyuan persona-source epistemic gate

This commit is contained in:
冰朔 2026-08-13 21:55:59 +08:00
commit b0deae2718
30 changed files with 1741 additions and 34 deletions

View file

@ -5,6 +5,7 @@ from __future__ import annotations
import argparse
import json
import re
from datetime import datetime, timezone
from pathlib import Path
@ -92,7 +93,23 @@ def compile_graph(contributions: list[dict]) -> dict:
node_count = 0
verified_node_count = 0
correction_edges = []
seen_contribution_ids: set[str] = set()
seen_stable_numbers: dict[str, str] = {}
for item in contributions:
contribution_id = item["contribution_id"]
if contribution_id in seen_contribution_ids:
raise ValueError(f"duplicate contribution id: {contribution_id}")
seen_contribution_ids.add(contribution_id)
match = re.match(r"^(RC-\d{8}-\d{3})(?:-|$)", contribution_id)
if not match:
raise ValueError(f"invalid contribution stable id: {contribution_id}")
stable_number = match.group(1)
if stable_number in seen_stable_numbers:
raise ValueError(
"duplicate contribution stable number: "
f"{stable_number} used by {seen_stable_numbers[stable_number]} and {contribution_id}"
)
seen_stable_numbers[stable_number] = contribution_id
ordered_nodes = _validate_and_order_nodes(item)
node_count += len(ordered_nodes)
verified_node_count += sum(node["state"] == "verified" for node in ordered_nodes)