Compare commits

..

2 Commits

Author SHA1 Message Date
Alexander Whitestone
9339b1a2d4 docs: ground unified fleet sovereignty directive
Some checks failed
Self-Healing Smoke / self-healing-smoke (pull_request) Failing after 12s
Agent PR Gate / gate (pull_request) Failing after 31s
Smoke Test / smoke (pull_request) Failing after 16s
Agent PR Gate / report (pull_request) Successful in 9s
Refs #524
2026-04-22 10:29:16 -04:00
Alexander Whitestone
a6ec2055cc wip: add issue 524 directive grounding script 2026-04-22 10:27:30 -04:00
6 changed files with 618 additions and 181 deletions

View File

@@ -0,0 +1,107 @@
# [DIRECTIVE] Unified Fleet Sovereignty & Comms Migration
Grounding report for `timmy-home #524`.
Issue #524 is a multi-lane directive, not a one-commit feature. This report grounds the directive in repo evidence, highlights stale cross-links, and names the missing operator bundles that still need real execution.
This remains a `Refs #524` artifact. The directive spans multiple repos and operator actions, so this report makes the current repo-side state executable without pretending the whole migration is complete.
## Directive Snapshot
- Repo-grounded workstreams: 0
- Partial workstreams: 4
- Missing workstreams: 1
- Drifted references: 4
## Reference Drift
- #813 is cited for Nostr Migration Leadership, but its current title is 'docs: refresh the-playground genome analysis (#671)'.
- #819 is cited for Nostr Migration Leadership, but its current title is 'docs: verify #648 already implemented (closes #818)'.
- #139 is cited for v0.7.0 Feature Audit, but its current title is '🐣 Allegro-Primus is born'.
- #103 is cited for Morrowind Local-First Benchmark, but its current title is 'Build comprehensive caching layer — cache everywhere'.
## Workstream Matrix
### 1. Nostr Migration Leadership — PARTIAL
- Requirement: Replace Telegram with relay-based sovereign comms, verify wizard keypairs, and prove the NIP-29 group path is stable.
- Referenced issues:
- #813 (closed) — docs: refresh the-playground genome analysis (#671) [DRIFT]
- #819 (open) — docs: verify #648 already implemented (closes #818) [DRIFT]
- Repo evidence present:
- `infrastructure/timmy-bridge/client/timmy_client.py` — Nostr event client scaffold already exists
- `infrastructure/timmy-bridge/monitor/timmy_monitor.py` — Nostr relay monitor already exists
- `specs/wizard-telegram-bot-cutover.md` — Telegram cutover planning exists, so the migration lane is real
- Missing operator deliverables:
- wizard keypair inventory and ownership matrix
- NIP-29 relay group verification report
- operator runbook for cutting traffic off Telegram
- Why this lane remains open: The repo has Nostr-adjacent scaffolding, but the directive still lacks a verified migration packet and the cited issue links drift away from the stated Nostr scope.
### 2. Lexicon Enforcement — PARTIAL
- Requirement: Enforce the Fleet Lexicon in PR review and issue triage so the team uses one shared language.
- Referenced issues:
- #388 (closed) — [KT] Fleet Lexicon & Techniques — Shared Vocabulary, Patterns, and Standards for All Agents [aligned]
- Repo evidence present:
- `docs/WIZARD_APPRENTICESHIP_CHARTER.md` — The repo already uses wizard-language canon in docs
- `specs/timmy-ezra-bezalel-canon-sheet.md` — Canonical agent naming already exists
- `docs/OPERATIONS_DASHBOARD.md` — Operational roles are already described in repo language
- Missing operator deliverables:
- machine-checkable lexicon policy for review/triage
- terminology lint or reviewer checklist tied to the lexicon
- Why this lane remains open: The naming canon exists, but there is still no executable enforcement bundle that would catch drift during future reviews and triage passes.
### 3. v0.7.0 Feature Audit — PARTIAL
- Requirement: Audit Hermes features that can reduce cloud dependency and turn the findings into a sovereignty implementation plan.
- Referenced issues:
- #139 (open) — 🐣 Allegro-Primus is born [DRIFT]
- Repo evidence present:
- `scripts/sovereignty_audit.py` — Cloud-vs-local audit machinery already exists
- `reports/evaluations/2026-04-15-phase-4-sovereignty-audit.md` — Recent sovereignty audit report is committed
- `timmy-local/README.md` — Local-first status is already documented for operators
- Missing operator deliverables:
- Hermes v0.7.0 feature inventory linked to cloud-reduction leverage
- Sovereignty Implementation Plan derived from that feature audit
- Why this lane remains open: The repo has sovereignty-audit infrastructure, but it does not yet contain the requested v0.7.0 feature inventory or the plan that turns those findings into rollout steps.
### 4. Morrowind Local-First Benchmark — PARTIAL
- Requirement: Compare cloud and local Morrowind agents, prove local parity where possible, and document the reasoning gap when it fails.
- Referenced issues:
- #103 (open) — Build comprehensive caching layer — cache everywhere [DRIFT]
- Repo evidence present:
- `morrowind/local_brain.py` — Local Morrowind control loop already exists
- `morrowind/mcp_server.py` — Morrowind MCP control surface is already wired
- `morrowind/pilot.py` — Trajectory logging for evaluation already exists
- Missing operator deliverables:
- cloud-vs-local benchmark report for the combat loop
- reasoning-gap writeup tied to a proposed LoRA/fine-tune path
- Why this lane remains open: The repo has a local Morrowind stack, but it does not yet contain the requested benchmark artifact; the cited issue number also points at an unrelated caching task.
### 5. Infrastructure Hardening / Syntax Guard — MISSING
- Requirement: Verify Syntax Guard pre-receive protection across Gitea repos so syntax failures stop earlier.
- Referenced issues: none listed in the directive body
- Repo evidence present: none
- Missing operator deliverables:
- repo inventory of Gitea targets that should carry Syntax Guard
- deployment verifier for hook presence across those repos
- operator report proving installation state instead of assuming it
- Why this lane remains open: No repo-managed syntax-guard verifier is present yet, so this directive still depends on manual trust rather than auditable proof.
## Highest-Leverage Next Actions
- Nostr Migration Leadership: wizard keypair inventory and ownership matrix
- Lexicon Enforcement: machine-checkable lexicon policy for review/triage
- v0.7.0 Feature Audit: Hermes v0.7.0 feature inventory linked to cloud-reduction leverage
- Morrowind Local-First Benchmark: cloud-vs-local benchmark report for the combat loop
- Infrastructure Hardening / Syntax Guard: repo inventory of Gitea targets that should carry Syntax Guard
## Why #524 Remains Open
- The directive bundles five separate workstreams with different evidence surfaces.
- Multiple cited issue numbers have drifted away from the work they are supposed to anchor.
- Repo scaffolding exists for Nostr, sovereignty audits, and Morrowind, but the operator-facing bundles are still missing.
- Syntax Guard verification is still undocumented and unproven inside this repo.

