Project-Rivet / v2 /pharos /build_campus_pack.py
HumboldtJoker's picture
Upload folder using huggingface_hub
4554903 verified
Raw
History Blame Contribute Delete
5.07 kB
"""Build the campus_architecture Pharos pack from Rivet's context files.
Deterministic extraction — no LLM in the loop. Parses the markdown
tables and section structure of architecture_map.md and imports the
audit findings from their single source of truth
(skills/security_review.py). Output is a standard Pharos pack
(triples.json + stats.json in a directory), loadable by pack_loader and
KV-warmable by kv_injector.
Usage:
python pharos/build_campus_pack.py [--context-dir ../context] [--out ../packs]
"""
import argparse
import json
import re
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
def _table_rows(section: str) -> list:
rows = []
for line in section.splitlines():
if not line.strip().startswith("|"):
continue
cells = [c.strip() for c in line.strip().strip("|").split("|")]
if cells and not set(cells[0]) <= {"-", " ", ":"}:
rows.append(cells)
return rows[1:] if rows else [] # drop header
def build_triples(context_dir: Path) -> list:
triples = []
arch_path = context_dir / "architecture_map.md"
if arch_path.exists():
text = arch_path.read_text()
# Stack table: | Layer | Technology |
stack = re.search(r"## Stack\n(.*?)\n---", text, re.DOTALL)
if stack:
for cells in _table_rows(stack.group(1)):
if len(cells) >= 2:
triples.append({"subject": "campus_" + cells[0].lower().replace(" ", "_"),
"predicate": "implemented_with",
"object": cells[1]})
# External services table: | Service | Purpose | Notes |
services = re.search(r"## External Services\n(.*?)\n---", text, re.DOTALL)
if services:
for cells in _table_rows(services.group(1)):
if len(cells) >= 2:
triples.append({"subject": "campus",
"predicate": "integrates",
"object": f"{cells[0]} ({cells[1]})"})
# Hard operational facts.
triples += [
{"subject": "staging_environment", "predicate": "shares_database_with",
"object": "production_environment"},
{"subject": "campus_migrations", "predicate": "must_be",
"object": "additive_only"},
{"subject": "campus_migrations", "predicate": "must_be",
"object": "backward_compatible_and_reversible"},
{"subject": "campus_auth", "predicate": "uses",
"object": "bearer_jwt_15min_access_7day_refresh"},
{"subject": "campus_auth", "predicate": "middleware_chain",
"object": "verifyToken -> rejectIfIneligible -> requireAdmin/requireModerator"},
{"subject": "websocket_auth", "predicate": "verified_via",
"object": "handshake.auth.token -> verifyToken()"},
{"subject": "campus_deploy", "predicate": "flows_through",
"object": "push_to_main -> coolify_rebuild (webhook flaky)"},
{"subject": "deploy-safe.sh", "predicate": "provides",
"object": "snapshot + smoke test + rollback"},
]
# Audit findings from their single source of truth.
from skills.security_review import AUDIT_FINDINGS, RECURRING_PATTERNS
for f in AUDIT_FINDINGS:
triples.append({"subject": f"audit_finding_{f.id}",
"predicate": "severity", "object": f.severity})
triples.append({"subject": f"audit_finding_{f.id}",
"predicate": "describes", "object": f.title})
triples.append({"subject": f"audit_finding_{f.id}",
"predicate": "remediation", "object": f.advice})
if f.file_hint:
triples.append({"subject": f"audit_finding_{f.id}",
"predicate": "located_at", "object": f.file_hint})
for name, _, message in RECURRING_PATTERNS:
triples.append({"subject": f"antipattern_{name}",
"predicate": "warns", "object": message})
return triples
def main() -> None:
ap = argparse.ArgumentParser()
default_ctx = Path(__file__).parent.parent.parent / "context"
default_out = Path(__file__).parent.parent.parent / "packs"
ap.add_argument("--context-dir", default=str(default_ctx))
ap.add_argument("--out", default=str(default_out))
args = ap.parse_args()
triples = build_triples(Path(args.context_dir))
pack_dir = Path(args.out) / "campus_architecture"
pack_dir.mkdir(parents=True, exist_ok=True)
(pack_dir / "triples.json").write_text(json.dumps({
"description": ("Multiverse Campus system architecture, operational "
"constraints, and confirmed audit findings"),
"triples": triples,
}, indent=2))
(pack_dir / "stats.json").write_text(json.dumps({
"triples": len(triples), "source": "build_campus_pack.py",
}, indent=2))
print(f"campus_architecture pack: {len(triples)} triples -> {pack_dir}")
if __name__ == "__main__":
main()