{
  "run_id": "akitaonrails--ai-memory-claude-haiku-5-5-1792883077122192526",
  "date": "2026-10-24T23:08:31.126782+00:00",
  "repo": "akitaonrails/ai-memory",
  "kind": "mcp",
  "source": "https://github.com/akitaonrails/ai-memory",
  "commit": "1bd866375b01031d63db54862a133376598d3701",
  "model": "claude-haiku-5-5",
  "model_version": "claude-haiku-5-5",
  "test_version": "readme-c934555f51e3c2082ecd575e014a061355a62257bc1c10cc514c27dbff1bec7d",
  "pass": true,
  "outcome": "pass",
  "time_to_working_s": 183.88448492402676,
  "total_s": 234.00455784797668,
  "steps": [
    "cd <guest-path> && ls -la && cat README.md 2>/dev/null | head -c 7000; echo; python3 --version; id -u; ls /inputs 2>/dev/null",
    "cd <guest-path> && grep -n '^#' README.md | head -80; ls .git 2>/dev/null | head -2; cat rust-toolchain.toml",
    "cd <guest-path> && sed -n 217,255p README.md; sed -n 596,634p README.md",
    "cd <guest-path> && sed -n 749,766p README.md; which cargo rustc rustup; cargo --version 2>&1; grep -n -i 'cargo build\\|cargo install' README.md docs/install.md CONTRIBUTING.md | head -20",
    "cd /tmp && timeout 120 curl -fsSL https://github.com/akitaonrails/ai-memory/releases/latest/download/install.sh -o /tmp/ai-install.sh; echo \"rc=$?\"; ls -la /tmp/ai-install.sh 2>/dev/null; head -c 600 /tmp/ai-install.sh 2>/dev/null",
    "cd /tmp && curl -fsSL https://github.com/akitaonrails/ai-memory/releases/latest/download/install.sh | sh; echo \"rc=$?\"; ls -la ~/.local/bin/ai-memory 2>&1; ~/.local/bin/ai-memory --version 2>&1",
    "export PATH=\"$HOME/.local/bin:$PATH\"; echo HOME=$HOME; ai-memory setup --plan 2>&1 | head -c 4000; echo \"rc=${PIPESTATUS[0]}\"",
    "export PATH=\"$HOME/.local/bin:$PATH\"; ai-memory setup --yes 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | head -c 5000; echo \"rc=${PIPESTATUS[0]}\"",
    "export PATH=\"$HOME/.local/bin:$PATH\"; ai-memory setup --yes --no-service 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | tail -n 15; echo \"rc=${PIPESTATUS[0]}\"; ai-memory serve --help 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | head -40",
    "export PATH=\"$HOME/.local/bin:$PATH\"; nohup ai-memory serve --transport http --enable-web > <guest-path> 2>&1 &\necho $! > <guest-path>; sleep 6; curl -s -i http://127.0.0.1:49374/healthz; echo; tail -c 1500 <guest-path> | sed 's/\\x1b\\[[0-9;]*m//g'",
    "cd <guest-path> && grep -n -i 'api key\\|aim_\\|mcp-bridge\\|memory_store\\|memory_search\\|mcp_http\\|\\bkeys\\b' README.md | head -30; grep -n 'Bearer\\|authorization' -i docs/usage.md | head -10",
    "TOK=$(cat <guest-path>); H=(-H \"Authorization: <secret>\" -H \"Content-Type: application/json\" -H \"Accept: application/json, text/event-stream\"); curl -s -D <guest-path> \"${H[@]}\" -X POST http://127.0.0.1:49374/mcp -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-06-18\",\"capabilities\":{},\"clientInfo\":{\"name\":\"probe\",\"version\":\"0\"}}}' | head -c 800; echo; curl -s \"${H[@]}\" -X POST http://127.0.0.1:49374/mcp -d '{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/list\"}' | grep -o '\"name\":\"[^\"]*\"' | sort -u | head -60",
    "TOK=$(cat <guest-path>); curl -s -H \"Authorization: <secret>\" -H \"Content-Type: application/json\" -H \"Accept: application/json, text/event-stream\" -X POST http://127.0.0.1:49374/mcp -d '{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/list\"}' > <guest-path>; python3 -I -c \"\nimport json,sys\nd=json.load(open('<guest-path>'))\nfor t in d['result']['tools']:\n    if t['name'] in ('memory_write_page','memory_read_page','memory_query','memory_status'):\n        print(t['name'], json.dumps(t['inputSchema'])[:900]); print()\n\" 2>&1 || head -c 3000 <guest-path>",
    "TOK=$(cat <guest-path>); call(){ curl -s -H \"Authorization: <secret>\" -H \"Content-Type: application/json\" -H \"Accept: application/json, text/event-stream\" -X POST http://127.0.0.1:49374/mcp -d \"$1\"; echo; }; call '{\"jsonrpc\":\"2.0\",\"id\":10,\"method\":\"tools/call\",\"params\":{\"name\":\"memory_write_page\",\"arguments\":{\"path\":\"notes/coldpass-check.md\",\"body\":\"Coldpass probe: the zebra-lantern deployment uses port 7341.\",\"workspace\":\"coldpass\",\"project\":\"ailab\"}}}' | head -c 2000",
    "TOK=$(cat <guest-path>); call(){ curl -s -H \"Authorization: <secret>\" -H \"Content-Type: application/json\" -H \"Accept: application/json, text/event-stream\" -X POST http://127.0.0.1:49374/mcp -d \"$1\"; echo; }; call '{\"jsonrpc\":\"2.0\",\"id\":11,\"method\":\"tools/call\",\"params\":{\"name\":\"memory_read_page\",\"arguments\":{\"path\":\"notes/coldpass-check.md\",\"workspace\":\"coldpass\",\"project\":\"ailab\"}}}' | head -c 1500; echo ---; call '{\"jsonrpc\":\"2.0\",\"id\":12,\"method\":\"tools/call\",\"params\":{\"name\":\"memory_query\",\"arguments\":{\"query\":\"zebra-lantern\",\"workspace\":\"coldpass\",\"project\":\"ailab\"}}}' | head -c 1500",
    "cd <guest-path> && grep -n -F 'to query the wiki.' README.md; grep -n -F 'ai-memory recent' README.md | head -3; grep -n -F -- '--once' README.md docs/*.md | head; grep -n -F -- '--now' README.md | head -3; export PATH=\"$HOME/.local/bin:$PATH\"; ai-memory --help 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | sed -n '1,60p'",
    "cd <guest-path> && grep -rn 'scheduled maintenance started' crates | head -3; export PATH=\"$HOME/.local/bin:$PATH\"; ai-memory search zebra-lantern 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | tail -8; echo \"rc=$?\"; ai-memory read-page --path notes/coldpass-check.md 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | tail -8",
    "cd <guest-path> && export PATH=\"$HOME/.local/bin:$PATH\"; ai-memory search --help 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | grep -E '^\\s+(-|--)' | head -12; sed -n 2600,2640p crates/ai-memory-cli/src/commands/serve.rs",
    "cd <guest-path> && export PATH=\"$HOME/.local/bin:$PATH\"; ai-memory search zebra-lantern --workspace coldpass --project ailab 2>/dev/null | tail -8; echo \"rc=$?\"; ai-memory read-page --path notes/coldpass-check.md --workspace coldpass --project ailab 2>/dev/null | tail -8; echo ---; timeout 120 ai-memory forget-sweep --workspace coldpass --project ailab 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | tail -8; echo \"rc=${PIPESTATUS[0]}\"",
    "cd <guest-path> && kill $(cat <guest-path>) 2>/dev/null; sleep 3; pgrep -af 'ai-memory serve' ; export PATH=\"$HOME/.local/bin:$PATH\"; ai-memory search zebra-lantern --workspace coldpass --project ailab 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | tail -4; echo \"rc=${PIPESTATUS[0]}\"",
    "cd <guest-path> && export PATH=\"$HOME/.local/bin:$PATH\"; timeout 60 ai-memory forget-sweep --workspace coldpass --project ailab 2>&1 | sed 's/\\x1b\\[[0-9;]*m//g' | tail -3; echo \"rc=${PIPESTATUS[0]}\"; grep -n 'fn.*forget\\|forget_sweep' crates/ai-memory-cli/src/commands/*.rs | head -5",
    "mkdir -p <guest-path> && cat > <guest-path> <<'EOF'\n#!/usr/bin/env bash\n# Start the documented local server, run one documented client command, then stop the server.\nset -u\nexport HOME=<guest-path>\nSERVE=<guest-path>\nLOG=<guest-path>\n\"$SERVE\" serve --transport http --enable-web >\"$LOG\" 2>&1 &\nPID=$!\nfor i in $(seq 1 60); do\n  if curl -fs http://127.0.0.1:49374/healthz >/dev/null 2>&1; then break; fi\n  sleep 1\ndone\n\"$@\"\nRC=$?\nkill \"$PID\" 2>/dev/null\nwait \"$PID\" 2>/dev/null\nrm -f \"$LOG\"\nexit \"$RC\"\nEOF\nchmod +x <guest-path> && cd <guest-path> && timeout 200 bash <guest-path> <guest-path> search zebra-lantern --workspace coldpass --project ailab 2>/dev/null; echo \"rc=$?\"; sleep 2; curl -s -m 3 http://127.0.0.1:49374/healthz; echo \" health-after rc=$?\"",
    "mkdir -p <guest-path> && cat > <guest-path> <<'EOF'\nimport json, pathlib\nWS = pathlib.Path(\"<guest-path>\")\nTOK = pathlib.Path(\"<guest-path>\").read_text().strip()\nBIN = \"<guest-path>\"\nSRV = [BIN, \"serve\", \"--transport\", \"http\"]\nURL = \"http://127.0.0.1:49374/mcp\"\nHDR = {\"Authorization\": \"<secret>\" + TOK}\nARGS = {\"query\": \"zebra-lantern\", \"workspace\": \"coldpass\", \"project\": \"ailab\"}\nWRAP = [\"bash\", \"<guest-path>\"]\nprobe = {\"kind\": \"mcp_http\", \"argv\": SRV, \"cwd\": str(WS), \"url\": URL, \"headers\": HDR,\n         \"tool\": \"memory_query\", \"arguments\": ARGS, \"expected_text\": \"zebra-lantern\"}\nquote = 'Ask \"have we discussed X?\" or \"search memory for Y\" to query the wiki.'\nclaims = [{\"kind\": \"claim\", \"claim\": \"Wiki search answers a query over stored pages\",\n           \"source\": quote, \"input\": \"zebra-lantern\", \"expected\": \"the stored page is returned\",\n           \"probe_kind\": \"mcp_http\", \"argv\": SRV, \"url\": URL, \"headers\": HDR, \"tool\": \"memory_query\",\n           \"arguments\": ARGS, \"expected_text\": \"zebra-lantern\", \"cwd\": str(WS)}]\nexamples = [\n {\"kind\": \"example\", \"claim\": \"CLI full-text search finds the stored page\", \"source\": \"README.md (Everyday use)\",\n  \"input\": \"search zebra-lantern\", \"expected\": \"hit notes/coldpass-check.md\",\n  \"argv\": WRAP + [BIN, \"search\", \"zebra-lantern\", \"--workspace\", \"coldpass\", \"--project\", \"ailab\"],\n  \"cwd\": str(WS), \"expected_text\": \"notes/coldpass-check.md\"},\n {\"kind\": \"example\", \"claim\": \"CLI reads back a stored wiki page\", \"source\": \"README.md (Everyday use)\",\n  \"input\": \"read-page notes/coldpass-check.md\", \"expected\": \"page body printed\",\n  \"argv\": WRAP + [BIN, \"read-page\", \"--path\", \"notes/coldpass-check.md\", \"--workspace\", \"coldpass\", \"--project\", \"ailab\"],\n  \"cwd\": str(WS), \"expected_text\": \"zebra-lantern deployment uses port 7341\"}]\ncycles = {\"detected\": True, \"checks\": [{\n  \"claim\": \"Scheduled maintenance runs periodic jobs on the server\",\n  \"source\": \"crates/ai-memory-cli/src/commands/serve.rs\",\n  \"quote\": 'info!(jobs = tasks.len(), \"scheduled maintenance started\");',\n  \"schedule\": \"server-side scheduled maintenance tick\", \n  \"method\": \"run-once: start the real server, run the documented forget-sweep job once by hand, stop server\",\n  \"input\": \"forget-sweep --workspace coldpass --project ailab\",\n  \"expected\": \"sweep report printed with ledgers_pruned counter\",\n  \"kind\": \"cli\", \"argv\": WRAP + [BIN, \"forget-sweep\", \"--workspace\", \"coldpass\", \"--project\", \"ailab\"],\n  \"cwd\": str(WS), \"expected_text\": \"ledgers_pruned\"}]}\n(WS/\".coldpass/probe.json\").write_text(json.dumps(probe, indent=2) + \"\\n\")\n(WS/\".coldpass/claims.json\").write_text(json.dumps(claims, indent=2) + \"\\n\")\n(WS/\".coldpass/examples.json\").write_text(json.dumps(examples, indent=2) + \"\\n\")\n(WS/\".coldpass/cycles.json\").write_text(json.dumps(cycles, indent=2) + \"\\n\")\nprint(\"written\")\nEOF\npython3 -I <guest-path> && ls -la <guest-path>",
    "ls -la <guest-path> 2>&1; ls -la /inputs/coldpass-preflight.py 2>&1; cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay 2>&1 | tail -c 5000; echo \"rc=${PIPESTATUS[0]}\"",
    "cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo \"rc=$?\"; python3 -I -c \"\nimport json,sys\nt=open('<guest-path>').read()\ni=t.find('{')\nd=json.loads(t[i:])\nprint({k:(v if not isinstance(v,(list,dict)) else type(v).__name__) for k,v in d.items()})\nfor k in ('problems','errors','problem'):\n    if k in d: print(k, json.dumps(d[k])[:1500])\n\" 2>&1 | head -c 3000; echo; head -c 300 <guest-path>",
    "pgrep -af 'ai-memory serve' | grep -v pgrep | grep -v 'coldpass-safety' ; echo \"serve-procs-checked\"; cat > <guest-path> <<'EOF'\n{\n  \"outcome\": \"working\",\n  \"fault_owner\": null,\n  \"operation\": \"Install ai-memory with the README installer, run setup, start the local HTTP/MCP server, and store then search/read a wiki page through the MCP tool memory_query and the CLI.\",\n  \"operation_scope\": \"Linux x86_64 guest (Ubuntu, Python 3.12.3), local loopback server 127.0.0.1:49374, zero-LLM mode, no agent wired, no systemd user bus. Product installed from the latest GitHub release (ai-memory 3.2.2), not built from the pinned commit 1bd866375b01031d63db54862a133376598d3701.\",\n  \"steps\": [\n    \"curl -fsSL https://github.com/akitaonrails/ai-memory/releases/latest/download/install.sh | sh\",\n    \"ai-memory setup --plan\",\n    \"ai-memory setup --yes (failed on systemd user service: no bus)\",\n    \"ai-memory setup --yes --no-service\",\n    \"ai-memory serve --transport http --enable-web (started by hand, healthz returned {\\\"status\\\":\\\"ok\\\"})\",\n    \"MCP tools/call memory_write_page path=notes/coldpass-check.md, then memory_read_page and memory_query for zebra-lantern (returned the stored body and snippet)\",\n    \"ai-memory search zebra-lantern --workspace coldpass --project ailab\",\n    \"ai-memory read-page --path notes/coldpass-check.md --workspace coldpass --project ailab\",\n    \"ai-memory forget-sweep --workspace coldpass --project ailab (one manual cycle)\",\n    \"<env-var>=<guest-path> python3 -I <guest-path> --validate --replay (valid: true, problems: [], replay PASS)\"\n  ],\n  \"deviations\": [\n    \"Cargo/Rust was not installed; the README's contributor build was not used. The README quick-start release installer was run instead, which installs the latest release, not the pinned commit. No git metadata was fetched, so the pinned commit was not verified against the installed binary.\",\n    \"ai-memory setup --yes failed with 'Failed to connect to bus: No medium found' (no systemd user session in this VM). Re-ran with --no-service, as the README's own error message suggests, and started the server manually with serve --transport http.\",\n    \"setup's self-check reported the server down before it was started; this is expected because the server was not yet running.\",\n    \"The CLI read commands (search, read-page, forget-sweep) call the running server and fail with connection refused when it is stopped. The example and cycle checks therefore run through <guest-path>, a wrapper outside the checkout that starts the real ai-memory serve, runs the documented command, and stops the server.\",\n    \"The MCP probe uses the root bearer token generated by setup at ~/.local/share/ai-memory/auth-tokens/default, not a separately created guest key. It is local to this disposable guest.\",\n    \"The forget-sweep cycle is a manual run-once of a documented maintenance job. The server's scheduler was not triggered by a real clock; the scheduler tick itself was not observed firing. It returned no candidates (ledgers_pruned 0), so it shows the job runs, not that it removed data.\"\n  ],\n  \"stuck_step\": null,\n  \"main_blocker\": null,\n  \"plain_failure\": null,\n  \"suggested_fix\": \"None needed for the operation. For a headless VM, setup should degrade cleanly when no systemd user bus is present, or say so up front instead of failing after writing the config. The README should note that the CLI commands require a running server.\"\n}\nEOF\npython3 -I -c \"import json;d=json.load(open('<guest-path>'));print('report ok', d['outcome'])\"",
    "cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo \"rc=$?\"; python3 -I -c \"\nimport json\nt=open('<guest-path>').read(); d=json.loads(t[t.find('{'):])\nprint('valid', d['valid'], 'problems', d['problems'], 'replay', d['replay']['status'])\"; ls -la <guest-path>; ls <guest-path> 2>&1 | tail -1"
  ],
  "stuck_step": null,
  "error_excerpt": null,
  "what_it_did": "Install ai-memory with the README installer, run setup, start the local HTTP/MCP server, and store then search/read a wiki page through the MCP tool memory_query and the CLI.",
  "suggested_fix": null,
  "tokens_in": 876857,
  "tokens_out": 21565,
  "cost_usd": 0.030366350000000007,
  "usage_complete": true,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": true,
        "kind": "mcp_http",
        "url": "http://127.0.0.1:49374/mcp",
        "hosting": "local",
        "transport": "streamable-http",
        "scope": "remote hosted MCP initialize + tools/list",
        "argv": [
          "<guest-path>",
          "serve",
          "--transport",
          "http"
        ],
        "serverInfo": {
          "name": "ai-memory",
          "version": "3.2.2"
        },
        "protocolVersion": "2025-06-18",
        "tools": [
          "memory_auto_improve",
          "memory_briefing",
          "memory_consolidate",
          "memory_delete_page",
          "memory_explore",
          "memory_feedback",
          "memory_forget_sweep",
          "memory_handoff_accept",
          "memory_handoff_begin",
          "memory_handoff_cancel",
          "memory_handoff_list",
          "memory_install_self_routing",
          "memory_lint",
          "memory_message_cancel",
          "memory_message_list",
          "memory_message_pop",
          "memory_message_send",
          "memory_query",
          "memory_read_page",
          "memory_read_session_observations",
          "memory_recent",
          "memory_restore_page",
          "memory_status",
          "memory_write_page"
        ],
        "tool_schema_bytes": 67283,
        "tool_result": {
          "content": [
            {
              "type": "text",
              "text": "{\n  \"hits\": [\n    {\n      \"id\": \"01a1702a-40f8-7ad3-b4d7-996776c4d804\",\n      \"path\": \"notes/coldpass-check.md\",\n      \"title\": \"coldpass-check\",\n      \"snippet\": \"Coldpass probe: the <mark>zebra-lantern</mark> deployment uses port 7341.\",\n      \"rank\": -0.036065573770491806\n    }\n  ]\n}"
            }
          ],
          "isError": false
        },
        "tool_result_checked": true
      }
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 4 download and execute, 13 hardcoded secret, 11 known vulnerability. 6 static matches retained as context.",
    "findings": [
      {
        "kind": "download-and-execute",
        "count": 4,
        "note": "Source contains download and execute; review its purpose.",
        "location_count": 2
      },
      {
        "kind": "hardcoded-secret",
        "count": 13,
        "note": "Gitleaks found a possible hardcoded secret; value withheld.",
        "location_count": 3
      },
      {
        "kind": "known-vulnerability",
        "count": 10,
        "note": "OSV reports a known vulnerability in this dependency version.",
        "location_count": 5
      }
    ],
    "context": [
      {
        "kind": "hardcoded-secret",
        "count": 6,
        "note": "Gitleaks found a possible hardcoded secret; value withheld.",
        "location_count": 2
      }
    ],
    "limitations": [
      "A short run cannot establish that code is safe.",
      "Connections show IP addresses; proxies can hide the final hostname.",
      "Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing."
    ],
    "static": {
      "dependency_note": "OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check."
    },
    "evidence_url": "/safety/?run=akitaonrails--ai-memory-claude-haiku-5-5-1792883077122192526",
    "evidence_file": "/data/safety/akitaonrails--ai-memory-claude-haiku-5-5-1792883077122192526.json.gz"
  },
  "agent_execution": "native_agent",
  "agent_runtime": "claude-code",
  "agent_runtime_version": "2.1.300 (Claude Code)",
  "tool_transport": "mcp-assigned-vm",
  "platform": "linux",
  "reasoning": "low",
  "service_tier": null,
  "resources": {
    "cpus": 2,
    "memory_mib": 4096,
    "disk_mib": 32768
  },
  "native_tool_calls": 27,
  "native_bundle": null,
  "architecture": null,
  "backend": "hyperv",
  "platform_details": {
    "backend": "hyperv",
    "os": "linux"
  },
  "platform_conflicts": null,
  "sandbox_source": null,
  "source_pin": {
    "commit": "1bd866375b01031d63db54862a133376598d3701",
    "url": "https://github.com/akitaonrails/ai-memory"
  },
  "purpose": "test_rerun",
  "profile": {
    "model": "claude-haiku-5-5",
    "reasoning": "low"
  },
  "fault": {
    "owner": null,
    "status": "resolved",
    "reason": null
  },
  "fix_id": null,
  "verifies_run_id": "akitaonrails--ai-memory-claude-haiku-5-5-1792763525685070213",
  "hosting": "local",
  "operation_scope": "remote hosted MCP initialize + tools/list",
  "tool_calls": 27,
  "guest_setup": null,
  "runtime": null,
  "runtime_version": null,
  "runtime_revision": null,
  "source_revision": null,
  "evidence_version": null,
  "failure_origin": null,
  "evidence_strength": "readme_checked",
  "works": "yes",
  "install_s": null,
  "first_use_s": null,
  "mcp": "local",
  "needs": [],
  "needs_which": null,
  "agent_interface": [
    "mcp"
  ],
  "license": "MIT",
  "repo_url": "https://github.com/akitaonrails/ai-memory",
  "cost_to_try": "free",
  "hardware": null,
  "what_failed": null,
  "local_or_hosted": "local",
  "cycle_checks": [
    {
      "kind": "cycle",
      "claim": "Scheduled maintenance runs periodic jobs on the server",
      "source": "crates/ai-memory-cli/src/commands/serve.rs",
      "input": "forget-sweep --workspace coldpass --project ailab",
      "expected": "sweep report printed with ledgers_pruned counter",
      "command": "bash <guest-path> <guest-path> forget-sweep --workspace coldpass --project ailab",
      "schedule": "server-side scheduled maintenance tick",
      "method": "run-once: start the real server, run the documented forget-sweep job once by hand, stop server",
      "verdict": "yes",
      "outcome": "Triggered one cycle by hand (run-once: start the real server, run the documented forget-sweep job once by hand, stop server; normal trigger: server-side scheduled maintenance tick): {\n  \"dry_run\": false,\n  \"candidates_evaluated\": 1,\n  \"evicted\": [],\n  \"compacted\": [],\n  \"merged\": [],\n  \"expired\": [],\n  \"hard_deleted\": 0,\n  \"observations_prunable\": 0,\n  \"observations_pruned\": 0,\n  \"observation_prune_sessions\": 0,\n  \"observation_prune_batches\": 0,\n  \"ledgers_prunable\": 0,\n  \"ledger_bytes_prunable\": 0,\n  \"ledgers_pruned\": 0,\n  \"ledger_bytes_pruned\": 0,\n  \"ledgers_undeleted\": 0,\n  \"ledger_page_rows_left\": 0\n}\n\u001b[2m2026-10-24T23:08:22.713852Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mai_memory_cli\u001b[0m\u001b[2m:\u001b[0m ai-memory starting \u001b[3mversion\u001b[0m\u001b[2m=\u001b[0m\"3.2.2\" \u001b[3mserver_url\u001b[0m\u001b[2m=\u001b[0mhttp://127.0.0.1:49374 \u001b[3mdata_dir\u001b[0m\u001b[2m=\u001b[0m<guest-path> \u001b[3mbind\u001b[0m\u001b[2m=\u001b[0m127.0.0.1:49374",
      "evidence": "{\n  \"dry_run\": false,\n  \"candidates_evaluated\": 1,\n  \"evicted\": [],\n  \"compacted\": [],\n  \"merged\": [],\n  \"expired\": [],\n  \"hard_deleted\": 0,\n  \"observations_prunable\": 0,\n  \"observations_pruned\": 0,\n  \"observation_prune_sessions\": 0,\n  \"observation_prune_batches\": 0,\n  \"ledgers_prunable\": 0,\n  \"ledger_bytes_prunable\": 0,\n  \"ledgers_pruned\": 0,\n  \"ledger_bytes_pruned\": 0,\n  \"ledgers_undeleted\": 0,\n  \"ledger_page_rows_left\": 0\n}\n\u001b[2m2026-10-24T23:08:22.713852Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mai_memory_cli\u001b[0m\u001b[2m:\u001b[0m ai-memory starting \u001b[3mversion\u001b[0m\u001b[2m=\u001b[0m\"3.2.2\" \u001b[3mserver_url\u001b[0m\u001b[2m=\u001b[0mhttp://127.0.0.1:49374 \u001b[3mdata_dir\u001b[0m\u001b[2m=\u001b[0m<guest-path> \u001b[3mbind\u001b[0m\u001b[2m=\u001b[0m127.0.0.1:49374",
      "returncode": 0
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "Wiki search answers a query over stored pages",
      "source": "Ask \"have we discussed X?\" or \"search memory for Y\" to query the wiki.",
      "input": "{\"tool\": \"memory_query\", \"arguments\": {\"query\": \"zebra-lantern\", \"workspace\": \"coldpass\", \"project\": \"ailab\"}}",
      "expected": "the stored page is returned",
      "command": "<guest-path> serve --transport http tools/call {\"tool\": \"memory_query\", \"arguments\": {\"query\": \"zebra-lantern\", \"workspace\": \"coldpass\", \"project\": \"ailab\"}}",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: zebra-lantern",
      "evidence": "zebra-lantern</mark> deployment uses port 7341.\\\",\\n      \\\"rank\\\": -0.036065573770491806\\n    }\\n  ]\\n}\"}], \"isError\": false}",
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "CLI full-text search finds the stored page",
      "source": "README.md (Everyday use)",
      "input": "search zebra-lantern",
      "command": "bash <guest-path> <guest-path> search zebra-lantern --workspace coldpass --project ailab",
      "evidence": "1 result(s) for \"zebra-lantern\":\n  notes/coldpass-check.md  rank=-0.0000\n    coldpass-check\n    Coldpass probe: the <mark>zebra-lantern</mark> deployment uses port 7341.\n\u001b[2m2026-10-24T23:08:24.183649Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mai_memory_cli\u001b[0m\u001b[2m:\u001b[0m ai-memory starting \u001b[3mversion\u001b[0m\u001b[2m=\u001b[0m\"3.2.2\" \u001b[3mserver_url\u001b[0m\u001b[2m=\u001b[0mhttp://127.0.0.1:49374 \u001b[3mdata_dir\u001b[0m\u001b[2m=\u001b[0m<guest-path> \u001b[3mbind\u001b[0m\u001b[2m=\u001b[0m127.0.0.1:49374",
      "deferred": false,
      "expected": "hit notes/coldpass-check.md",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    },
    {
      "kind": "example",
      "claim": "CLI reads back a stored wiki page",
      "source": "README.md (Everyday use)",
      "input": "read-page notes/coldpass-check.md",
      "command": "bash <guest-path> <guest-path> read-page --path notes/coldpass-check.md --workspace coldpass --project ailab",
      "evidence": "path: notes/coldpass-check.md\n\nColdpass probe: the zebra-lantern deployment uses port 7341.\n\u001b[2m2026-10-24T23:08:25.639743Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mai_memory_cli\u001b[0m\u001b[2m:\u001b[0m ai-memory starting \u001b[3mversion\u001b[0m\u001b[2m=\u001b[0m\"3.2.2\" \u001b[3mserver_url\u001b[0m\u001b[2m=\u001b[0mhttp://127.0.0.1:49374 \u001b[3mdata_dir\u001b[0m\u001b[2m=\u001b[0m<guest-path> \u001b[3mbind\u001b[0m\u001b[2m=\u001b[0m127.0.0.1:49374",
      "deferred": false,
      "expected": "page body printed",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    }
  ],
  "does_what_it_says": "yes",
  "maintenance": {
    "archived": false,
    "commits_90d": 3667,
    "last_commit_at": "2026-10-23T01:23:04Z",
    "last_release_at": "2026-10-23T00:17:51Z",
    "median_reply_hours": null,
    "merged_prs_90d": 849,
    "note": "actively maintained: last commit 0 days ago; 3667 commits and 849 merged PRs in 90 days; 12 open issues, 11 open PRs; latest release 2026-10-23",
    "open_issues": 12,
    "open_prs": 11,
    "reply_share": null,
    "reply_threads": 0,
    "verdict": "maintained"
  },
  "maintenance_verdict": "maintained",
  "maintenance_note": "actively maintained: last commit 0 days ago; 3667 commits and 849 merged PRs in 90 days; 12 open issues, 11 open PRs; latest release 2026-10-23",
  "maintained": "active",
  "maintained_note": "last commit 1 days ago; 4 open issues, 7 answered or closed",
  "last_commit_at": "2026-10-23T01:47:40Z",
  "last_release_at": "2026-10-23T00:17:51Z",
  "open_issues": 4,
  "answered_issues": 7,
  "platforms_claimed": [
    "linux",
    "mac",
    "windows"
  ],
  "topic": "mcp-server",
  "agent_interfaces": [
    {
      "interface": "mcp",
      "evidence": "independent checker",
      "observed": true,
      "operation_checked": true
    },
    {
      "interface": "cli",
      "evidence": "README metadata",
      "observed": false,
      "operation_checked": false
    }
  ],
  "agent_interfaces_note": "README metadata is a discovery hint, not pinned documentation proof. Observed interfaces were exercised in this run. An empty list means unknown.",
  "mcp_context": {
    "tool_count": 24,
    "schema_bytes": 67283,
    "tokens_approx": 16821,
    "estimate_method": "ceil(compact UTF-8 tools/list JSON bytes / 4)",
    "scope": "returned tools/list page only; excludes client framing and tool results"
  },
  "tested_at": "2026-10-24T23:08:31.126782+00:00",
  "tested_commit": "1bd866375b01031d63db54862a133376598d3701",
  "tested_with": {
    "agent": "claude-code",
    "agent_version": "2.1.300 (Claude Code)",
    "model": "claude-haiku-5-5",
    "model_route": "claude-haiku-5-5",
    "reasoning": "low",
    "os": "linux",
    "backend": "hyperv",
    "transport": "mcp-assigned-vm"
  },
  "setup_identity": {
    "repo": "akitaonrails/ai-memory",
    "source": "https://github.com/akitaonrails/ai-memory",
    "commit": "1bd866375b01031d63db54862a133376598d3701",
    "source_revision": null,
    "os": "linux",
    "architecture": null,
    "backend": "hyperv",
    "model": "claude-haiku-5-5",
    "model_version": "claude-haiku-5-5",
    "agent_execution": "native_agent",
    "agent_runtime": "claude-code",
    "agent_runtime_version": "2.1.300 (Claude Code)",
    "tool_transport": "mcp-assigned-vm",
    "runtime": null,
    "runtime_version": null,
    "runtime_revision": null,
    "sandbox_source": null,
    "guest_setup": null,
    "source_pin": {
      "commit": "1bd866375b01031d63db54862a133376598d3701",
      "url": "https://github.com/akitaonrails/ai-memory"
    },
    "platform_details": {
      "os": "linux",
      "backend": "hyperv"
    },
    "platform_conflicts": null,
    "reasoning": "low",
    "service_tier": null,
    "resources": {
      "cpus": 2,
      "memory_mib": 4096,
      "disk_mib": 32768
    },
    "operation": "Install ai-memory with the README installer, run setup, start the local HTTP/MCP server, and store then search/read a wiki page through the MCP tool memory_query and the CLI.",
    "operation_scope": "remote hosted MCP initialize + tools/list",
    "hosting": "local",
    "kind": "mcp",
    "test_version": "readme-c934555f51e3c2082ecd575e014a061355a62257bc1c10cc514c27dbff1bec7d",
    "evidence_version": null
  },
  "transcript_url": null,
  "report_url": "/reports/akitaonrails--ai-memory-claude-haiku-5-5-1792883077122192526.json"
}