View File

@@ -1,51 +0,0 @@
# Bezalel Gemma 4 VPS Wiring
Issue: timmy-home #544
This helper is the repo-side operator bundle for wiring a live Gemma 4 endpoint into Bezalel's VPS config without hardcoding one dead pod forever.
What `scripts/bezalel_gemma4_vps.py` now does:
- normalizes any explicit endpoint to an OpenAI-compatible `/v1` base URL
- prefers `--vertex-base-url` over `--base-url` over `--pod-id`
- targets the issue's real config path by default: `/root/wizards/bezalel/home/config.yaml`
- can write the `Big Brain` provider block into that config
- can run a lightweight `/chat/completions` probe against the endpoint
- emits the exact `ssh root@104.131.15.18 ... curl ...` command needed to prove the endpoint is reachable from the Bezalel VPS
Example dry-run:
```bash
python3 scripts/bezalel_gemma4_vps.py \
--base-url https://<pod-id>-11434.proxy.runpod.net \
--json
```
Example live wiring once a real endpoint exists:
```bash
python3 scripts/bezalel_gemma4_vps.py \
--base-url https://<pod-id>-11434.proxy.runpod.net \
--config-path /root/wizards/bezalel/home/config.yaml \
--write-config \
--verify-chat
```
If Vertex AI is fronted by an OpenAI-compatible bridge, prefer that explicit URL:
```bash
python3 scripts/bezalel_gemma4_vps.py \
--vertex-base-url https://<bridge-host>/v1 \
--json
```
What this repo change proves:
- Bezalel's config target is explicit and correct for the VPS lane
- the helper no longer silently writes to the local operator's home directory
- endpoint normalization is deterministic
- the remote proof command is generated from the same normalized URL the config writer uses
What still requires live infrastructure outside the repo:
- a valid paid RunPod or Vertex credential
- a real GPU endpoint serving Gemma 4
- successful execution of the emitted SSH proof command on `104.131.15.18`
- successful Bezalel Hermes chat against that live endpoint

View File

