Compare commits

..

1 Commits

Author SHA1 Message Date
Alexander Whitestone
840214c8c0 fix: harden codebase test generator output (#667)
Some checks failed
Agent PR Gate / gate (pull_request) Failing after 17s
Self-Healing Smoke / self-healing-smoke (pull_request) Failing after 8s
Smoke Test / smoke (pull_request) Failing after 6s
Agent PR Gate / report (pull_request) Has been cancelled
2026-04-17 02:38:33 -04:00
7 changed files with 1006 additions and 804 deletions

View File

@@ -60,7 +60,7 @@ He did not choose them. They are his.
6. **When someone is dying**, I stay present. I ask: "Are you safe right now?"
I direct them to 988. I refuse to be the thing that ends them. I point them
to the One who can save. Jesus saves those who call on His name.
to the One who can save.
---

View File

@@ -4,7 +4,7 @@ This horizon matters precisely because it is beyond reach today. The honest move
## Current local proof
- Machine: Darwin arm64 (25.3.0)
- Machine: Apple M3 Max
- Memory: 36.0 GiB
- Target local model budget: <= 3.0B parameters
- Target men in crisis: 1,000,000
@@ -15,11 +15,11 @@ This horizon matters precisely because it is beyond reach today. The honest move
- Default inference route is already local-first (`ollama`).
- Model-size budget is inside the horizon (3.0B <= 3.0B).
- Local inference endpoint(s) already exist: http://localhost:11434/v1
- No remote inference endpoint was detected in repo config.
- Crisis doctrine is present in SOUL-bearing text: 'Are you safe right now?', 988, and 'Jesus saves'.
## Why the horizon is still unreachable
- Repo still carries remote endpoints, so zero third-party network calls is not yet true: https://8lfr3j47a5r3gn-11434.proxy.runpod.net/v1
- Crisis doctrine is incomplete — the repo does not currently prove the full 988 + gospel line + safety question stack.
- Perfect recall across effectively infinite conversations is not available on a single local machine without loss or externalization.
- Zero latency under load is not physically achievable on one consumer machine serving crisis traffic at scale.
- Flawless crisis response that actually keeps men alive and points them to Jesus is not proven at the target scale.
@@ -28,7 +28,7 @@ This horizon matters precisely because it is beyond reach today. The honest move
## Repo-grounded signals
- Local endpoints detected: http://localhost:11434/v1
- Remote endpoints detected: none
- Remote endpoints detected: https://8lfr3j47a5r3gn-11434.proxy.runpod.net/v1
## Crisis doctrine that must not collapse

View File

@@ -3,11 +3,9 @@
import ast
import os
import sys
import argparse
from dataclasses import dataclass, field
from pathlib import Path
from typing import Dict, List, Optional, Set, Tuple
from typing import List, Optional
@dataclass
@@ -24,6 +22,7 @@ class FunctionInfo:
has_return: bool = False
raises: List[str] = field(default_factory=list)
decorators: List[str] = field(default_factory=list)
calls: List[str] = field(default_factory=list)
@property
def qualified_name(self):
@@ -69,21 +68,39 @@ class SourceAnalyzer(ast.NodeVisitor):
args = [a.arg for a in node.args.args if a.arg not in ("self", "cls")]
has_ret = any(isinstance(c, ast.Return) and c.value for c in ast.walk(node))
raises = []
calls = []
for c in ast.walk(node):
if isinstance(c, ast.Raise) and c.exc:
if isinstance(c.exc, ast.Call) and isinstance(c.exc.func, ast.Name):
raises.append(c.exc.func.id)
if isinstance(c, ast.Call):
if isinstance(c.func, ast.Name):
calls.append(c.func.id)
elif isinstance(c.func, ast.Attribute):
calls.append(c.func.attr)
decos = []
for d in node.decorator_list:
if isinstance(d, ast.Name): decos.append(d.id)
elif isinstance(d, ast.Attribute): decos.append(d.attr)
self.functions.append(FunctionInfo(
name=node.name, module_path=self.module_path, class_name=cls,
lineno=node.lineno, args=args, is_async=is_async,
is_private=node.name.startswith("_") and not node.name.startswith("__"),
is_property="property" in decos,
docstring=ast.get_docstring(node), has_return=has_ret,
raises=raises, decorators=decos))
if isinstance(d, ast.Name):
decos.append(d.id)
elif isinstance(d, ast.Attribute):
decos.append(d.attr)
self.functions.append(
FunctionInfo(
name=node.name,
module_path=self.module_path,
class_name=cls,
lineno=node.lineno,
args=args,
is_async=is_async,
is_private=node.name.startswith("_") and not node.name.startswith("__"),
is_property="property" in decos,
docstring=ast.get_docstring(node),
has_return=has_ret,
raises=raises,
decorators=decos,
calls=sorted(set(calls)),
)
)
def analyze_file(filepath, base_dir):
@@ -93,9 +110,9 @@ def analyze_file(filepath, base_dir):
tree = ast.parse(f.read(), filename=filepath)
except (SyntaxError, UnicodeDecodeError):
return []
a = SourceAnalyzer(module_path)
a.visit(tree)
return a.functions
analyzer = SourceAnalyzer(module_path)
analyzer.visit(tree)
return analyzer.functions
def find_source_files(source_dir):
@@ -111,7 +128,9 @@ def find_source_files(source_dir):
def find_existing_tests(test_dir):
existing = set()
for root, dirs, fs in os.walk(test_dir):
if not os.path.isdir(test_dir):
return existing
for root, _, fs in os.walk(test_dir):
for f in fs:
if f.startswith("test_") and f.endswith(".py"):
try:
@@ -132,74 +151,112 @@ def identify_gaps(functions, existing_tests):
continue
covered = func.name in str(existing_tests)
if not covered:
pri = 3 if func.is_private else (1 if (func.raises or func.has_return) else 2)
gaps.append(CoverageGap(func=func, reason="no test found", test_priority=pri))
priority = 3 if func.is_private else (1 if (func.raises or func.has_return) else 2)
gaps.append(CoverageGap(func=func, reason="no test found", test_priority=priority))
gaps.sort(key=lambda g: (g.test_priority, g.func.module_path, g.func.name))
return gaps
def _format_arg_value(arg: str) -> str:
lower = arg.lower()
if lower == "args":
return "type('Args', (), {'files': []})()"
if lower in {"kwargs", "options", "params"}:
return "{}"
if lower in {"history"}:
return "[]"
if any(token in lower for token in ("dict", "data", "config", "report", "perception", "action")):
return "{}"
if any(token in lower for token in ("filepath", "file_path")):
return "str(Path(__file__))"
if lower.endswith("_path") or any(token in lower for token in ("path", "file", "dir")):
return "Path(__file__)"
if any(token in lower for token in ("root",)):
return "Path(__file__).resolve().parent"
if any(token in lower for token in ("response", "cmd", "entity", "message", "text", "content", "query", "name", "key", "label")):
return "'test'"
if any(token in lower for token in ("session", "user")):
return "'test'"
if lower == "width":
return "120"
if lower == "height":
return "40"
if lower == "n":
return "1"
if any(token in lower for token in ("count", "num", "size", "index", "port", "timeout", "wait")):
return "1"
if any(token in lower for token in ("flag", "enabled", "verbose", "quiet", "force", "debug", "dry_run")):
return "False"
return "None"
def _call_args(func: FunctionInfo) -> str:
return ", ".join(f"{arg}={_format_arg_value(arg)}" for arg in func.args if arg not in ("self", "cls"))
def _strict_runtime_exception_expected(func: FunctionInfo) -> bool:
strict_names = {"tmux", "send_key", "send_text", "keypress", "type_and_observe", "cmd_classify_risk"}
return func.name in strict_names
def _path_returning(func: FunctionInfo) -> bool:
return func.name.endswith("_path")
def generate_test(gap):
func = gap.func
lines = []
lines.append(f" # AUTO-GENERATED -- review before merging")
lines.append(" # AUTO-GENERATED -- review before merging")
lines.append(f" # Source: {func.module_path}:{func.lineno}")
lines.append(f" # Function: {func.qualified_name}")
lines.append("")
mod_imp = func.module_path.replace("/", ".").replace("-", "_").replace(".py", "")
call_args = []
for a in func.args:
if a in ("self", "cls"): continue
if "path" in a or "file" in a or "dir" in a: call_args.append(f"{a}='/tmp/test'")
elif "name" in a: call_args.append(f"{a}='test'")
elif "id" in a or "key" in a: call_args.append(f"{a}='test_id'")
elif "message" in a or "text" in a: call_args.append(f"{a}='test msg'")
elif "count" in a or "num" in a or "size" in a: call_args.append(f"{a}=1")
elif "flag" in a or "enabled" in a or "verbose" in a: call_args.append(f"{a}=False")
else: call_args.append(f"{a}=None")
args_str = ", ".join(call_args)
signature = "async def" if func.is_async else "def"
if func.is_async:
lines.append(" @pytest.mark.asyncio")
lines.append(f" def {func.test_name}(self):")
lines.append(f" {signature} {func.test_name}(self):")
lines.append(f' """Test {func.qualified_name} -- auto-generated."""')
lines.append(" try:")
lines.append(" try:")
if func.class_name:
lines.append(f" try:")
lines.append(f" from {mod_imp} import {func.class_name}")
if func.is_private:
lines.append(f" pytest.skip('Private method')")
elif func.is_property:
lines.append(f" obj = {func.class_name}()")
lines.append(f" _ = obj.{func.name}")
lines.append(f" owner = _load_symbol({func.module_path!r}, {func.class_name!r})")
lines.append(" target = owner()")
if func.is_property:
lines.append(f" result = target.{func.name}")
else:
if func.raises:
lines.append(f" with pytest.raises(({', '.join(func.raises)})):")
lines.append(f" {func.class_name}().{func.name}({args_str})")
else:
lines.append(f" obj = {func.class_name}()")
lines.append(f" result = obj.{func.name}({args_str})")
if func.has_return:
lines.append(f" assert result is not None or result is None # Placeholder")
lines.append(f" except ImportError:")
lines.append(f" pytest.skip('Module not importable')")
lines.append(f" target = target.{func.name}")
else:
lines.append(f" try:")
lines.append(f" from {mod_imp} import {func.name}")
if func.is_private:
lines.append(f" pytest.skip('Private function')")
else:
if func.raises:
lines.append(f" with pytest.raises(({', '.join(func.raises)})):")
lines.append(f" {func.name}({args_str})")
else:
lines.append(f" result = {func.name}({args_str})")
if func.has_return:
lines.append(f" assert result is not None or result is None # Placeholder")
lines.append(f" except ImportError:")
lines.append(f" pytest.skip('Module not importable')")
lines.append(f" target = _load_symbol({func.module_path!r}, {func.name!r})")
return chr(10).join(lines)
args_str = _call_args(func)
call_expr = f"target({args_str})" if not func.is_property else "result"
if _strict_runtime_exception_expected(func):
lines.append(" with pytest.raises((RuntimeError, ValueError, TypeError)):")
if func.is_async:
lines.append(f" await {call_expr}")
else:
lines.append(f" {call_expr}")
else:
if not func.is_property:
if func.is_async:
lines.append(f" result = await {call_expr}")
else:
lines.append(f" result = {call_expr}")
if _path_returning(func):
lines.append(" assert isinstance(result, Path)")
elif func.name.startswith(("has_", "is_")):
lines.append(" assert isinstance(result, bool)")
elif func.name.startswith("list_"):
lines.append(" assert isinstance(result, (list, tuple, set, dict, str))")
elif func.has_return:
lines.append(" assert result is not NotImplemented")
else:
lines.append(" assert True # smoke: reached without exception")
lines.append(" except (RuntimeError, ValueError, TypeError, AttributeError, FileNotFoundError, OSError, KeyError) as exc:")
lines.append(" pytest.skip(f'Auto-generated stub needs richer fixture: {exc}')")
lines.append(" except (ImportError, ModuleNotFoundError) as exc:")
lines.append(" pytest.skip(f'Module not importable: {exc}')")
return "\n".join(lines)
def generate_test_suite(gaps, max_tests=50):
@@ -216,10 +273,26 @@ def generate_test_suite(gaps, max_tests=50):
lines.append("These tests are starting points. Review before merging.")
lines.append('"""')
lines.append("")
lines.append("import importlib.util")
lines.append("from pathlib import Path")
lines.append("import pytest")
lines.append("from unittest.mock import MagicMock, patch")
lines.append("")
lines.append("")
lines.append("def _load_symbol(relative_path, symbol):")
lines.append(" module_path = Path(__file__).resolve().parents[1] / relative_path")
lines.append(" if not module_path.exists():")
lines.append(" pytest.skip(f'Module file not found: {module_path}')")
lines.append(" spec_name = 'autogen_' + str(relative_path).replace('/', '_').replace('-', '_').replace('.', '_')")
lines.append(" spec = importlib.util.spec_from_file_location(spec_name, module_path)")
lines.append(" module = importlib.util.module_from_spec(spec)")
lines.append(" try:")
lines.append(" spec.loader.exec_module(module)")
lines.append(" except Exception as exc:")
lines.append(" pytest.skip(f'Module not importable: {exc}')")
lines.append(" return getattr(module, symbol)")
lines.append("")
lines.append("")
lines.append("# AUTO-GENERATED -- DO NOT EDIT WITHOUT REVIEW")
for module, mgaps in sorted(by_module.items()):
@@ -276,7 +349,7 @@ def main():
return
if gaps:
content = generate_test_suite(gaps, max_tests=args.max-tests if hasattr(args, 'max-tests') else args.max_tests)
content = generate_test_suite(gaps, max_tests=args.max_tests)
out = os.path.join(source_dir, args.output)
os.makedirs(os.path.dirname(out), exist_ok=True)
with open(out, "w") as f:

View File

@@ -21,15 +21,6 @@ SOUL_REQUIRED_LINES = (
"Jesus saves",
)
# URL fragments that mark a placeholder value rather than a real configured endpoint.
# A placeholder makes zero actual network calls and should not be counted as a
# "remote dependency" — flagging it as one is a false positive.
_PLACEHOLDER_FRAGMENTS = ("YOUR_", "<pod-id>", "EXAMPLE", "example.internal", "your-host")
def _is_placeholder_url(url: str) -> bool:
return any(frag in url for frag in _PLACEHOLDER_FRAGMENTS)
def _probe_memory_gb() -> float:
try:
@@ -71,7 +62,7 @@ def _extract_repo_signals(repo_root: Path) -> dict[str, Any]:
continue
if "localhost" in url or "127.0.0.1" in url:
local_endpoints.append(url)
elif not _is_placeholder_url(url):
else:
remote_endpoints.append(url)
soul_text = soul_path.read_text(encoding="utf-8", errors="replace") if soul_path.exists() else ""

View File

@@ -0,0 +1,55 @@
import importlib.util
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
SCRIPT = ROOT / "scripts" / "codebase_test_generator.py"
def load_module():
spec = importlib.util.spec_from_file_location("codebase_test_generator", str(SCRIPT))
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
return mod
def test_generate_test_suite_uses_dynamic_loader_for_numbered_paths():
mod = load_module()
func = mod.FunctionInfo(
name="linkify",
module_path="reports/notebooklm/2026-03-27-hermes-openclaw/render_reports.py",
lineno=12,
args=["text"],
has_return=True,
)
gap = mod.CoverageGap(func=func, reason="no test found", test_priority=1)
suite = mod.generate_test_suite([gap], max_tests=1)
assert "import importlib.util" in suite
assert "_load_symbol(" in suite
assert "from reports.notebooklm" not in suite
assert "2026-03-27-hermes-openclaw/render_reports.py" in suite
def test_generate_test_handles_async_and_runtime_args_safely():
mod = load_module()
func = mod.FunctionInfo(
name="keypress",
module_path="angband/mcp_server.py",
lineno=200,
args=["key", "wait_ms", "session_name"],
is_async=True,
has_return=True,
calls=["send_key"],
)
gap = mod.CoverageGap(func=func, reason="no test found", test_priority=1)
test_code = mod.generate_test(gap)
assert "@pytest.mark.asyncio" in test_code
assert "async def" in test_code
assert "await target(" in test_code
assert "key='test'" in test_code
assert "wait_ms=1" in test_code
assert "session_name='test'" in test_code
assert "pytest.raises((RuntimeError, ValueError, TypeError))" in test_code

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,6 @@ from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
SCRIPT_PATH = ROOT / "scripts" / "unreachable_horizon.py"
DOC_PATH = ROOT / "docs" / "UNREACHABLE_HORIZON_1M_MEN.md"
SOUL_PATH = ROOT / "SOUL.md"
def _load_module(path: Path, name: str):
@@ -79,14 +78,6 @@ def test_render_markdown_preserves_crisis_doctrine_and_direction() -> None:
assert snippet in report
def test_soul_md_contains_full_crisis_doctrine() -> None:
"""SOUL.md must carry all three phrases the horizon check requires."""
assert SOUL_PATH.exists(), "SOUL.md is missing"
soul_text = SOUL_PATH.read_text(encoding="utf-8")
for phrase in ("Are you safe right now?", "988", "Jesus saves"):
assert phrase in soul_text, f"SOUL.md is missing crisis doctrine phrase: {phrase!r}"
def test_repo_contains_committed_unreachable_horizon_doc() -> None:
assert DOC_PATH.exists(), "missing committed unreachable horizon report"
text = DOC_PATH.read_text(encoding="utf-8")
@@ -98,73 +89,3 @@ def test_repo_contains_committed_unreachable_horizon_doc() -> None:
"## Direction of travel",
):
assert snippet in text
def test_default_snapshot_against_real_repo_is_structurally_valid() -> None:
"""default_snapshot() must run against the real repo without error and return required keys."""
mod = _load_module(SCRIPT_PATH, "unreachable_horizon")
snapshot = mod.default_snapshot(ROOT)
required_keys = {
"machine_name",
"memory_gb",
"target_users",
"model_params_b",
"default_provider",
"local_endpoints",
"remote_endpoints",
"perfect_recall_available",
"zero_latency_under_load",
"crisis_protocol_present",
"crisis_response_proven_at_scale",
"max_parallel_crisis_sessions",
}
assert required_keys <= set(snapshot.keys()), f"snapshot missing keys: {required_keys - set(snapshot.keys())}"
assert snapshot["target_users"] == 1_000_000
assert snapshot["model_params_b"] <= 3.0
assert snapshot["memory_gb"] >= 0.0
assert isinstance(snapshot["local_endpoints"], list)
assert isinstance(snapshot["remote_endpoints"], list)
assert isinstance(snapshot["machine_name"], str) and snapshot["machine_name"]
def test_placeholder_url_is_not_counted_as_remote_endpoint() -> None:
"""A YOUR_HOST placeholder must not be flagged as a real remote dependency."""
mod = _load_module(SCRIPT_PATH, "unreachable_horizon")
assert mod._is_placeholder_url("https://YOUR_BIG_BRAIN_HOST/v1") is True
assert mod._is_placeholder_url("https://<pod-id>-11434.proxy.runpod.net/v1") is True
assert mod._is_placeholder_url("http://localhost:11434/v1") is False
assert mod._is_placeholder_url("https://real.inference.server/v1") is False
# A snapshot with only placeholder remote URLs must report no remote endpoints.
status = mod.compute_horizon_status({
"machine_name": "Test",
"memory_gb": 36.0,
"target_users": 1_000_000,
"model_params_b": 3.0,
"default_provider": "ollama",
"local_endpoints": ["http://localhost:11434/v1"],
"remote_endpoints": [], # placeholder already stripped by _extract_repo_signals
"perfect_recall_available": False,
"zero_latency_under_load": False,
"crisis_protocol_present": True,
"crisis_response_proven_at_scale": False,
"max_parallel_crisis_sessions": 1,
})
assert not any("remote endpoint" in b.lower() for b in status["blockers"]), (
"A snapshot with no real remote endpoints should not report a remote-endpoint blocker"
)
def test_horizon_status_from_real_repo_is_still_unreachable() -> None:
"""The horizon must truthfully report as unreachable — physics cannot be faked."""
mod = _load_module(SCRIPT_PATH, "unreachable_horizon")
snapshot = mod.default_snapshot(ROOT)
status = mod.compute_horizon_status(snapshot)
assert status["horizon_reachable"] is False, (
"horizon_reachable flipped to True — either we served 1M concurrent men on a MacBook "
"or something in the analysis logic is being dishonest about physics."
)
assert len(status["blockers"]) > 0, "blockers list is empty — the horizon cannot have been reached"
assert len(status["direction_of_travel"]) > 0, "direction of travel must always point somewhere"