{"repo": "bosprimigenious/looppilot", "files": {"scripts/verify_0_3_acceptance.py": {"82705b054ba878b00eeeb9fbc04ae4f0b8de327e": {"t": 1785747471.1158547, "n": 9791, "h": "61f1298f93abe145", "c": "#!/usr/bin/env python3\n\"\"\"Run 0.3 executable acceptance (L1+L2+L3) without real credentials.\n\nSkips DeepSeek live calls and any command requiring --allow-real-adapters.\nSafe for CI: no network, no API keys, no Cursor CLI required.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\n\nfrom loop_pilot.runtime.locks import clear_repo_runtime_locks\n\n\n@dataclass\nclass StepResult:\n name: str\n command: str\n passed: bool\n summary: str\n notes: list[str] = field(default_factory=list)\n\n\ndef _run(cmd: list[str], *, cwd: Path) -> subprocess.CompletedProcess[str]:\n return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False)\n\n\ndef _display(cmd: list[str]) -> str:\n shown = [\"python\" if part == sys.executable else part for part in cmd]\n if shown[:3] == [\"python\", \"-m\", \"loop_pilot.cli\"]:\n shown = [\"loop-pilot\", *shown[3:]]\n return \" \".join(shown)\n\n\ndef _loop_pilot(*args: str) -> list[str]:\n return [sys.executable, \"-m\", \"loop_pilot.cli\", *args]\n\n\ndef _outcome(output: str) -> str | None:\n match = re.search(r\"completed:\\s*(\\w+)\", output, re.IGNORECASE)\n if match:\n return match.group(1).lower()\n if re.search(r\"\\b(?:intern|paper|daily_news):\\s*\\w+\", output, re.IGNORECASE):\n return \"composite\"\n return None\n\n\ndef _check_daily_news_candidates(artifact_dir: Path, run_id_hint: str | None = None) -> tuple[bool, str]:\n base = artifact_dir / \"daily-news\"\n if not base.is_dir():\n return False, \"var/artifacts/daily-news missing\"\n dirs = sorted(base.iterdir(), key=lambda p: p.stat().st_mtime, reverse=True)\n for run_dir in dirs:\n if not run_dir.is_dir():\n continue\n required = [\"intern-candidates.md\", \"paper-candidates.md\", \"candidate-actions.json\"]\n missing = [name for name in required if not (run_dir / name).is_file()]\n if not missing:\n return True, f\"{run_dir.name}: {', '.join(required)}\"\n return False, \"no daily-news run with all three candidate files\"\n\n\ndef run_acceptance(repo: Path) -> list[StepResult]:\n results: list[StepResult] = []\n clear_repo_runtime_locks(repo)\n artifact_dir = repo / \"var\" / \"artifacts\"\n\n def record(name: str, cmd: list[str], passed: bool, summary: str, notes: list[str] | None = None) -> None:\n results.append(StepResult(name, _display(cmd), passed, summary, notes or []))\n\n # L1.1 Mini\n mini_cmds: list[tuple[str, list[str], str | set[str]]] = [\n (\"L1.1 intern fixture\", _loop_pilot(\"run\", \"intern\", \"--fixture\", \"simple_python_bug\", \"--dry-run\"), \"partial\"),\n (\"L1.1 paper fixture\", _loop_pilot(\"run\", \"paper\", \"--fixture\", \"unsupported_claim\", \"--dry-run\"), \"partial\"),\n (\"L1.1 daily-news fixture\", _loop_pilot(\"run\", \"daily-news\", \"--fixture\", \"github_star_snapshots\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 run all mini\", _loop_pilot(\"run\", \"all\", \"--fixture-set\", \"mini\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in mini_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n if isinstance(expected, set):\n ok = outcome in expected and proc.returncode == 0\n else:\n ok = outcome == expected and proc.returncode == 0\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n clear_repo_runtime_locks(repo)\n ok, msg = _check_daily_news_candidates(artifact_dir)\n record(\n \"L1.1 daily_news candidate artifacts\",\n [sys.executable, \"-c\", \"check candidates\"],\n ok,\n msg,\n )\n\n # L1.2 0.2 workspace\n workspace_cmds: list[tuple[str, list[str], str]] = [\n (\"L1.2 intern workspace\", _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 paper workspace\", _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 daily-news demo\", _loop_pilot(\"run\", \"daily-news\", \"--source-profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 run all demo\", _loop_pilot(\"run\", \"all\", \"--profile\", \"demo\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in workspace_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n ok = outcome == expected or (name.endswith(\"run all demo\") and proc.returncode == 0 and outcome == \"composite\")\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n clear_repo_runtime_locks(repo)\n # L2 Adapter core\n for name, args in [\n (\"L2 adapters list\", [\"adapters\", \"list\"]),\n (\"L2 adapters doctor\", [\"adapters\", \"doctor\"]),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n ok = proc.returncode == 0 and \"mock\" in proc.stdout.lower()\n record(name, cmd, ok, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n blocked_reason = \"allow_real_adapters=false\" in (proc.stdout + proc.stderr).lower()\n intern_dirs = sorted((artifact_dir / \"intern\").glob(\"*\"), key=lambda p: p.stat().st_mtime, reverse=True) if (artifact_dir / \"intern\").is_dir() else []\n trace_ok = False\n if intern_dirs:\n trace_path = intern_dirs[0] / \"adapter-call-trace.jsonl\"\n trace_ok = trace_path.is_file()\n record(\n \"L2 intern cursor_cli dry-run\",\n cmd,\n outcome == \"blocked\" and blocked_reason and trace_ok,\n f\"outcome={outcome}, adapter_trace={trace_ok}\",\n [\"blocked runs must write adapter-call-trace.jsonl with blocked_reason\"],\n )\n\n cmd = _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n record(\n \"L2 paper deepseek dry-run\",\n cmd,\n outcome == \"blocked\",\n f\"outcome={outcome} (outer gate; live key test MANUAL)\",\n [\"SKIP MANUAL: no DEEPSEEK_API_KEY; missing-key path needs --allow-real-adapters\"],\n )\n\n # L3 Safety\n clear_repo_runtime_locks(repo)\n for name, args, expect in [\n (\"L3 cursor_cli default gate\", [\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\"], \"blocked\"),\n (\"L3 deepseek default gate\", [\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\"], \"blocked\"),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_trace = \"traceback\" not in (proc.stdout + proc.stderr).lower()\n record(name, cmd, outcome == expect and no_trace, f\"outcome={outcome}, no_traceback={no_trace}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--adapter\", \"fake_adapter\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_crash = proc.returncode == 0\n blocked = outcome == \"blocked\" and \"unknown adapter\" in (proc.stdout + proc.stderr).lower()\n record(\n \"L3 fake_adapter blocked\",\n cmd,\n no_crash and blocked,\n f\"outcome={outcome}, rc={proc.returncode}\",\n [\"unknown adapter must BLOCKED, not mock fallback\"],\n )\n\n clear_repo_runtime_locks(repo)\n for name, cmd in [\n (\"L3 pytest\", [sys.executable, \"-m\", \"pytest\", \"-q\"]),\n (\"L3 ruff\", [sys.executable, \"-m\", \"ruff\", \"check\", \".\"]),\n (\"L3 doctor\", _loop_pilot(\"doctor\")),\n ]:\n proc = _run(cmd, cwd=repo)\n record(name, cmd, proc.returncode == 0, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n # Secret grep (env var names in messages OK; raw sk- keys not)\n state_dir = repo / \"var\" / \"state\"\n leak = False\n if state_dir.is_dir():\n for path in state_dir.rglob(\"*\"):\n if not path.is_file():\n continue\n text = path.read_text(encoding=\"utf-8\", errors=\"ignore\")\n if re.search(r\"sk-[a-f0-9]{20,}\", text, re.IGNORECASE):\n leak = True\n break\n record(\"L3 no raw API key leak\", [sys.executable, \"-c\", \"grep secrets\"], not leak, \"N/A (no key set)\" if not leak else \"FAIL: sk- pattern found\")\n\n return results\n\n\ndef main() -> int:\n parser = argparse.ArgumentParser(description=\"0.3 executable acceptance (no credentials)\")\n parser.add_argument(\"--cwd\", type=Path, default=Path.cwd())\n parser.add_argument(\"--json\", action=\"store_true\", help=\"Print JSON summary\")\n args = parser.parse_args()\n\n results = run_acceptance(args.cwd.resolve())\n passed = sum(1 for r in results if r.passed)\n total = len(results)\n\n if args.json:\n payload = {\n \"passed\": passed,\n \"total\": total,\n \"results\": [\n {\"name\": r.name, \"passed\": r.passed, \"command\": r.command, \"summary\": r.summary, \"notes\": r.notes}\n for r in results\n ],\n }\n print(json.dumps(payload, indent=2))\n else:\n print(f\"# 0.3 executable acceptance: {passed}/{total} passed\\n\")\n for r in results:\n mark = \"PASS\" if r.passed else \"FAIL\"\n print(f\"[{mark}] {r.name}\")\n print(f\" $ {r.command}\")\n print(f\" {r.summary}\")\n for note in r.notes:\n print(f\" note: {note}\")\n\n return 0 if passed == total else 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n"}, "76205343c1435a6f02e4d4de66cc06c235119115": {"t": 1785773508.3891418, "n": 9791, "h": "61f1298f93abe145", "c": "#!/usr/bin/env python3\n\"\"\"Run 0.3 executable acceptance (L1+L2+L3) without real credentials.\n\nSkips DeepSeek live calls and any command requiring --allow-real-adapters.\nSafe for CI: no network, no API keys, no Cursor CLI required.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\n\nfrom loop_pilot.runtime.locks import clear_repo_runtime_locks\n\n\n@dataclass\nclass StepResult:\n name: str\n command: str\n passed: bool\n summary: str\n notes: list[str] = field(default_factory=list)\n\n\ndef _run(cmd: list[str], *, cwd: Path) -> subprocess.CompletedProcess[str]:\n return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False)\n\n\ndef _display(cmd: list[str]) -> str:\n shown = [\"python\" if part == sys.executable else part for part in cmd]\n if shown[:3] == [\"python\", \"-m\", \"loop_pilot.cli\"]:\n shown = [\"loop-pilot\", *shown[3:]]\n return \" \".join(shown)\n\n\ndef _loop_pilot(*args: str) -> list[str]:\n return [sys.executable, \"-m\", \"loop_pilot.cli\", *args]\n\n\ndef _outcome(output: str) -> str | None:\n match = re.search(r\"completed:\\s*(\\w+)\", output, re.IGNORECASE)\n if match:\n return match.group(1).lower()\n if re.search(r\"\\b(?:intern|paper|daily_news):\\s*\\w+\", output, re.IGNORECASE):\n return \"composite\"\n return None\n\n\ndef _check_daily_news_candidates(artifact_dir: Path, run_id_hint: str | None = None) -> tuple[bool, str]:\n base = artifact_dir / \"daily-news\"\n if not base.is_dir():\n return False, \"var/artifacts/daily-news missing\"\n dirs = sorted(base.iterdir(), key=lambda p: p.stat().st_mtime, reverse=True)\n for run_dir in dirs:\n if not run_dir.is_dir():\n continue\n required = [\"intern-candidates.md\", \"paper-candidates.md\", \"candidate-actions.json\"]\n missing = [name for name in required if not (run_dir / name).is_file()]\n if not missing:\n return True, f\"{run_dir.name}: {', '.join(required)}\"\n return False, \"no daily-news run with all three candidate files\"\n\n\ndef run_acceptance(repo: Path) -> list[StepResult]:\n results: list[StepResult] = []\n clear_repo_runtime_locks(repo)\n artifact_dir = repo / \"var\" / \"artifacts\"\n\n def record(name: str, cmd: list[str], passed: bool, summary: str, notes: list[str] | None = None) -> None:\n results.append(StepResult(name, _display(cmd), passed, summary, notes or []))\n\n # L1.1 Mini\n mini_cmds: list[tuple[str, list[str], str | set[str]]] = [\n (\"L1.1 intern fixture\", _loop_pilot(\"run\", \"intern\", \"--fixture\", \"simple_python_bug\", \"--dry-run\"), \"partial\"),\n (\"L1.1 paper fixture\", _loop_pilot(\"run\", \"paper\", \"--fixture\", \"unsupported_claim\", \"--dry-run\"), \"partial\"),\n (\"L1.1 daily-news fixture\", _loop_pilot(\"run\", \"daily-news\", \"--fixture\", \"github_star_snapshots\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 run all mini\", _loop_pilot(\"run\", \"all\", \"--fixture-set\", \"mini\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in mini_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n if isinstance(expected, set):\n ok = outcome in expected and proc.returncode == 0\n else:\n ok = outcome == expected and proc.returncode == 0\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n clear_repo_runtime_locks(repo)\n ok, msg = _check_daily_news_candidates(artifact_dir)\n record(\n \"L1.1 daily_news candidate artifacts\",\n [sys.executable, \"-c\", \"check candidates\"],\n ok,\n msg,\n )\n\n # L1.2 0.2 workspace\n workspace_cmds: list[tuple[str, list[str], str]] = [\n (\"L1.2 intern workspace\", _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 paper workspace\", _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 daily-news demo\", _loop_pilot(\"run\", \"daily-news\", \"--source-profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 run all demo\", _loop_pilot(\"run\", \"all\", \"--profile\", \"demo\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in workspace_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n ok = outcome == expected or (name.endswith(\"run all demo\") and proc.returncode == 0 and outcome == \"composite\")\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n clear_repo_runtime_locks(repo)\n # L2 Adapter core\n for name, args in [\n (\"L2 adapters list\", [\"adapters\", \"list\"]),\n (\"L2 adapters doctor\", [\"adapters\", \"doctor\"]),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n ok = proc.returncode == 0 and \"mock\" in proc.stdout.lower()\n record(name, cmd, ok, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n blocked_reason = \"allow_real_adapters=false\" in (proc.stdout + proc.stderr).lower()\n intern_dirs = sorted((artifact_dir / \"intern\").glob(\"*\"), key=lambda p: p.stat().st_mtime, reverse=True) if (artifact_dir / \"intern\").is_dir() else []\n trace_ok = False\n if intern_dirs:\n trace_path = intern_dirs[0] / \"adapter-call-trace.jsonl\"\n trace_ok = trace_path.is_file()\n record(\n \"L2 intern cursor_cli dry-run\",\n cmd,\n outcome == \"blocked\" and blocked_reason and trace_ok,\n f\"outcome={outcome}, adapter_trace={trace_ok}\",\n [\"blocked runs must write adapter-call-trace.jsonl with blocked_reason\"],\n )\n\n cmd = _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n record(\n \"L2 paper deepseek dry-run\",\n cmd,\n outcome == \"blocked\",\n f\"outcome={outcome} (outer gate; live key test MANUAL)\",\n [\"SKIP MANUAL: no DEEPSEEK_API_KEY; missing-key path needs --allow-real-adapters\"],\n )\n\n # L3 Safety\n clear_repo_runtime_locks(repo)\n for name, args, expect in [\n (\"L3 cursor_cli default gate\", [\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\"], \"blocked\"),\n (\"L3 deepseek default gate\", [\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\"], \"blocked\"),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_trace = \"traceback\" not in (proc.stdout + proc.stderr).lower()\n record(name, cmd, outcome == expect and no_trace, f\"outcome={outcome}, no_traceback={no_trace}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--adapter\", \"fake_adapter\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_crash = proc.returncode == 0\n blocked = outcome == \"blocked\" and \"unknown adapter\" in (proc.stdout + proc.stderr).lower()\n record(\n \"L3 fake_adapter blocked\",\n cmd,\n no_crash and blocked,\n f\"outcome={outcome}, rc={proc.returncode}\",\n [\"unknown adapter must BLOCKED, not mock fallback\"],\n )\n\n clear_repo_runtime_locks(repo)\n for name, cmd in [\n (\"L3 pytest\", [sys.executable, \"-m\", \"pytest\", \"-q\"]),\n (\"L3 ruff\", [sys.executable, \"-m\", \"ruff\", \"check\", \".\"]),\n (\"L3 doctor\", _loop_pilot(\"doctor\")),\n ]:\n proc = _run(cmd, cwd=repo)\n record(name, cmd, proc.returncode == 0, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n # Secret grep (env var names in messages OK; raw sk- keys not)\n state_dir = repo / \"var\" / \"state\"\n leak = False\n if state_dir.is_dir():\n for path in state_dir.rglob(\"*\"):\n if not path.is_file():\n continue\n text = path.read_text(encoding=\"utf-8\", errors=\"ignore\")\n if re.search(r\"sk-[a-f0-9]{20,}\", text, re.IGNORECASE):\n leak = True\n break\n record(\"L3 no raw API key leak\", [sys.executable, \"-c\", \"grep secrets\"], not leak, \"N/A (no key set)\" if not leak else \"FAIL: sk- pattern found\")\n\n return results\n\n\ndef main() -> int:\n parser = argparse.ArgumentParser(description=\"0.3 executable acceptance (no credentials)\")\n parser.add_argument(\"--cwd\", type=Path, default=Path.cwd())\n parser.add_argument(\"--json\", action=\"store_true\", help=\"Print JSON summary\")\n args = parser.parse_args()\n\n results = run_acceptance(args.cwd.resolve())\n passed = sum(1 for r in results if r.passed)\n total = len(results)\n\n if args.json:\n payload = {\n \"passed\": passed,\n \"total\": total,\n \"results\": [\n {\"name\": r.name, \"passed\": r.passed, \"command\": r.command, \"summary\": r.summary, \"notes\": r.notes}\n for r in results\n ],\n }\n print(json.dumps(payload, indent=2))\n else:\n print(f\"# 0.3 executable acceptance: {passed}/{total} passed\\n\")\n for r in results:\n mark = \"PASS\" if r.passed else \"FAIL\"\n print(f\"[{mark}] {r.name}\")\n print(f\" $ {r.command}\")\n print(f\" {r.summary}\")\n for note in r.notes:\n print(f\" note: {note}\")\n\n return 0 if passed == total else 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n"}, "c99bba85c0190c7a0b572672b64fdd7bf938480d": {"t": 1785773510.8079913, "n": 9790, "h": "837ca88259dc55d5", "c": "#!/usr/bin/env python3\n\"\"\"Run 0.3 executable acceptance (L1+L2+L3) without real credentials.\n\nSkips DeepSeek live calls and any command requiring --allow-real-adapters.\nSafe for CI: no network, no API keys, no Cursor CLI required.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\n\nROOT = Path(__file__).resolve().parents[1]\nSRC = ROOT / \"src\"\nif str(SRC) not in sys.path:\n sys.path.insert(0, str(SRC))\n\nfrom loop_pilot.runtime.locks import clear_repo_runtime_locks # noqa: E402\n\n\n@dataclass\nclass StepResult:\n name: str\n command: str\n passed: bool\n summary: str\n notes: list[str] = field(default_factory=list)\n\n\ndef _run(cmd: list[str], *, cwd: Path) -> subprocess.CompletedProcess[str]:\n return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False)\n\n\ndef _display(cmd: list[str]) -> str:\n shown = [\"python\" if part == sys.executable else part for part in cmd]\n if shown[:3] == [\"python\", \"-m\", \"loop_pilot.cli\"]:\n shown = [\"loop-pilot\", *shown[3:]]\n return \" \".join(shown)\n\n\ndef _loop_pilot(*args: str) -> list[str]:\n return [sys.executable, \"-m\", \"loop_pilot.cli\", *args]\n\n\ndef _outcome(output: str) -> str | None:\n match = re.search(r\"completed:\\s*(\\w+)\", output, re.IGNORECASE)\n if match:\n return match.group(1).lower()\n if re.search(r\"\\b(?:intern|paper|daily_news):\\s*\\w+\", output, re.IGNORECASE):\n return \"composite\"\n return None\n\n\ndef _check_daily_news_candidates(artifact_dir: Path, run_id_hint: str | None = None) -> tuple[bool, str]:\n base = artifact_dir / \"daily-news\"\n if not base.is_dir():\n return False, \"var/artifacts/daily-news missing\"\n dirs = sorted(base.iterdir(), key=lambda p: p.stat().st_mtime, reverse=True)\n for run_dir in dirs:\n if not run_dir.is_dir():\n continue\n required = [\"intern-candidates.md\", \"paper-candidates.md\", \"candidate-actions.json\"]\n missing = [name for name in required if not (run_dir / name).is_file()]\n if not missing:\n return True, f\"{run_dir.name}: {', '.join(required)}\"\n return False, \"no daily-news run with all three candidate files\"\n\n\ndef run_acceptance(repo: Path) -> list[StepResult]:\n results: list[StepResult] = []\n clear_repo_runtime_locks(repo)\n artifact_dir = repo / \"var\" / \"artifacts\"\n\n def record(name: str, cmd: list[str], passed: bool, summary: str, notes: list[str] | None = None) -> None:\n results.append(StepResult(name, _display(cmd), passed, summary, notes or []))\n\n # L1.1 Mini\n mini_cmds: list[tuple[str, list[str], str | set[str]]] = [\n (\"L1.1 intern fixture\", _loop_pilot(\"run\", \"intern\", \"--fixture\", \"simple_python_bug\", \"--dry-run\"), \"partial\"),\n (\"L1.1 paper fixture\", _loop_pilot(\"run\", \"paper\", \"--fixture\", \"unsupported_claim\", \"--dry-run\"), \"partial\"),\n (\"L1.1 daily-news fixture\", _loop_pilot(\"run\", \"daily-news\", \"--fixture\", \"github_star_snapshots\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 run all mini\", _loop_pilot(\"run\", \"all\", \"--fixture-set\", \"mini\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in mini_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n if isinstance(expected, set):\n ok = outcome in expected and proc.returncode == 0\n else:\n ok = outcome == expected and proc.returncode == 0\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n ok, msg = _check_daily_news_candidates(artifact_dir)\n record(\n \"L1.1 daily_news candidate artifacts\",\n [sys.executable, \"-c\", \"check candidates\"],\n ok,\n msg,\n )\n\n # L1.2 0.2 workspace\n workspace_cmds: list[tuple[str, list[str], str]] = [\n (\"L1.2 intern workspace\", _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 paper workspace\", _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 daily-news demo\", _loop_pilot(\"run\", \"daily-news\", \"--source-profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 run all demo\", _loop_pilot(\"run\", \"all\", \"--profile\", \"demo\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in workspace_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n ok = outcome == expected or (name.endswith(\"run all demo\") and proc.returncode == 0 and outcome == \"composite\")\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n # L2 Adapter core\n for name, args in [\n (\"L2 adapters list\", [\"adapters\", \"list\"]),\n (\"L2 adapters doctor\", [\"adapters\", \"doctor\"]),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n ok = proc.returncode == 0 and \"mock\" in proc.stdout.lower()\n record(name, cmd, ok, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n blocked_reason = \"allow_real_adapters=false\" in (proc.stdout + proc.stderr).lower()\n intern_dirs = sorted((artifact_dir / \"intern\").glob(\"*\"), key=lambda p: p.stat().st_mtime, reverse=True) if (artifact_dir / \"intern\").is_dir() else []\n trace_ok = False\n if intern_dirs:\n trace_path = intern_dirs[0] / \"adapter-call-trace.jsonl\"\n trace_ok = trace_path.is_file()\n record(\n \"L2 intern cursor_cli dry-run\",\n cmd,\n outcome == \"blocked\" and blocked_reason and trace_ok,\n f\"outcome={outcome}, adapter_trace={trace_ok}\",\n [\"blocked runs must write adapter-call-trace.jsonl with blocked_reason\"],\n )\n\n cmd = _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n record(\n \"L2 paper deepseek dry-run\",\n cmd,\n outcome == \"blocked\",\n f\"outcome={outcome} (outer gate; live key test MANUAL)\",\n [\"SKIP MANUAL: no DEEPSEEK_API_KEY; missing-key path needs --allow-real-adapters\"],\n )\n\n # L3 Safety\n for name, args, expect in [\n (\"L3 cursor_cli default gate\", [\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\"], \"blocked\"),\n (\"L3 deepseek default gate\", [\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\"], \"blocked\"),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_trace = \"traceback\" not in (proc.stdout + proc.stderr).lower()\n record(name, cmd, outcome == expect and no_trace, f\"outcome={outcome}, no_traceback={no_trace}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--adapter\", \"fake_adapter\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_crash = proc.returncode == 0\n blocked = outcome == \"blocked\" and \"unknown adapter\" in (proc.stdout + proc.stderr).lower()\n record(\n \"L3 fake_adapter blocked\",\n cmd,\n no_crash and blocked,\n f\"outcome={outcome}, rc={proc.returncode}\",\n [\"unknown adapter must BLOCKED, not mock fallback\"],\n )\n\n for name, cmd in [\n (\"L3 pytest\", [sys.executable, \"-m\", \"pytest\", \"-q\"]),\n (\"L3 ruff\", [sys.executable, \"-m\", \"ruff\", \"check\", \".\"]),\n (\"L3 doctor\", _loop_pilot(\"doctor\")),\n ]:\n proc = _run(cmd, cwd=repo)\n record(name, cmd, proc.returncode == 0, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n # Secret grep (env var names in messages OK; raw sk- keys not)\n state_dir = repo / \"var\" / \"state\"\n leak = False\n if state_dir.is_dir():\n for path in state_dir.rglob(\"*\"):\n if not path.is_file():\n continue\n text = path.read_text(encoding=\"utf-8\", errors=\"ignore\")\n if re.search(r\"sk-[a-f0-9]{20,}\", text, re.IGNORECASE):\n leak = True\n break\n record(\"L3 no raw API key leak\", [sys.executable, \"-c\", \"grep secrets\"], not leak, \"N/A (no key set)\" if not leak else \"FAIL: sk- pattern found\")\n\n return results\n\n\ndef main() -> int:\n parser = argparse.ArgumentParser(description=\"0.3 executable acceptance (no credentials)\")\n parser.add_argument(\"--cwd\", type=Path, default=Path.cwd())\n parser.add_argument(\"--json\", action=\"store_true\", help=\"Print JSON summary\")\n args = parser.parse_args()\n\n results = run_acceptance(args.cwd.resolve())\n passed = sum(1 for r in results if r.passed)\n total = len(results)\n\n if args.json:\n payload = {\n \"passed\": passed,\n \"total\": total,\n \"results\": [\n {\"name\": r.name, \"passed\": r.passed, \"command\": r.command, \"summary\": r.summary, \"notes\": r.notes}\n for r in results\n ],\n }\n print(json.dumps(payload, indent=2))\n else:\n print(f\"# 0.3 executable acceptance: {passed}/{total} passed\\n\")\n for r in results:\n mark = \"PASS\" if r.passed else \"FAIL\"\n print(f\"[{mark}] {r.name}\")\n print(f\" $ {r.command}\")\n print(f\" {r.summary}\")\n for note in r.notes:\n print(f\" note: {note}\")\n\n return 0 if passed == total else 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n"}, "c86507d65feef96454e773cb8983be37b738ddd9": {"t": 1785773512.9602191, "n": 9651, "h": "708c4443230d30c8", "c": "#!/usr/bin/env python3\n\"\"\"Run 0.3 executable acceptance (L1+L2+L3) without real credentials.\n\nSkips DeepSeek live calls and any command requiring --allow-real-adapters.\nSafe for CI: no network, no API keys, no Cursor CLI required.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\n\nfrom loop_pilot.runtime.locks import clear_repo_runtime_locks\n\n\n@dataclass\nclass StepResult:\n name: str\n command: str\n passed: bool\n summary: str\n notes: list[str] = field(default_factory=list)\n\n\ndef _run(cmd: list[str], *, cwd: Path) -> subprocess.CompletedProcess[str]:\n return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False)\n\n\ndef _display(cmd: list[str]) -> str:\n shown = [\"python\" if part == sys.executable else part for part in cmd]\n if shown[:3] == [\"python\", \"-m\", \"loop_pilot.cli\"]:\n shown = [\"loop-pilot\", *shown[3:]]\n return \" \".join(shown)\n\n\ndef _loop_pilot(*args: str) -> list[str]:\n return [sys.executable, \"-m\", \"loop_pilot.cli\", *args]\n\n\ndef _outcome(output: str) -> str | None:\n match = re.search(r\"completed:\\s*(\\w+)\", output, re.IGNORECASE)\n if match:\n return match.group(1).lower()\n if re.search(r\"\\b(?:intern|paper|daily_news):\\s*\\w+\", output, re.IGNORECASE):\n return \"composite\"\n return None\n\n\ndef _check_daily_news_candidates(artifact_dir: Path, run_id_hint: str | None = None) -> tuple[bool, str]:\n base = artifact_dir / \"daily-news\"\n if not base.is_dir():\n return False, \"var/artifacts/daily-news missing\"\n dirs = sorted(base.iterdir(), key=lambda p: p.stat().st_mtime, reverse=True)\n for run_dir in dirs:\n if not run_dir.is_dir():\n continue\n required = [\"intern-candidates.md\", \"paper-candidates.md\", \"candidate-actions.json\"]\n missing = [name for name in required if not (run_dir / name).is_file()]\n if not missing:\n return True, f\"{run_dir.name}: {', '.join(required)}\"\n return False, \"no daily-news run with all three candidate files\"\n\n\ndef run_acceptance(repo: Path) -> list[StepResult]:\n results: list[StepResult] = []\n clear_repo_runtime_locks(repo)\n artifact_dir = repo / \"var\" / \"artifacts\"\n\n def record(name: str, cmd: list[str], passed: bool, summary: str, notes: list[str] | None = None) -> None:\n results.append(StepResult(name, _display(cmd), passed, summary, notes or []))\n\n # L1.1 Mini\n mini_cmds: list[tuple[str, list[str], str | set[str]]] = [\n (\"L1.1 intern fixture\", _loop_pilot(\"run\", \"intern\", \"--fixture\", \"simple_python_bug\", \"--dry-run\"), \"partial\"),\n (\"L1.1 paper fixture\", _loop_pilot(\"run\", \"paper\", \"--fixture\", \"unsupported_claim\", \"--dry-run\"), \"partial\"),\n (\"L1.1 daily-news fixture\", _loop_pilot(\"run\", \"daily-news\", \"--fixture\", \"github_star_snapshots\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 run all mini\", _loop_pilot(\"run\", \"all\", \"--fixture-set\", \"mini\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in mini_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n if isinstance(expected, set):\n ok = outcome in expected and proc.returncode == 0\n else:\n ok = outcome == expected and proc.returncode == 0\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n ok, msg = _check_daily_news_candidates(artifact_dir)\n record(\n \"L1.1 daily_news candidate artifacts\",\n [sys.executable, \"-c\", \"check candidates\"],\n ok,\n msg,\n )\n\n # L1.2 0.2 workspace\n workspace_cmds: list[tuple[str, list[str], str]] = [\n (\"L1.2 intern workspace\", _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 paper workspace\", _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 daily-news demo\", _loop_pilot(\"run\", \"daily-news\", \"--source-profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 run all demo\", _loop_pilot(\"run\", \"all\", \"--profile\", \"demo\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in workspace_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n ok = outcome == expected or (name.endswith(\"run all demo\") and proc.returncode == 0 and outcome == \"composite\")\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n # L2 Adapter core\n for name, args in [\n (\"L2 adapters list\", [\"adapters\", \"list\"]),\n (\"L2 adapters doctor\", [\"adapters\", \"doctor\"]),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n ok = proc.returncode == 0 and \"mock\" in proc.stdout.lower()\n record(name, cmd, ok, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n blocked_reason = \"allow_real_adapters=false\" in (proc.stdout + proc.stderr).lower()\n intern_dirs = sorted((artifact_dir / \"intern\").glob(\"*\"), key=lambda p: p.stat().st_mtime, reverse=True) if (artifact_dir / \"intern\").is_dir() else []\n trace_ok = False\n if intern_dirs:\n trace_path = intern_dirs[0] / \"adapter-call-trace.jsonl\"\n trace_ok = trace_path.is_file()\n record(\n \"L2 intern cursor_cli dry-run\",\n cmd,\n outcome == \"blocked\" and blocked_reason and trace_ok,\n f\"outcome={outcome}, adapter_trace={trace_ok}\",\n [\"blocked runs must write adapter-call-trace.jsonl with blocked_reason\"],\n )\n\n cmd = _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n record(\n \"L2 paper deepseek dry-run\",\n cmd,\n outcome == \"blocked\",\n f\"outcome={outcome} (outer gate; live key test MANUAL)\",\n [\"SKIP MANUAL: no DEEPSEEK_API_KEY; missing-key path needs --allow-real-adapters\"],\n )\n\n # L3 Safety\n for name, args, expect in [\n (\"L3 cursor_cli default gate\", [\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\"], \"blocked\"),\n (\"L3 deepseek default gate\", [\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\"], \"blocked\"),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_trace = \"traceback\" not in (proc.stdout + proc.stderr).lower()\n record(name, cmd, outcome == expect and no_trace, f\"outcome={outcome}, no_traceback={no_trace}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--adapter\", \"fake_adapter\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_crash = proc.returncode == 0\n blocked = outcome == \"blocked\" and \"unknown adapter\" in (proc.stdout + proc.stderr).lower()\n record(\n \"L3 fake_adapter blocked\",\n cmd,\n no_crash and blocked,\n f\"outcome={outcome}, rc={proc.returncode}\",\n [\"unknown adapter must BLOCKED, not mock fallback\"],\n )\n\n for name, cmd in [\n (\"L3 pytest\", [sys.executable, \"-m\", \"pytest\", \"-q\"]),\n (\"L3 ruff\", [sys.executable, \"-m\", \"ruff\", \"check\", \".\"]),\n (\"L3 doctor\", _loop_pilot(\"doctor\")),\n ]:\n proc = _run(cmd, cwd=repo)\n record(name, cmd, proc.returncode == 0, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n # Secret grep (env var names in messages OK; raw sk- keys not)\n state_dir = repo / \"var\" / \"state\"\n leak = False\n if state_dir.is_dir():\n for path in state_dir.rglob(\"*\"):\n if not path.is_file():\n continue\n text = path.read_text(encoding=\"utf-8\", errors=\"ignore\")\n if re.search(r\"sk-[a-f0-9]{20,}\", text, re.IGNORECASE):\n leak = True\n break\n record(\"L3 no raw API key leak\", [sys.executable, \"-c\", \"grep secrets\"], not leak, \"N/A (no key set)\" if not leak else \"FAIL: sk- pattern found\")\n\n return results\n\n\ndef main() -> int:\n parser = argparse.ArgumentParser(description=\"0.3 executable acceptance (no credentials)\")\n parser.add_argument(\"--cwd\", type=Path, default=Path.cwd())\n parser.add_argument(\"--json\", action=\"store_true\", help=\"Print JSON summary\")\n args = parser.parse_args()\n\n results = run_acceptance(args.cwd.resolve())\n passed = sum(1 for r in results if r.passed)\n total = len(results)\n\n if args.json:\n payload = {\n \"passed\": passed,\n \"total\": total,\n \"results\": [\n {\"name\": r.name, \"passed\": r.passed, \"command\": r.command, \"summary\": r.summary, \"notes\": r.notes}\n for r in results\n ],\n }\n print(json.dumps(payload, indent=2))\n else:\n print(f\"# 0.3 executable acceptance: {passed}/{total} passed\\n\")\n for r in results:\n mark = \"PASS\" if r.passed else \"FAIL\"\n print(f\"[{mark}] {r.name}\")\n print(f\" $ {r.command}\")\n print(f\" {r.summary}\")\n for note in r.notes:\n print(f\" note: {note}\")\n\n return 0 if passed == total else 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n"}, "5693c052cbc34daf3e6026ee27973c02559f0f89": {"t": 1785773515.9473143, "n": 9651, "h": "708c4443230d30c8", "c": "#!/usr/bin/env python3\n\"\"\"Run 0.3 executable acceptance (L1+L2+L3) without real credentials.\n\nSkips DeepSeek live calls and any command requiring --allow-real-adapters.\nSafe for CI: no network, no API keys, no Cursor CLI required.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\n\nfrom loop_pilot.runtime.locks import clear_repo_runtime_locks\n\n\n@dataclass\nclass StepResult:\n name: str\n command: str\n passed: bool\n summary: str\n notes: list[str] = field(default_factory=list)\n\n\ndef _run(cmd: list[str], *, cwd: Path) -> subprocess.CompletedProcess[str]:\n return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False)\n\n\ndef _display(cmd: list[str]) -> str:\n shown = [\"python\" if part == sys.executable else part for part in cmd]\n if shown[:3] == [\"python\", \"-m\", \"loop_pilot.cli\"]:\n shown = [\"loop-pilot\", *shown[3:]]\n return \" \".join(shown)\n\n\ndef _loop_pilot(*args: str) -> list[str]:\n return [sys.executable, \"-m\", \"loop_pilot.cli\", *args]\n\n\ndef _outcome(output: str) -> str | None:\n match = re.search(r\"completed:\\s*(\\w+)\", output, re.IGNORECASE)\n if match:\n return match.group(1).lower()\n if re.search(r\"\\b(?:intern|paper|daily_news):\\s*\\w+\", output, re.IGNORECASE):\n return \"composite\"\n return None\n\n\ndef _check_daily_news_candidates(artifact_dir: Path, run_id_hint: str | None = None) -> tuple[bool, str]:\n base = artifact_dir / \"daily-news\"\n if not base.is_dir():\n return False, \"var/artifacts/daily-news missing\"\n dirs = sorted(base.iterdir(), key=lambda p: p.stat().st_mtime, reverse=True)\n for run_dir in dirs:\n if not run_dir.is_dir():\n continue\n required = [\"intern-candidates.md\", \"paper-candidates.md\", \"candidate-actions.json\"]\n missing = [name for name in required if not (run_dir / name).is_file()]\n if not missing:\n return True, f\"{run_dir.name}: {', '.join(required)}\"\n return False, \"no daily-news run with all three candidate files\"\n\n\ndef run_acceptance(repo: Path) -> list[StepResult]:\n results: list[StepResult] = []\n clear_repo_runtime_locks(repo)\n artifact_dir = repo / \"var\" / \"artifacts\"\n\n def record(name: str, cmd: list[str], passed: bool, summary: str, notes: list[str] | None = None) -> None:\n results.append(StepResult(name, _display(cmd), passed, summary, notes or []))\n\n # L1.1 Mini\n mini_cmds: list[tuple[str, list[str], str | set[str]]] = [\n (\"L1.1 intern fixture\", _loop_pilot(\"run\", \"intern\", \"--fixture\", \"simple_python_bug\", \"--dry-run\"), \"partial\"),\n (\"L1.1 paper fixture\", _loop_pilot(\"run\", \"paper\", \"--fixture\", \"unsupported_claim\", \"--dry-run\"), \"partial\"),\n (\"L1.1 daily-news fixture\", _loop_pilot(\"run\", \"daily-news\", \"--fixture\", \"github_star_snapshots\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 run all mini\", _loop_pilot(\"run\", \"all\", \"--fixture-set\", \"mini\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in mini_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n if isinstance(expected, set):\n ok = outcome in expected and proc.returncode == 0\n else:\n ok = outcome == expected and proc.returncode == 0\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n ok, msg = _check_daily_news_candidates(artifact_dir)\n record(\n \"L1.1 daily_news candidate artifacts\",\n [sys.executable, \"-c\", \"check candidates\"],\n ok,\n msg,\n )\n\n # L1.2 0.2 workspace\n workspace_cmds: list[tuple[str, list[str], str]] = [\n (\"L1.2 intern workspace\", _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 paper workspace\", _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 daily-news demo\", _loop_pilot(\"run\", \"daily-news\", \"--source-profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 run all demo\", _loop_pilot(\"run\", \"all\", \"--profile\", \"demo\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in workspace_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n ok = outcome == expected or (name.endswith(\"run all demo\") and proc.returncode == 0 and outcome == \"composite\")\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n # L2 Adapter core\n for name, args in [\n (\"L2 adapters list\", [\"adapters\", \"list\"]),\n (\"L2 adapters doctor\", [\"adapters\", \"doctor\"]),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n ok = proc.returncode == 0 and \"mock\" in proc.stdout.lower()\n record(name, cmd, ok, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n blocked_reason = \"allow_real_adapters=false\" in (proc.stdout + proc.stderr).lower()\n intern_dirs = sorted((artifact_dir / \"intern\").glob(\"*\"), key=lambda p: p.stat().st_mtime, reverse=True) if (artifact_dir / \"intern\").is_dir() else []\n trace_ok = False\n if intern_dirs:\n trace_path = intern_dirs[0] / \"adapter-call-trace.jsonl\"\n trace_ok = trace_path.is_file()\n record(\n \"L2 intern cursor_cli dry-run\",\n cmd,\n outcome == \"blocked\" and blocked_reason and trace_ok,\n f\"outcome={outcome}, adapter_trace={trace_ok}\",\n [\"blocked runs must write adapter-call-trace.jsonl with blocked_reason\"],\n )\n\n cmd = _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n record(\n \"L2 paper deepseek dry-run\",\n cmd,\n outcome == \"blocked\",\n f\"outcome={outcome} (outer gate; live key test MANUAL)\",\n [\"SKIP MANUAL: no DEEPSEEK_API_KEY; missing-key path needs --allow-real-adapters\"],\n )\n\n # L3 Safety\n for name, args, expect in [\n (\"L3 cursor_cli default gate\", [\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\"], \"blocked\"),\n (\"L3 deepseek default gate\", [\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\"], \"blocked\"),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_trace = \"traceback\" not in (proc.stdout + proc.stderr).lower()\n record(name, cmd, outcome == expect and no_trace, f\"outcome={outcome}, no_traceback={no_trace}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--adapter\", \"fake_adapter\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_crash = proc.returncode == 0\n blocked = outcome == \"blocked\" and \"unknown adapter\" in (proc.stdout + proc.stderr).lower()\n record(\n \"L3 fake_adapter blocked\",\n cmd,\n no_crash and blocked,\n f\"outcome={outcome}, rc={proc.returncode}\",\n [\"unknown adapter must BLOCKED, not mock fallback\"],\n )\n\n for name, cmd in [\n (\"L3 pytest\", [sys.executable, \"-m\", \"pytest\", \"-q\"]),\n (\"L3 ruff\", [sys.executable, \"-m\", \"ruff\", \"check\", \".\"]),\n (\"L3 doctor\", _loop_pilot(\"doctor\")),\n ]:\n proc = _run(cmd, cwd=repo)\n record(name, cmd, proc.returncode == 0, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n # Secret grep (env var names in messages OK; raw sk- keys not)\n state_dir = repo / \"var\" / \"state\"\n leak = False\n if state_dir.is_dir():\n for path in state_dir.rglob(\"*\"):\n if not path.is_file():\n continue\n text = path.read_text(encoding=\"utf-8\", errors=\"ignore\")\n if re.search(r\"sk-[a-f0-9]{20,}\", text, re.IGNORECASE):\n leak = True\n break\n record(\"L3 no raw API key leak\", [sys.executable, \"-c\", \"grep secrets\"], not leak, \"N/A (no key set)\" if not leak else \"FAIL: sk- pattern found\")\n\n return results\n\n\ndef main() -> int:\n parser = argparse.ArgumentParser(description=\"0.3 executable acceptance (no credentials)\")\n parser.add_argument(\"--cwd\", type=Path, default=Path.cwd())\n parser.add_argument(\"--json\", action=\"store_true\", help=\"Print JSON summary\")\n args = parser.parse_args()\n\n results = run_acceptance(args.cwd.resolve())\n passed = sum(1 for r in results if r.passed)\n total = len(results)\n\n if args.json:\n payload = {\n \"passed\": passed,\n \"total\": total,\n \"results\": [\n {\"name\": r.name, \"passed\": r.passed, \"command\": r.command, \"summary\": r.summary, \"notes\": r.notes}\n for r in results\n ],\n }\n print(json.dumps(payload, indent=2))\n else:\n print(f\"# 0.3 executable acceptance: {passed}/{total} passed\\n\")\n for r in results:\n mark = \"PASS\" if r.passed else \"FAIL\"\n print(f\"[{mark}] {r.name}\")\n print(f\" $ {r.command}\")\n print(f\" {r.summary}\")\n for note in r.notes:\n print(f\" note: {note}\")\n\n return 0 if passed == total else 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n"}, "4b77783e956bc74ddc107c680cf9e63df4317453": {"t": 1785773517.7333312, "n": 9831, "h": "f39660b4fa88072b", "c": "#!/usr/bin/env python3\n\"\"\"Run 0.3 executable acceptance (L1+L2+L3) without real credentials.\n\nSkips DeepSeek live calls and any command requiring --allow-real-adapters.\nSafe for CI: no network, no API keys, no Cursor CLI required.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\n\n\n@dataclass\nclass StepResult:\n name: str\n command: str\n passed: bool\n summary: str\n notes: list[str] = field(default_factory=list)\n\n\ndef _run(cmd: list[str], *, cwd: Path) -> subprocess.CompletedProcess[str]:\n return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False)\n\n\ndef _display(cmd: list[str]) -> str:\n shown = [\"python\" if part == sys.executable else part for part in cmd]\n if shown[:3] == [\"python\", \"-m\", \"loop_pilot.cli\"]:\n shown = [\"loop-pilot\", *shown[3:]]\n return \" \".join(shown)\n\n\ndef _loop_pilot(*args: str) -> list[str]:\n return [sys.executable, \"-m\", \"loop_pilot.cli\", *args]\n\n\ndef _outcome(output: str) -> str | None:\n match = re.search(r\"completed:\\s*(\\w+)\", output, re.IGNORECASE)\n if match:\n return match.group(1).lower()\n if re.search(r\"\\b(?:intern|paper|daily_news):\\s*\\w+\", output, re.IGNORECASE):\n return \"composite\"\n return None\n\n\ndef _check_daily_news_candidates(artifact_dir: Path, run_id_hint: str | None = None) -> tuple[bool, str]:\n base = artifact_dir / \"daily-news\"\n if not base.is_dir():\n return False, \"var/artifacts/daily-news missing\"\n dirs = sorted(base.iterdir(), key=lambda p: p.stat().st_mtime, reverse=True)\n for run_dir in dirs:\n if not run_dir.is_dir():\n continue\n required = [\"intern-candidates.md\", \"paper-candidates.md\", \"candidate-actions.json\"]\n missing = [name for name in required if not (run_dir / name).is_file()]\n if not missing:\n return True, f\"{run_dir.name}: {', '.join(required)}\"\n return False, \"no daily-news run with all three candidate files\"\n\n\ndef _clear_runtime_locks(repo: Path) -> None:\n lock_dir = repo / \"var\" / \"locks\"\n if not lock_dir.is_dir():\n return\n for path in lock_dir.iterdir():\n try:\n path.unlink()\n except OSError:\n pass\n\n\ndef run_acceptance(repo: Path) -> list[StepResult]:\n results: list[StepResult] = []\n _clear_runtime_locks(repo)\n artifact_dir = repo / \"var\" / \"artifacts\"\n\n def record(name: str, cmd: list[str], passed: bool, summary: str, notes: list[str] | None = None) -> None:\n results.append(StepResult(name, _display(cmd), passed, summary, notes or []))\n\n # L1.1 Mini\n mini_cmds: list[tuple[str, list[str], str | set[str]]] = [\n (\"L1.1 intern fixture\", _loop_pilot(\"run\", \"intern\", \"--fixture\", \"simple_python_bug\", \"--dry-run\"), \"partial\"),\n (\"L1.1 paper fixture\", _loop_pilot(\"run\", \"paper\", \"--fixture\", \"unsupported_claim\", \"--dry-run\"), \"partial\"),\n (\"L1.1 daily-news fixture\", _loop_pilot(\"run\", \"daily-news\", \"--fixture\", \"github_star_snapshots\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 run all mini\", _loop_pilot(\"run\", \"all\", \"--fixture-set\", \"mini\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in mini_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n if isinstance(expected, set):\n ok = outcome in expected and proc.returncode == 0\n else:\n ok = outcome == expected and proc.returncode == 0\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n ok, msg = _check_daily_news_candidates(artifact_dir)\n record(\n \"L1.1 daily_news candidate artifacts\",\n [sys.executable, \"-c\", \"check candidates\"],\n ok,\n msg,\n )\n\n # L1.2 0.2 workspace\n workspace_cmds: list[tuple[str, list[str], str]] = [\n (\"L1.2 intern workspace\", _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 paper workspace\", _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 daily-news demo\", _loop_pilot(\"run\", \"daily-news\", \"--source-profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 run all demo\", _loop_pilot(\"run\", \"all\", \"--profile\", \"demo\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in workspace_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n ok = outcome == expected or (name.endswith(\"run all demo\") and proc.returncode == 0 and outcome == \"composite\")\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n # L2 Adapter core\n for name, args in [\n (\"L2 adapters list\", [\"adapters\", \"list\"]),\n (\"L2 adapters doctor\", [\"adapters\", \"doctor\"]),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n ok = proc.returncode == 0 and \"mock\" in proc.stdout.lower()\n record(name, cmd, ok, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n blocked_reason = \"allow_real_adapters=false\" in (proc.stdout + proc.stderr).lower()\n intern_dirs = sorted((artifact_dir / \"intern\").glob(\"*\"), key=lambda p: p.stat().st_mtime, reverse=True) if (artifact_dir / \"intern\").is_dir() else []\n trace_ok = False\n if intern_dirs:\n trace_path = intern_dirs[0] / \"adapter-call-trace.jsonl\"\n trace_ok = trace_path.is_file()\n record(\n \"L2 intern cursor_cli dry-run\",\n cmd,\n outcome == \"blocked\" and blocked_reason and trace_ok,\n f\"outcome={outcome}, adapter_trace={trace_ok}\",\n [\"blocked runs must write adapter-call-trace.jsonl with blocked_reason\"],\n )\n\n cmd = _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n record(\n \"L2 paper deepseek dry-run\",\n cmd,\n outcome == \"blocked\",\n f\"outcome={outcome} (outer gate; live key test MANUAL)\",\n [\"SKIP MANUAL: no DEEPSEEK_API_KEY; missing-key path needs --allow-real-adapters\"],\n )\n\n # L3 Safety\n for name, args, expect in [\n (\"L3 cursor_cli default gate\", [\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\"], \"blocked\"),\n (\"L3 deepseek default gate\", [\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\"], \"blocked\"),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_trace = \"traceback\" not in (proc.stdout + proc.stderr).lower()\n record(name, cmd, outcome == expect and no_trace, f\"outcome={outcome}, no_traceback={no_trace}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--adapter\", \"fake_adapter\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_crash = proc.returncode == 0\n blocked = outcome == \"blocked\" and \"unknown adapter\" in (proc.stdout + proc.stderr).lower()\n record(\n \"L3 fake_adapter blocked\",\n cmd,\n no_crash and blocked,\n f\"outcome={outcome}, rc={proc.returncode}\",\n [\"unknown adapter must BLOCKED, not mock fallback\"],\n )\n\n for name, cmd in [\n (\"L3 pytest\", [sys.executable, \"-m\", \"pytest\", \"-q\"]),\n (\"L3 ruff\", [sys.executable, \"-m\", \"ruff\", \"check\", \".\"]),\n (\"L3 doctor\", _loop_pilot(\"doctor\")),\n ]:\n proc = _run(cmd, cwd=repo)\n record(name, cmd, proc.returncode == 0, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n # Secret grep (env var names in messages OK; raw sk- keys not)\n state_dir = repo / \"var\" / \"state\"\n leak = False\n if state_dir.is_dir():\n for path in state_dir.rglob(\"*\"):\n if not path.is_file():\n continue\n text = path.read_text(encoding=\"utf-8\", errors=\"ignore\")\n if re.search(r\"sk-[a-f0-9]{20,}\", text, re.IGNORECASE):\n leak = True\n break\n record(\"L3 no raw API key leak\", [sys.executable, \"-c\", \"grep secrets\"], not leak, \"N/A (no key set)\" if not leak else \"FAIL: sk- pattern found\")\n\n return results\n\n\ndef main() -> int:\n parser = argparse.ArgumentParser(description=\"0.3 executable acceptance (no credentials)\")\n parser.add_argument(\"--cwd\", type=Path, default=Path.cwd())\n parser.add_argument(\"--json\", action=\"store_true\", help=\"Print JSON summary\")\n args = parser.parse_args()\n\n results = run_acceptance(args.cwd.resolve())\n passed = sum(1 for r in results if r.passed)\n total = len(results)\n\n if args.json:\n payload = {\n \"passed\": passed,\n \"total\": total,\n \"results\": [\n {\"name\": r.name, \"passed\": r.passed, \"command\": r.command, \"summary\": r.summary, \"notes\": r.notes}\n for r in results\n ],\n }\n print(json.dumps(payload, indent=2))\n else:\n print(f\"# 0.3 executable acceptance: {passed}/{total} passed\\n\")\n for r in results:\n mark = \"PASS\" if r.passed else \"FAIL\"\n print(f\"[{mark}] {r.name}\")\n print(f\" $ {r.command}\")\n print(f\" {r.summary}\")\n for note in r.notes:\n print(f\" note: {note}\")\n\n return 0 if passed == total else 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n"}, "8bea127115d753125ae436d22ede6364f18a90b2": {"t": 1785773519.394265, "n": 9553, "h": "dd2298b425f3caf6", "c": "#!/usr/bin/env python3\n\"\"\"Run 0.3 executable acceptance (L1+L2+L3) without real credentials.\n\nSkips DeepSeek live calls and any command requiring --allow-real-adapters.\nSafe for CI: no network, no API keys, no Cursor CLI required.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\n\n\n@dataclass\nclass StepResult:\n name: str\n command: str\n passed: bool\n summary: str\n notes: list[str] = field(default_factory=list)\n\n\ndef _run(cmd: list[str], *, cwd: Path) -> subprocess.CompletedProcess[str]:\n return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False)\n\n\ndef _display(cmd: list[str]) -> str:\n shown = [\"python\" if part == sys.executable else part for part in cmd]\n if shown[:3] == [\"python\", \"-m\", \"loop_pilot.cli\"]:\n shown = [\"loop-pilot\", *shown[3:]]\n return \" \".join(shown)\n\n\ndef _loop_pilot(*args: str) -> list[str]:\n return [sys.executable, \"-m\", \"loop_pilot.cli\", *args]\n\n\ndef _outcome(output: str) -> str | None:\n match = re.search(r\"completed:\\s*(\\w+)\", output, re.IGNORECASE)\n if match:\n return match.group(1).lower()\n if re.search(r\"\\b(?:intern|paper|daily_news):\\s*\\w+\", output, re.IGNORECASE):\n return \"composite\"\n return None\n\n\ndef _check_daily_news_candidates(artifact_dir: Path, run_id_hint: str | None = None) -> tuple[bool, str]:\n base = artifact_dir / \"daily-news\"\n if not base.is_dir():\n return False, \"var/artifacts/daily-news missing\"\n dirs = sorted(base.iterdir(), key=lambda p: p.stat().st_mtime, reverse=True)\n for run_dir in dirs:\n if not run_dir.is_dir():\n continue\n required = [\"intern-candidates.md\", \"paper-candidates.md\", \"candidate-actions.json\"]\n missing = [name for name in required if not (run_dir / name).is_file()]\n if not missing:\n return True, f\"{run_dir.name}: {', '.join(required)}\"\n return False, \"no daily-news run with all three candidate files\"\n\n\ndef run_acceptance(repo: Path) -> list[StepResult]:\n results: list[StepResult] = []\n artifact_dir = repo / \"var\" / \"artifacts\"\n\n def record(name: str, cmd: list[str], passed: bool, summary: str, notes: list[str] | None = None) -> None:\n results.append(StepResult(name, _display(cmd), passed, summary, notes or []))\n\n # L1.1 Mini\n mini_cmds: list[tuple[str, list[str], str | set[str]]] = [\n (\"L1.1 intern fixture\", _loop_pilot(\"run\", \"intern\", \"--fixture\", \"simple_python_bug\", \"--dry-run\"), \"partial\"),\n (\"L1.1 paper fixture\", _loop_pilot(\"run\", \"paper\", \"--fixture\", \"unsupported_claim\", \"--dry-run\"), \"partial\"),\n (\"L1.1 daily-news fixture\", _loop_pilot(\"run\", \"daily-news\", \"--fixture\", \"github_star_snapshots\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 run all mini\", _loop_pilot(\"run\", \"all\", \"--fixture-set\", \"mini\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in mini_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n if isinstance(expected, set):\n ok = outcome in expected and proc.returncode == 0\n else:\n ok = outcome == expected and proc.returncode == 0\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n ok, msg = _check_daily_news_candidates(artifact_dir)\n record(\n \"L1.1 daily_news candidate artifacts\",\n [sys.executable, \"-c\", \"check candidates\"],\n ok,\n msg,\n )\n\n # L1.2 0.2 workspace\n workspace_cmds: list[tuple[str, list[str], str]] = [\n (\"L1.2 intern workspace\", _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 paper workspace\", _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 daily-news demo\", _loop_pilot(\"run\", \"daily-news\", \"--source-profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 run all demo\", _loop_pilot(\"run\", \"all\", \"--profile\", \"demo\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in workspace_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n ok = outcome == expected or (name.endswith(\"run all demo\") and proc.returncode == 0 and outcome == \"composite\")\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n # L2 Adapter core\n for name, args in [\n (\"L2 adapters list\", [\"adapters\", \"list\"]),\n (\"L2 adapters doctor\", [\"adapters\", \"doctor\"]),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n ok = proc.returncode == 0 and \"mock\" in proc.stdout.lower()\n record(name, cmd, ok, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n blocked_reason = \"allow_real_adapters=false\" in (proc.stdout + proc.stderr).lower()\n intern_dirs = sorted((artifact_dir / \"intern\").glob(\"*\"), key=lambda p: p.stat().st_mtime, reverse=True) if (artifact_dir / \"intern\").is_dir() else []\n trace_ok = False\n if intern_dirs:\n trace_path = intern_dirs[0] / \"adapter-call-trace.jsonl\"\n trace_ok = trace_path.is_file()\n record(\n \"L2 intern cursor_cli dry-run\",\n cmd,\n outcome == \"blocked\" and blocked_reason and trace_ok,\n f\"outcome={outcome}, adapter_trace={trace_ok}\",\n [\"blocked runs must write adapter-call-trace.jsonl with blocked_reason\"],\n )\n\n cmd = _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n record(\n \"L2 paper deepseek dry-run\",\n cmd,\n outcome == \"blocked\",\n f\"outcome={outcome} (outer gate; live key test MANUAL)\",\n [\"SKIP MANUAL: no DEEPSEEK_API_KEY; missing-key path needs --allow-real-adapters\"],\n )\n\n # L3 Safety\n for name, args, expect in [\n (\"L3 cursor_cli default gate\", [\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\"], \"blocked\"),\n (\"L3 deepseek default gate\", [\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\"], \"blocked\"),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_trace = \"traceback\" not in (proc.stdout + proc.stderr).lower()\n record(name, cmd, outcome == expect and no_trace, f\"outcome={outcome}, no_traceback={no_trace}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--adapter\", \"fake_adapter\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_crash = proc.returncode == 0\n blocked = outcome == \"blocked\" and \"unknown adapter\" in (proc.stdout + proc.stderr).lower()\n record(\n \"L3 fake_adapter blocked\",\n cmd,\n no_crash and blocked,\n f\"outcome={outcome}, rc={proc.returncode}\",\n [\"unknown adapter must BLOCKED, not mock fallback\"],\n )\n\n for name, cmd in [\n (\"L3 pytest\", [sys.executable, \"-m\", \"pytest\", \"-q\"]),\n (\"L3 ruff\", [sys.executable, \"-m\", \"ruff\", \"check\", \".\"]),\n (\"L3 doctor\", _loop_pilot(\"doctor\")),\n ]:\n proc = _run(cmd, cwd=repo)\n record(name, cmd, proc.returncode == 0, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n # Secret grep (env var names in messages OK; raw sk- keys not)\n state_dir = repo / \"var\" / \"state\"\n leak = False\n if state_dir.is_dir():\n for path in state_dir.rglob(\"*\"):\n if not path.is_file():\n continue\n text = path.read_text(encoding=\"utf-8\", errors=\"ignore\")\n if re.search(r\"sk-[a-f0-9]{20,}\", text, re.IGNORECASE):\n leak = True\n break\n record(\"L3 no raw API key leak\", [sys.executable, \"-c\", \"grep secrets\"], not leak, \"N/A (no key set)\" if not leak else \"FAIL: sk- pattern found\")\n\n return results\n\n\ndef main() -> int:\n parser = argparse.ArgumentParser(description=\"0.3 executable acceptance (no credentials)\")\n parser.add_argument(\"--cwd\", type=Path, default=Path.cwd())\n parser.add_argument(\"--json\", action=\"store_true\", help=\"Print JSON summary\")\n args = parser.parse_args()\n\n results = run_acceptance(args.cwd.resolve())\n passed = sum(1 for r in results if r.passed)\n total = len(results)\n\n if args.json:\n payload = {\n \"passed\": passed,\n \"total\": total,\n \"results\": [\n {\"name\": r.name, \"passed\": r.passed, \"command\": r.command, \"summary\": r.summary, \"notes\": r.notes}\n for r in results\n ],\n }\n print(json.dumps(payload, indent=2))\n else:\n print(f\"# 0.3 executable acceptance: {passed}/{total} passed\\n\")\n for r in results:\n mark = \"PASS\" if r.passed else \"FAIL\"\n print(f\"[{mark}] {r.name}\")\n print(f\" $ {r.command}\")\n print(f\" {r.summary}\")\n for note in r.notes:\n print(f\" note: {note}\")\n\n return 0 if passed == total else 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n"}, "0988f992be5341e75510b3673163bbdf194a9767": {"t": 1785773522.204743, "n": 9531, "h": "ba0a92e269b1bbb1", "c": "#!/usr/bin/env python3\n\"\"\"Run 0.3 executable acceptance (L1+L2+L3) without real credentials.\n\nSkips DeepSeek live calls and any command requiring --allow-real-adapters.\nSafe for CI: no network, no API keys, no Cursor CLI required.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\n\n\n@dataclass\nclass StepResult:\n name: str\n command: str\n passed: bool\n summary: str\n notes: list[str] = field(default_factory=list)\n\n\ndef _run(cmd: list[str], *, cwd: Path) -> subprocess.CompletedProcess[str]:\n return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False)\n\n\ndef _display(cmd: list[str]) -> str:\n shown = [\"python\" if part == sys.executable else part for part in cmd]\n if shown[:3] == [\"python\", \"-m\", \"loop_pilot.cli\"]:\n shown = [\"loop-pilot\", *shown[3:]]\n return \" \".join(shown)\n\n\ndef _loop_pilot(*args: str) -> list[str]:\n return [sys.executable, \"-m\", \"loop_pilot.cli\", *args]\n\n\ndef _outcome(output: str) -> str | None:\n match = re.search(r\"completed:\\s*(\\w+)\", output, re.IGNORECASE)\n if match:\n return match.group(1).lower()\n if re.search(r\"\\b(?:intern|paper|daily_news):\\s*\\w+\", output, re.IGNORECASE):\n return \"composite\"\n return None\n\n\ndef _check_daily_news_candidates(artifact_dir: Path, run_id_hint: str | None = None) -> tuple[bool, str]:\n base = artifact_dir / \"daily-news\"\n if not base.is_dir():\n return False, \"var/artifacts/daily-news missing\"\n dirs = sorted(base.iterdir(), key=lambda p: p.stat().st_mtime, reverse=True)\n for run_dir in dirs:\n if not run_dir.is_dir():\n continue\n required = [\"intern-candidates.md\", \"paper-candidates.md\", \"candidate-actions.json\"]\n missing = [name for name in required if not (run_dir / name).is_file()]\n if not missing:\n return True, f\"{run_dir.name}: {', '.join(required)}\"\n return False, \"no daily-news run with all three candidate files\"\n\n\ndef run_acceptance(repo: Path) -> list[StepResult]:\n results: list[StepResult] = []\n artifact_dir = repo / \"var\" / \"artifacts\"\n\n def record(name: str, cmd: list[str], passed: bool, summary: str, notes: list[str] | None = None) -> None:\n results.append(StepResult(name, _display(cmd), passed, summary, notes or []))\n\n # L1.1 Mini\n mini_cmds: list[tuple[str, list[str], str | set[str]]] = [\n (\"L1.1 intern fixture\", _loop_pilot(\"run\", \"intern\", \"--fixture\", \"simple_python_bug\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 paper fixture\", _loop_pilot(\"run\", \"paper\", \"--fixture\", \"unsupported_claim\", \"--dry-run\"), \"partial\"),\n (\"L1.1 daily-news fixture\", _loop_pilot(\"run\", \"daily-news\", \"--fixture\", \"github_star_snapshots\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 run all mini\", _loop_pilot(\"run\", \"all\", \"--fixture-set\", \"mini\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in mini_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n if isinstance(expected, set):\n ok = outcome in expected and proc.returncode == 0\n else:\n ok = outcome == expected and proc.returncode == 0\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n ok, msg = _check_daily_news_candidates(artifact_dir)\n record(\n \"L1.1 daily_news candidate artifacts\",\n [sys.executable, \"-c\", \"check candidates\"],\n ok,\n msg,\n )\n\n # L1.2 0.2 workspace\n workspace_cmds: list[tuple[str, list[str], str]] = [\n (\"L1.2 intern workspace\", _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 paper workspace\", _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 daily-news demo\", _loop_pilot(\"run\", \"daily-news\", \"--source-profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 run all demo\", _loop_pilot(\"run\", \"all\", \"--profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n ]\n for name, cmd, expected in workspace_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n ok = outcome == expected or (name.endswith(\"run all demo\") and proc.returncode == 0 and outcome == \"composite\")\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n # L2 Adapter core\n for name, args in [\n (\"L2 adapters list\", [\"adapters\", \"list\"]),\n (\"L2 adapters doctor\", [\"adapters\", \"doctor\"]),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n ok = proc.returncode == 0 and \"mock\" in proc.stdout.lower()\n record(name, cmd, ok, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n blocked_reason = \"allow_real_adapters=false\" in (proc.stdout + proc.stderr).lower()\n intern_dirs = sorted((artifact_dir / \"intern\").glob(\"*\"), key=lambda p: p.stat().st_mtime, reverse=True) if (artifact_dir / \"intern\").is_dir() else []\n trace_ok = False\n if intern_dirs:\n trace_path = intern_dirs[0] / \"adapter-call-trace.jsonl\"\n trace_ok = trace_path.is_file()\n record(\n \"L2 intern cursor_cli dry-run\",\n cmd,\n outcome == \"blocked\" and blocked_reason and trace_ok,\n f\"outcome={outcome}, adapter_trace={trace_ok}\",\n [\"blocked runs must write adapter-call-trace.jsonl with blocked_reason\"],\n )\n\n cmd = _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n record(\n \"L2 paper deepseek dry-run\",\n cmd,\n outcome == \"blocked\",\n f\"outcome={outcome} (outer gate; live key test MANUAL)\",\n [\"SKIP MANUAL: no DEEPSEEK_API_KEY; missing-key path needs --allow-real-adapters\"],\n )\n\n # L3 Safety\n for name, args, expect in [\n (\"L3 cursor_cli default gate\", [\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\"], \"blocked\"),\n (\"L3 deepseek default gate\", [\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\"], \"blocked\"),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_trace = \"traceback\" not in (proc.stdout + proc.stderr).lower()\n record(name, cmd, outcome == expect and no_trace, f\"outcome={outcome}, no_traceback={no_trace}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--adapter\", \"fake_adapter\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_crash = proc.returncode == 0\n blocked = outcome == \"blocked\" and \"unknown adapter\" in (proc.stdout + proc.stderr).lower()\n record(\n \"L3 fake_adapter blocked\",\n cmd,\n no_crash and blocked,\n f\"outcome={outcome}, rc={proc.returncode}\",\n [\"unknown adapter must BLOCKED, not mock fallback\"],\n )\n\n for name, cmd in [\n (\"L3 pytest\", [sys.executable, \"-m\", \"pytest\", \"-q\"]),\n (\"L3 ruff\", [sys.executable, \"-m\", \"ruff\", \"check\", \".\"]),\n (\"L3 doctor\", _loop_pilot(\"doctor\")),\n ]:\n proc = _run(cmd, cwd=repo)\n record(name, cmd, proc.returncode == 0, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n # Secret grep (env var names in messages OK; raw sk- keys not)\n state_dir = repo / \"var\" / \"state\"\n leak = False\n if state_dir.is_dir():\n for path in state_dir.rglob(\"*\"):\n if not path.is_file():\n continue\n text = path.read_text(encoding=\"utf-8\", errors=\"ignore\")\n if re.search(r\"sk-[a-f0-9]{20,}\", text, re.IGNORECASE):\n leak = True\n break\n record(\"L3 no raw API key leak\", [sys.executable, \"-c\", \"grep secrets\"], not leak, \"N/A (no key set)\" if not leak else \"FAIL: sk- pattern found\")\n\n return results\n\n\ndef main() -> int:\n parser = argparse.ArgumentParser(description=\"0.3 executable acceptance (no credentials)\")\n parser.add_argument(\"--cwd\", type=Path, default=Path.cwd())\n parser.add_argument(\"--json\", action=\"store_true\", help=\"Print JSON summary\")\n args = parser.parse_args()\n\n results = run_acceptance(args.cwd.resolve())\n passed = sum(1 for r in results if r.passed)\n total = len(results)\n\n if args.json:\n payload = {\n \"passed\": passed,\n \"total\": total,\n \"results\": [\n {\"name\": r.name, \"passed\": r.passed, \"command\": r.command, \"summary\": r.summary, \"notes\": r.notes}\n for r in results\n ],\n }\n print(json.dumps(payload, indent=2))\n else:\n print(f\"# 0.3 executable acceptance: {passed}/{total} passed\\n\")\n for r in results:\n mark = \"PASS\" if r.passed else \"FAIL\"\n print(f\"[{mark}] {r.name}\")\n print(f\" $ {r.command}\")\n print(f\" {r.summary}\")\n for note in r.notes:\n print(f\" note: {note}\")\n\n return 0 if passed == total else 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n"}, "0cacf20077304f840c4835811c572a9c694bceae": {"t": 1785773523.8206177, "n": 9130, "h": "917ce1182dd6f5e4", "c": "#!/usr/bin/env python3\n\"\"\"Run 0.3 executable acceptance (L1+L2+L3) without real credentials.\n\nSkips DeepSeek live calls and any command requiring --allow-real-adapters.\nSafe for CI: no network, no API keys, no Cursor CLI required.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport argparse\nimport json\nimport re\nimport subprocess\nimport sys\nfrom dataclasses import dataclass, field\nfrom pathlib import Path\n\n\n@dataclass\nclass StepResult:\n name: str\n command: str\n passed: bool\n summary: str\n notes: list[str] = field(default_factory=list)\n\n\ndef _run(cmd: list[str], *, cwd: Path) -> subprocess.CompletedProcess[str]:\n return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False)\n\n\ndef _display(cmd: list[str]) -> str:\n shown = [\"python\" if part == sys.executable else part for part in cmd]\n if shown[:3] == [\"python\", \"-m\", \"loop_pilot.cli\"]:\n shown = [\"loop-pilot\", *shown[3:]]\n return \" \".join(shown)\n\n\ndef _loop_pilot(*args: str) -> list[str]:\n return [sys.executable, \"-m\", \"loop_pilot.cli\", *args]\n\n\ndef _outcome(output: str) -> str | None:\n match = re.search(r\"completed:\\s*(\\w+)\", output, re.IGNORECASE)\n if match:\n return match.group(1).lower()\n if re.search(r\"\\b(?:intern|paper|daily_news):\\s*\\w+\", output, re.IGNORECASE):\n return \"composite\"\n return None\n\n\ndef _check_daily_news_candidates(artifact_dir: Path, run_id_hint: str | None = None) -> tuple[bool, str]:\n base = artifact_dir / \"daily-news\"\n if not base.is_dir():\n return False, \"var/artifacts/daily-news missing\"\n dirs = sorted(base.iterdir(), key=lambda p: p.stat().st_mtime, reverse=True)\n for run_dir in dirs:\n if not run_dir.is_dir():\n continue\n required = [\"intern-candidates.md\", \"paper-candidates.md\", \"candidate-actions.json\"]\n missing = [name for name in required if not (run_dir / name).is_file()]\n if not missing:\n return True, f\"{run_dir.name}: {', '.join(required)}\"\n return False, \"no daily-news run with all three candidate files\"\n\n\ndef run_acceptance(repo: Path) -> list[StepResult]:\n results: list[StepResult] = []\n artifact_dir = repo / \"var\" / \"artifacts\"\n\n def record(name: str, cmd: list[str], passed: bool, summary: str, notes: list[str] | None = None) -> None:\n results.append(StepResult(name, _display(cmd), passed, summary, notes or []))\n\n # L1.1 Mini\n mini_cmds: list[tuple[str, list[str], str | set[str]]] = [\n (\"L1.1 intern fixture\", _loop_pilot(\"run\", \"intern\", \"--fixture\", \"simple_python_bug\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 paper fixture\", _loop_pilot(\"run\", \"paper\", \"--fixture\", \"unsupported_claim\", \"--dry-run\"), \"partial\"),\n (\"L1.1 daily-news fixture\", _loop_pilot(\"run\", \"daily-news\", \"--fixture\", \"github_star_snapshots\", \"--dry-run\"), \"succeeded\"),\n (\"L1.1 run all mini\", _loop_pilot(\"run\", \"all\", \"--fixture-set\", \"mini\", \"--dry-run\"), {\"succeeded\", \"partial\", \"composite\"}),\n ]\n for name, cmd, expected in mini_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n if isinstance(expected, set):\n ok = outcome in expected and proc.returncode == 0\n else:\n ok = outcome == expected and proc.returncode == 0\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n ok, msg = _check_daily_news_candidates(artifact_dir)\n record(\n \"L1.1 daily_news candidate artifacts\",\n [sys.executable, \"-c\", \"check candidates\"],\n ok,\n msg,\n )\n\n # L1.2 0.2 workspace\n workspace_cmds: list[tuple[str, list[str], str]] = [\n (\"L1.2 intern workspace\", _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 paper workspace\", _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--dry-run\"), \"partial\"),\n (\"L1.2 daily-news demo\", _loop_pilot(\"run\", \"daily-news\", \"--source-profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n (\"L1.2 run all demo\", _loop_pilot(\"run\", \"all\", \"--profile\", \"demo\", \"--dry-run\"), \"succeeded\"),\n ]\n for name, cmd, expected in workspace_cmds:\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n ok = outcome == expected or (name.endswith(\"run all demo\") and proc.returncode == 0 and outcome == \"composite\")\n record(name, cmd, ok, f\"outcome={outcome}, rc={proc.returncode}\")\n\n # L2 Adapter core\n for name, args in [\n (\"L2 adapters list\", [\"adapters\", \"list\"]),\n (\"L2 adapters doctor\", [\"adapters\", \"doctor\"]),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n ok = proc.returncode == 0 and \"mock\" in proc.stdout.lower()\n record(name, cmd, ok, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n blocked_reason = \"allow_real_adapters=false\" in (proc.stdout + proc.stderr).lower()\n record(\n \"L2 intern cursor_cli dry-run\",\n cmd,\n outcome == \"blocked\" and blocked_reason,\n f\"outcome={outcome}\",\n [\"adapter-call-trace.jsonl absent when blocked at gate (expected)\"],\n )\n\n cmd = _loop_pilot(\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n record(\n \"L2 paper deepseek dry-run\",\n cmd,\n outcome == \"blocked\",\n f\"outcome={outcome} (outer gate; live key test MANUAL)\",\n [\"SKIP MANUAL: no DEEPSEEK_API_KEY; missing-key path needs --allow-real-adapters\"],\n )\n\n # L3 Safety\n for name, args, expect in [\n (\"L3 cursor_cli default gate\", [\"run\", \"intern\", \"--workspace\", \"examples/intern_demo\", \"--adapter\", \"cursor_cli\", \"--dry-run\"], \"blocked\"),\n (\"L3 deepseek default gate\", [\"run\", \"paper\", \"--workspace\", \"examples/paper_demo\", \"--adapter\", \"deepseek\", \"--dry-run\"], \"blocked\"),\n ]:\n cmd = _loop_pilot(*args)\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_trace = \"traceback\" not in (proc.stdout + proc.stderr).lower()\n record(name, cmd, outcome == expect and no_trace, f\"outcome={outcome}, no_traceback={no_trace}\")\n\n cmd = _loop_pilot(\"run\", \"intern\", \"--adapter\", \"fake_adapter\", \"--dry-run\")\n proc = _run(cmd, cwd=repo)\n outcome = _outcome(proc.stdout + proc.stderr)\n no_crash = proc.returncode == 0 or outcome in {\"blocked\", \"failed\"}\n record(\n \"L3 fake_adapter no crash\",\n cmd,\n no_crash,\n f\"outcome={outcome}, rc={proc.returncode}\",\n [\"WARN: unknown adapter may fall back to mock instead of BLOCKED\"],\n )\n\n for name, cmd in [\n (\"L3 pytest\", [sys.executable, \"-m\", \"pytest\", \"-q\"]),\n (\"L3 ruff\", [sys.executable, \"-m\", \"ruff\", \"check\", \".\"]),\n (\"L3 doctor\", _loop_pilot(\"doctor\")),\n ]:\n proc = _run(cmd, cwd=repo)\n record(name, cmd, proc.returncode == 0, proc.stdout.strip().splitlines()[-1] if proc.stdout else f\"rc={proc.returncode}\")\n\n # Secret grep (env var names in messages OK; raw sk- keys not)\n state_dir = repo / \"var\" / \"state\"\n leak = False\n if state_dir.is_dir():\n for path in state_dir.rglob(\"*\"):\n if not path.is_file():\n continue\n text = path.read_text(encoding=\"utf-8\", errors=\"ignore\")\n if re.search(r\"sk-[a-f0-9]{20,}\", text, re.IGNORECASE):\n leak = True\n break\n record(\"L3 no raw API key leak\", [sys.executable, \"-c\", \"grep secrets\"], not leak, \"N/A (no key set)\" if not leak else \"FAIL: sk- pattern found\")\n\n return results\n\n\ndef main() -> int:\n parser = argparse.ArgumentParser(description=\"0.3 executable acceptance (no credentials)\")\n parser.add_argument(\"--cwd\", type=Path, default=Path.cwd())\n parser.add_argument(\"--json\", action=\"store_true\", help=\"Print JSON summary\")\n args = parser.parse_args()\n\n results = run_acceptance(args.cwd.resolve())\n passed = sum(1 for r in results if r.passed)\n total = len(results)\n\n if args.json:\n payload = {\n \"passed\": passed,\n \"total\": total,\n \"results\": [\n {\"name\": r.name, \"passed\": r.passed, \"command\": r.command, \"summary\": r.summary, \"notes\": r.notes}\n for r in results\n ],\n }\n print(json.dumps(payload, indent=2))\n else:\n print(f\"# 0.3 executable acceptance: {passed}/{total} passed\\n\")\n for r in results:\n mark = \"PASS\" if r.passed else \"FAIL\"\n print(f\"[{mark}] {r.name}\")\n print(f\" $ {r.command}\")\n print(f\" {r.summary}\")\n for note in r.notes:\n print(f\" note: {note}\")\n\n return 0 if passed == total else 1\n\n\nif __name__ == \"__main__\":\n sys.exit(main())\n"}}}}