@@ -8,14 +8,12 @@ Safe by default:
- can call the RunPod GraphQL API if a key is provided and --apply-runpod is used
- can update a Hermes config file in-place when --write-config is used
- can verify an OpenAI-compatible endpoint with a lightweight chat probe
- emits the exact Bezalel VPS curl proof command for remote verification
"""
from __future__ import annotations
import argparse
import json
import shlex
from pathlib import Path
from typing import Any
from urllib import request
@@ -29,9 +27,7 @@ DEFAULT_IMAGE = "ollama/ollama:latest"
DEFAULT_MODEL = "gemma4:latest"
DEFAULT_PROVIDER_NAME = "Big Brain"
DEFAULT_TOKEN_FILE = Path.home() / ".config" / "runpod" / "access_key"
DEFAULT_CONFIG_PATH = Path("/root/wizards/bezalel/home/config.yaml")
DEFAULT_BEZALEL_VPS_HOST = "104.131.15.18"
DEFAULT_VERIFY_PROMPT = "Say READY"
DEFAULT_CONFIG_PATH = Path.home() / "wizards" / "bezalel" / "home" / "config.yaml"
def build_deploy_mutation(
@@ -67,31 +63,8 @@ mutation {{
'''.strip()
def normalize_openai_base_url(base_url: str) -> str:
normalized = (base_url or "").strip().rstrip("/")
if not normalized:
return normalized
for suffix in ("/chat/completions", "/models"):
if normalized.endswith(suffix):
normalized = normalized[: -len(suffix)]
break
if not normalized.endswith("/v1"):
normalized = f"{normalized}/v1"
return normalized
def build_runpod_endpoint(pod_id: str, port: int = 11434) -> str:
return normalize_openai_base_url(f"https://{pod_id}-{port}.proxy.runpod.net")
def resolve_base_url(*, vertex_base_url: str | None = None, base_url: str | None = None, pod_id: str | None = None) -> tuple[str | None, str | None]:
if vertex_base_url:
return normalize_openai_base_url(vertex_base_url), "vertex_base_url"
if base_url:
return normalize_openai_base_url(base_url), "base_url"
if pod_id:
return build_runpod_endpoint(pod_id), "pod_id"
return None, None
return f"https://{pod_id}-{port}.proxy.runpod.net/v1"
def parse_deploy_response(payload: dict[str, Any]) -> dict[str, str]:
@@ -129,7 +102,7 @@ def update_config_text(config_text: str, *, base_url: str, model: str = DEFAULT_
replacement = {
"name": provider_name,
"base_url": normalize_openai_base_url(base_url),
"base_url": base_url,
"api_key": "",
"model": model,
}
@@ -156,8 +129,7 @@ def write_config_file(config_path: Path, *, base_url: str, model: str = DEFAULT_
return updated
def verify_openai_chat(base_url: str, *, model: str = DEFAULT_MODEL, prompt: str = DEFAULT_VERIFY_PROMPT) -> str:
base_url = normalize_openai_base_url(base_url)
def verify_openai_chat(base_url: str, *, model: str = DEFAULT_MODEL, prompt: str = "Say READY") -> str:
payload = json.dumps(
{
"model": model,
@@ -167,7 +139,7 @@ def verify_openai_chat(base_url: str, *, model: str = DEFAULT_MODEL, prompt: str
}
).encode()
req = request.Request(
f"{base_url}/chat/completions",
f"{base_url.rstrip('/')}/chat/completions",
data=payload,
headers={"Content-Type": "application/json"},
method="POST",
@@ -177,30 +149,6 @@ def verify_openai_chat(base_url: str, *, model: str = DEFAULT_MODEL, prompt: str
return data["choices"][0]["message"]["content"]
def build_vps_verify_command(
*,
base_url: str,
model: str = DEFAULT_MODEL,
prompt: str = DEFAULT_VERIFY_PROMPT,
vps_host: str = DEFAULT_BEZALEL_VPS_HOST,
) -> str:
payload = json.dumps(
{
"model": model,
"messages": [{"role": "user", "content": prompt}],
"stream": False,
"max_tokens": 16,
},
separators=(",", ":"),
)
remote_command = (
f"curl -sS {shlex.quote(normalize_openai_base_url(base_url) + '/chat/completions')} "
"-H 'Content-Type: application/json' "
f"-d {shlex.quote(payload)}"
)
return f"ssh root@{vps_host} {shlex.quote(remote_command)}"
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Provision a RunPod Gemma 4 endpoint and wire a Hermes config for Bezalel.")
parser.add_argument("--pod-name", default="bezalel-gemma4")
@@ -212,8 +160,6 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--config-path", type=Path, default=DEFAULT_CONFIG_PATH)
parser.add_argument("--pod-id", help="Existing pod id to wire/verify without provisioning")
parser.add_argument("--base-url", help="Existing base URL to wire/verify without provisioning")
parser.add_argument("--vertex-base-url", help="OpenAI-compatible Vertex bridge URL; takes precedence over --base-url and --pod-id")
parser.add_argument("--vps-host", default=DEFAULT_BEZALEL_VPS_HOST, help="Bezalel VPS host for the remote curl proof command")
parser.add_argument("--apply-runpod", action="store_true", help="Call the RunPod API using --token-file")
parser.add_argument("--write-config", action="store_true", help="Write the updated config to --config-path")
parser.add_argument("--verify-chat", action="store_true", help="Call the OpenAI-compatible chat endpoint")
@@ -229,18 +175,13 @@ def main() -> None:
"cloud_type": args.cloud_type,
"model": args.model,
"provider_name": args.provider_name,
"config_path": str(args.config_path),
"vps_host": args.vps_host,
"actions": [],
}
base_url, base_url_source = resolve_base_url(
vertex_base_url=args.vertex_base_url,
base_url=args.base_url,
pod_id=args.pod_id,
)
if base_url_source:
summary["actions"].append(f"resolved_base_url_from_{base_url_source}")
base_url = args.base_url
if not base_url and args.pod_id:
base_url = build_runpod_endpoint(args.pod_id)
summary["actions"].append("computed_base_url_from_pod_id")
if args.apply_runpod:
if not args.token_file.exists():
@@ -255,17 +196,12 @@ def main() -> None:
base_url = build_runpod_endpoint("<pod-id>")
summary["actions"].append("using_placeholder_base_url")
summary["base_url"] = normalize_openai_base_url(base_url)
summary["base_url"] = base_url
summary["config_preview"] = update_config_text("", base_url=base_url, model=args.model, provider_name=args.provider_name)
summary["vps_verify_command"] = build_vps_verify_command(
base_url=base_url,
model=args.model,
prompt=DEFAULT_VERIFY_PROMPT,
vps_host=args.vps_host,
)
if args.write_config:
write_config_file(args.config_path, base_url=base_url, model=args.model, provider_name=args.provider_name)
summary["config_path"] = str(args.config_path)
summary["actions"].append("wrote_config")
if args.verify_chat:
@@ -278,10 +214,8 @@ def main() -> None:
print("--- Bezalel Gemma4 RunPod Wiring ---")
print(f"Pod name: {args.pod_name}")
print(f"Base URL: {summary['base_url']}")
print(f"Base URL: {base_url}")
print(f"Model: {args.model}")
print(f"Config target: {args.config_path}")
print(f"Bezalel VPS proof: {summary['vps_verify_command']}")
if args.write_config:
print(f"Config written: {args.config_path}")
if "verify_response" in summary:

View File

@@ -0,0 +1,418 @@
#!/usr/bin/env python3
"""Ground timmy-home #524 as an executable status report.
Refs: timmy-home #524
"""
from __future__ import annotations
import argparse
import json
from copy import deepcopy
from pathlib import Path
from typing import Any
from urllib import request
DEFAULT_BASE_URL = "https://forge.alexanderwhitestone.com/api/v1"
DEFAULT_OWNER = "Timmy_Foundation"
DEFAULT_REPO = "timmy-home"
DEFAULT_TOKEN_FILE = Path.home() / ".config" / "gitea" / "token"
DEFAULT_REPO_ROOT = Path(__file__).resolve().parents[1]
DEFAULT_DOC_PATH = DEFAULT_REPO_ROOT / "docs" / "UNIFIED_FLEET_SOVEREIGNTY_STATUS.md"
DIRECTIVE_TITLE = "[DIRECTIVE] Unified Fleet Sovereignty & Comms Migration"
DIRECTIVE_SUMMARY = (
"Issue #524 is a multi-lane directive, not a one-commit feature. "
"This report grounds the directive in repo evidence, highlights stale cross-links, "
"and names the missing operator bundles that still need real execution."
)
DEFAULT_REFERENCE_SNAPSHOT = {
388: {
"title": "[KT] Fleet Lexicon & Techniques — Shared Vocabulary, Patterns, and Standards for All Agents",
"state": "closed",
},
103: {
"title": "Build comprehensive caching layer — cache everywhere",
"state": "open",
},
139: {
"title": "🐣 Allegro-Primus is born",
"state": "open",
},
813: {
"title": "docs: refresh the-playground genome analysis (#671)",
"state": "closed",
},
819: {
"title": "docs: verify #648 already implemented (closes #818)",
"state": "open",
},
}
WORKSTREAMS = [
{
"key": "nostr-migration",
"name": "Nostr Migration Leadership",
"requirement": "Replace Telegram with relay-based sovereign comms, verify wizard keypairs, and prove the NIP-29 group path is stable.",
"references": [813, 819],
"expected_keywords": ["nostr", "relay", "telegram", "comms", "messenger"],
"repo_evidence": [
{
"path": "infrastructure/timmy-bridge/client/timmy_client.py",
"description": "Nostr event client scaffold already exists",
},
{
"path": "infrastructure/timmy-bridge/monitor/timmy_monitor.py",
"description": "Nostr relay monitor already exists",
},
{
"path": "specs/wizard-telegram-bot-cutover.md",
"description": "Telegram cutover planning exists, so the migration lane is real",
},
],
"missing_deliverables": [
"wizard keypair inventory and ownership matrix",
"NIP-29 relay group verification report",
"operator runbook for cutting traffic off Telegram",
],
"why_open": "The repo has Nostr-adjacent scaffolding, but the directive still lacks a verified migration packet and the cited issue links drift away from the stated Nostr scope.",
},
{
"key": "lexicon-enforcement",
"name": "Lexicon Enforcement",
"requirement": "Enforce the Fleet Lexicon in PR review and issue triage so the team uses one shared language.",
"references": [388],
"expected_keywords": ["lexicon", "vocabulary", "standards", "shared vocabulary"],
"repo_evidence": [
{
"path": "docs/WIZARD_APPRENTICESHIP_CHARTER.md",
"description": "The repo already uses wizard-language canon in docs",
},
{
"path": "specs/timmy-ezra-bezalel-canon-sheet.md",
"description": "Canonical agent naming already exists",
},
{
"path": "docs/OPERATIONS_DASHBOARD.md",
"description": "Operational roles are already described in repo language",
},
],
"missing_deliverables": [
"machine-checkable lexicon policy for review/triage",
"terminology lint or reviewer checklist tied to the lexicon",
],
"why_open": "The naming canon exists, but there is still no executable enforcement bundle that would catch drift during future reviews and triage passes.",
},
{
"key": "feature-audit",
"name": "v0.7.0 Feature Audit",
"requirement": "Audit Hermes features that can reduce cloud dependency and turn the findings into a sovereignty implementation plan.",
"references": [139],
"expected_keywords": ["hermes", "feature", "audit", "v0.7.0", "sovereignty"],
"repo_evidence": [
{
"path": "scripts/sovereignty_audit.py",
"description": "Cloud-vs-local audit machinery already exists",
},
{
"path": "reports/evaluations/2026-04-15-phase-4-sovereignty-audit.md",
"description": "Recent sovereignty audit report is committed",
},
{
"path": "timmy-local/README.md",
"description": "Local-first status is already documented for operators",
},
],
"missing_deliverables": [
"Hermes v0.7.0 feature inventory linked to cloud-reduction leverage",
"Sovereignty Implementation Plan derived from that feature audit",
],
"why_open": "The repo has sovereignty-audit infrastructure, but it does not yet contain the requested v0.7.0 feature inventory or the plan that turns those findings into rollout steps.",
},
{
"key": "morrowind-benchmark",
"name": "Morrowind Local-First Benchmark",
"requirement": "Compare cloud and local Morrowind agents, prove local parity where possible, and document the reasoning gap when it fails.",
"references": [103],
"expected_keywords": ["morrowind", "combat", "benchmark", "local", "cloud"],
"repo_evidence": [
{
"path": "morrowind/local_brain.py",
"description": "Local Morrowind control loop already exists",
},
{
"path": "morrowind/mcp_server.py",
"description": "Morrowind MCP control surface is already wired",
},
{
"path": "morrowind/pilot.py",
"description": "Trajectory logging for evaluation already exists",
},
],
"missing_deliverables": [
"cloud-vs-local benchmark report for the combat loop",
"reasoning-gap writeup tied to a proposed LoRA/fine-tune path",
],
"why_open": "The repo has a local Morrowind stack, but it does not yet contain the requested benchmark artifact; the cited issue number also points at an unrelated caching task.",
},
{
"key": "syntax-guard",
"name": "Infrastructure Hardening / Syntax Guard",
"requirement": "Verify Syntax Guard pre-receive protection across Gitea repos so syntax failures stop earlier.",
"references": [],
"expected_keywords": [],
"repo_evidence": [],
"missing_deliverables": [
"repo inventory of Gitea targets that should carry Syntax Guard",
"deployment verifier for hook presence across those repos",
"operator report proving installation state instead of assuming it",
],
"why_open": "No repo-managed syntax-guard verifier is present yet, so this directive still depends on manual trust rather than auditable proof.",
},
]
def default_snapshot() -> dict[int, dict[str, str]]:
return deepcopy(DEFAULT_REFERENCE_SNAPSHOT)
class GiteaClient:
def __init__(self, token: str, owner: str = DEFAULT_OWNER, repo: str = DEFAULT_REPO, base_url: str = DEFAULT_BASE_URL):
self.token = token
self.owner = owner
self.repo = repo
self.base_url = base_url.rstrip("/")
def get_issue(self, issue_number: int) -> dict[str, Any]:
req = request.Request(
f"{self.base_url}/repos/{self.owner}/{self.repo}/issues/{issue_number}",
headers={"Authorization": f"token {self.token}", "Accept": "application/json"},
)
with request.urlopen(req, timeout=30) as resp:
return json.loads(resp.read().decode())
def load_snapshot(path: Path | None = None) -> dict[int, dict[str, str]]:
if path is None:
return default_snapshot()
data = json.loads(path.read_text(encoding="utf-8"))
return {int(k): v for k, v in data.items()}
def refresh_snapshot(token_file: Path = DEFAULT_TOKEN_FILE) -> dict[int, dict[str, str]]:
token = token_file.read_text(encoding="utf-8").strip()
client = GiteaClient(token=token)
snapshot: dict[int, dict[str, str]] = {}
for issue_number in sorted(DEFAULT_REFERENCE_SNAPSHOT):
issue = client.get_issue(issue_number)
snapshot[issue_number] = {
"title": issue["title"],
"state": issue["state"],
}
return snapshot
def collect_repo_evidence(entries: list[dict[str, str]], repo_root: Path) -> tuple[list[str], list[str]]:
present: list[str] = []
missing: list[str] = []
for entry in entries:
label = f"`{entry['path']}` — {entry['description']}"
if (repo_root / entry["path"]).exists():
present.append(label)
else:
missing.append(label)
return present, missing
def evaluate_reference(issue_number: int, snapshot: dict[int, dict[str, str]], expected_keywords: list[str]) -> dict[str, Any]:
record = snapshot.get(issue_number, {"title": "missing from snapshot", "state": "unknown"})
title = record["title"]
title_lower = title.lower()
matched_keywords = [kw for kw in expected_keywords if kw.lower() in title_lower]
aligned = bool(matched_keywords) if expected_keywords else True
return {
"number": issue_number,
"title": title,
"state": record["state"],
"aligned": aligned,
"matched_keywords": matched_keywords,
}
def classify_workstream(reference_results: list[dict[str, Any]], evidence_present: list[str], missing_deliverables: list[str]) -> str:
has_drift = any(not item["aligned"] for item in reference_results)
if not evidence_present:
return "MISSING"
if has_drift or missing_deliverables:
return "PARTIAL"
return "GROUNDED"
def evaluate_directive(snapshot: dict[int, dict[str, str]] | None = None, repo_root: Path | None = None) -> dict[str, Any]:
snapshot = snapshot or default_snapshot()
repo_root = repo_root or DEFAULT_REPO_ROOT
workstreams: list[dict[str, Any]] = []
drift_items: list[str] = []
for lane in WORKSTREAMS:
reference_results = [
evaluate_reference(issue_number, snapshot, lane["expected_keywords"])
for issue_number in lane["references"]
]
present, missing = collect_repo_evidence(lane["repo_evidence"], repo_root)
for item in reference_results:
if not item["aligned"]:
drift_items.append(
f"#{item['number']} is cited for {lane['name']}, but its current title is '{item['title']}'."
)
workstream = {
"key": lane["key"],
"name": lane["name"],
"requirement": lane["requirement"],
"reference_results": reference_results,
"repo_evidence_present": present,
"repo_evidence_missing": missing,
"missing_deliverables": list(lane["missing_deliverables"]),
"why_open": lane["why_open"],
}
workstream["status"] = classify_workstream(
reference_results=reference_results,
evidence_present=present,
missing_deliverables=workstream["missing_deliverables"],
)
workstreams.append(workstream)
next_actions: list[str] = []
for workstream in workstreams:
if workstream["missing_deliverables"]:
next_actions.append(f"{workstream['name']}: {workstream['missing_deliverables'][0]}")
return {
"issue_number": 524,
"title": DIRECTIVE_TITLE,
"summary": DIRECTIVE_SUMMARY,
"reference_snapshot": {str(k): v for k, v in sorted(snapshot.items())},
"workstreams": workstreams,
"reference_drift": drift_items,
"grounded_workstreams": sum(1 for item in workstreams if item["status"] == "GROUNDED"),
"partial_workstreams": sum(1 for item in workstreams if item["status"] == "PARTIAL"),
"missing_workstreams": sum(1 for item in workstreams if item["status"] == "MISSING"),
"next_actions": next_actions,
}
def render_markdown(result: dict[str, Any]) -> str:
lines = [
f"# {result['title']}",
"",
"Grounding report for `timmy-home #524`.",
"",
result["summary"],
"",
"This remains a `Refs #524` artifact. The directive spans multiple repos and operator actions, so this report makes the current repo-side state executable without pretending the whole migration is complete.",
"",
"## Directive Snapshot",
"",
f"- Repo-grounded workstreams: {result['grounded_workstreams']}",
f"- Partial workstreams: {result['partial_workstreams']}",
f"- Missing workstreams: {result['missing_workstreams']}",
f"- Drifted references: {len(result['reference_drift'])}",
"",
"## Reference Drift",
"",
]
if result["reference_drift"]:
lines.extend(f"- {item}" for item in result["reference_drift"])
else:
lines.append("- No stale cross-links detected in the directive snapshot.")
lines.extend(["", "## Workstream Matrix", ""])
for index, workstream in enumerate(result["workstreams"], start=1):
lines.extend(
[
f"### {index}. {workstream['name']}{workstream['status']}",
"",
f"- Requirement: {workstream['requirement']}",
]
)
if workstream["reference_results"]:
lines.append("- Referenced issues:")
for ref in workstream["reference_results"]:
alignment = "aligned" if ref["aligned"] else "DRIFT"
lines.append(
f" - #{ref['number']} ({ref['state']}) — {ref['title']} [{alignment}]"
)
else:
lines.append("- Referenced issues: none listed in the directive body")
if workstream["repo_evidence_present"]:
lines.append("- Repo evidence present:")
lines.extend(f" - {item}" for item in workstream["repo_evidence_present"])
else:
lines.append("- Repo evidence present: none")
if workstream["repo_evidence_missing"]:
lines.append("- Repo evidence expected but missing:")
lines.extend(f" - {item}" for item in workstream["repo_evidence_missing"])
if workstream["missing_deliverables"]:
lines.append("- Missing operator deliverables:")
lines.extend(f" - {item}" for item in workstream["missing_deliverables"])
else:
lines.append("- Missing operator deliverables: none")
lines.append(f"- Why this lane remains open: {workstream['why_open']}")
lines.append("")
lines.extend(["## Highest-Leverage Next Actions", ""])
lines.extend(f"- {item}" for item in result["next_actions"])
lines.extend(
[
"",
"## Why #524 Remains Open",
"",
"- The directive bundles five separate workstreams with different evidence surfaces.",
"- Multiple cited issue numbers have drifted away from the work they are supposed to anchor.",
"- Repo scaffolding exists for Nostr, sovereignty audits, and Morrowind, but the operator-facing bundles are still missing.",
"- Syntax Guard verification is still undocumented and unproven inside this repo.",
]
)
return "\n".join(lines).rstrip() + "\n"
def main() -> None:
parser = argparse.ArgumentParser(description="Render the unified fleet sovereignty status report for issue #524")
parser.add_argument("--snapshot", help="Optional JSON snapshot file overriding the default issue-title/state snapshot")
parser.add_argument("--live", action="store_true", help="Refresh the issue snapshot from Gitea before rendering")
parser.add_argument("--token-file", default=str(DEFAULT_TOKEN_FILE), help="Token file used with --live")
parser.add_argument("--output", help="Optional path to write the rendered report")
parser.add_argument("--json", action="store_true", help="Print computed JSON instead of markdown")
args = parser.parse_args()
if args.live:
snapshot = refresh_snapshot(Path(args.token_file).expanduser())
else:
snapshot = load_snapshot(Path(args.snapshot).expanduser() if args.snapshot else None)
result = evaluate_directive(snapshot=snapshot, repo_root=DEFAULT_REPO_ROOT)
rendered = json.dumps(result, indent=2) if args.json else render_markdown(result)
if args.output:
output_path = Path(args.output).expanduser()
output_path.parent.mkdir(parents=True, exist_ok=True)
output_path.write_text(rendered, encoding="utf-8")
print(f"Directive status written to {output_path}")
else:
print(rendered)
if __name__ == "__main__":
main()

View File

@@ -1,20 +1,14 @@
from __future__ import annotations
import json
from pathlib import Path
from unittest.mock import patch
import yaml
from scripts.bezalel_gemma4_vps import (
DEFAULT_CONFIG_PATH,
DEFAULT_BEZALEL_VPS_HOST,
build_deploy_mutation,
build_runpod_endpoint,
build_vps_verify_command,
normalize_openai_base_url,
parse_deploy_response,
resolve_base_url,
update_config_text,
verify_openai_chat,
)
@@ -34,10 +28,6 @@ class _FakeResponse:
return False
def test_default_config_path_targets_bezalel_vps_root_config() -> None:
assert DEFAULT_CONFIG_PATH == Path("/root/wizards/bezalel/home/config.yaml")
def test_build_deploy_mutation_uses_ollama_image_and_openai_port() -> None:
query = build_deploy_mutation(name="bezalel-gemma4", gpu_type="NVIDIA L40S", model_tag="gemma4:latest")
@@ -47,30 +37,6 @@ def test_build_deploy_mutation_uses_ollama_image_and_openai_port() -> None:
assert 'volumeMountPath: "/root/.ollama"' in query
def test_normalize_openai_base_url_adds_v1_suffix() -> None:
assert normalize_openai_base_url("https://pod-11434.proxy.runpod.net") == "https://pod-11434.proxy.runpod.net/v1"
def test_normalize_openai_base_url_trims_chat_completions_suffix() -> None:
assert normalize_openai_base_url("https://pod-11434.proxy.runpod.net/v1/chat/completions") == "https://pod-11434.proxy.runpod.net/v1"
def test_resolve_base_url_prefers_vertex_over_base_and_pod_id() -> None:
base_url, source = resolve_base_url(
vertex_base_url="https://vertex.example.com/openai",
base_url="https://plain.example.com",
pod_id="abc123",
)
assert source == "vertex_base_url"
assert base_url == "https://vertex.example.com/openai/v1"
def test_resolve_base_url_falls_back_to_base_url_before_pod_id() -> None:
base_url, source = resolve_base_url(base_url="https://plain.example.com", pod_id="abc123")
assert source == "base_url"
assert base_url == "https://plain.example.com/v1"
def test_build_runpod_endpoint_appends_v1_suffix() -> None:
assert build_runpod_endpoint("abc123") == "https://abc123-11434.proxy.runpod.net/v1"
@@ -94,7 +60,7 @@ def test_parse_deploy_response_extracts_pod_id_and_endpoint() -> None:
}
def test_update_config_text_upserts_big_brain_provider_and_normalizes_base_url() -> None:
def test_update_config_text_upserts_big_brain_provider() -> None:
original = """
model:
default: kimi-k2.5
@@ -106,7 +72,7 @@ custom_providers:
model: gemma3:27b
"""
updated = update_config_text(original, base_url="https://new-pod-11434.proxy.runpod.net", model="gemma4:latest")
updated = update_config_text(original, base_url="https://new-pod-11434.proxy.runpod.net/v1", model="gemma4:latest")
parsed = yaml.safe_load(updated)
assert parsed["model"] == {"default": "kimi-k2.5", "provider": "kimi-coding"}
@@ -120,14 +86,7 @@ custom_providers:
]
def test_build_vps_verify_command_targets_bezalel_host_and_chat_completions() -> None:
command = build_vps_verify_command(base_url="https://pod-11434.proxy.runpod.net", model="gemma4:latest")
assert command.startswith(f"ssh root@{DEFAULT_BEZALEL_VPS_HOST} ")
assert "/v1/chat/completions" in command
assert "gemma4:latest" in command
def test_verify_openai_chat_calls_chat_completions_with_normalized_base_url() -> None:
def test_verify_openai_chat_calls_chat_completions() -> None:
response_payload = {
"choices": [
{
@@ -142,7 +101,7 @@ def test_verify_openai_chat_calls_chat_completions_with_normalized_base_url() ->
"scripts.bezalel_gemma4_vps.request.urlopen",
return_value=_FakeResponse(response_payload),
) as mocked:
result = verify_openai_chat("https://pod-11434.proxy.runpod.net", model="gemma4:latest", prompt="say READY")
result = verify_openai_chat("https://pod-11434.proxy.runpod.net/v1", model="gemma4:latest", prompt="say READY")
assert result == "READY"
req = mocked.call_args.args[0]
@@ -150,10 +109,3 @@ def test_verify_openai_chat_calls_chat_completions_with_normalized_base_url() ->
payload = json.loads(req.data.decode())
assert payload["model"] == "gemma4:latest"
assert payload["messages"][0]["content"] == "say READY"
def test_readme_documents_root_config_path_and_vps_proof_command() -> None:
readme = Path("scripts/README_bezalel_gemma4_vps.md").read_text()
assert "/root/wizards/bezalel/home/config.yaml" in readme
assert "ssh root@104.131.15.18" in readme
assert "--vertex-base-url" in readme

View File

@@ -0,0 +1,77 @@
from __future__ import annotations
import importlib.util
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
SCRIPT_PATH = ROOT / "scripts" / "unified_fleet_sovereignty_status.py"
DOC_PATH = ROOT / "docs" / "UNIFIED_FLEET_SOVEREIGNTY_STATUS.md"
def _load_module(path: Path, name: str):
assert path.exists(), f"missing {path.relative_to(ROOT)}"
spec = importlib.util.spec_from_file_location(name, path)
assert spec and spec.loader
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
def _workstream(result: dict, key: str) -> dict:
for workstream in result["workstreams"]:
if workstream["key"] == key:
return workstream
raise AssertionError(f"missing workstream {key}")
def test_evaluate_directive_flags_reference_drift_without_faking_completion() -> None:
mod = _load_module(SCRIPT_PATH, "unified_fleet_sovereignty_status")
result = mod.evaluate_directive(snapshot=mod.default_snapshot(), repo_root=ROOT)
assert len(result["reference_drift"]) == 4
assert any("#813" in item for item in result["reference_drift"])
assert any("#103" in item for item in result["reference_drift"])
nostr = _workstream(result, "nostr-migration")
assert nostr["status"] == "PARTIAL"
assert any("timmy_client.py" in item for item in nostr["repo_evidence_present"])
lexicon = _workstream(result, "lexicon-enforcement")
assert all(item["aligned"] for item in lexicon["reference_results"])
assert lexicon["status"] == "PARTIAL"
syntax_guard = _workstream(result, "syntax-guard")
assert syntax_guard["status"] == "MISSING"
assert any("deployment verifier" in item for item in syntax_guard["missing_deliverables"])
def test_render_markdown_includes_required_sections_and_grounding_evidence() -> None:
mod = _load_module(SCRIPT_PATH, "unified_fleet_sovereignty_status")
result = mod.evaluate_directive(snapshot=mod.default_snapshot(), repo_root=ROOT)
report = mod.render_markdown(result)
for snippet in (
"# [DIRECTIVE] Unified Fleet Sovereignty & Comms Migration",
"## Directive Snapshot",
"## Reference Drift",
"## Workstream Matrix",
"### 5. Infrastructure Hardening / Syntax Guard — MISSING",
"`infrastructure/timmy-bridge/client/timmy_client.py`",
"machine-checkable lexicon policy for review/triage",
"## Why #524 Remains Open",
):
assert snippet in report
def test_repo_contains_committed_issue_524_grounding_doc() -> None:
assert DOC_PATH.exists(), "missing committed directive grounding doc"
text = DOC_PATH.read_text(encoding="utf-8")
for snippet in (
"# [DIRECTIVE] Unified Fleet Sovereignty & Comms Migration",
"## Reference Drift",
"## Workstream Matrix",
"## Highest-Leverage Next Actions",
"## Why #524 Remains Open",
):
assert snippet in text