{
  "run_id": "memstrand--memstrand-claude-haiku-5-5-1792785875194590859",
  "date": "2026-10-23T20:10:44.763246+00:00",
  "repo": "memstrand/memstrand",
  "kind": "mcp",
  "source": "https://github.com/memstrand/memstrand",
  "commit": "a22dc07381fd1b6ab090e4ddacf377df0ef68538",
  "model": "claude-haiku-5-5",
  "model_version": "claude-haiku-5-5",
  "test_version": "readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9",
  "pass": true,
  "outcome": "pass",
  "time_to_working_s": 338.3934553889558,
  "total_s": 369.5686252117157,
  "steps": [
    "cd <guest-path> && pwd && ls -la && git status 2>&1 | head -3; id -u; python3 --version; cat /etc/os-release | head -2; ls /inputs 2>&1",
    "cd <guest-path> && cat README.md 2>/dev/null | head -200",
    "cd <guest-path> && grep -n -i \"requires-python\\|^name\\|version\\|scripts\" -A2 pyproject.toml | head -40; echo ---; cat Makefile; echo ---; ls examples tests scripts; echo ---; cat .gitignore; ls -la .coldpass",
    "cd <guest-path> && git init -q && git remote add origin https://github.com/memstrand/memstrand && timeout 120 git fetch --depth 1 origin a22dc07381fd1b6ab090e4ddacf377df0ef68538 2>&1 | tail -5; git reset --mixed FETCH_HEAD 2>&1 | tail -2; git log --oneline -1 2>&1",
    "python3 -m venv <guest-path> 2>&1 | tail -3 || true; ls <guest-path> 2>/dev/null || (sudo -n apt-get update -qq && sudo -n apt-get install -y -qq python3-venv python3-pip ><guest-path> 2>&1; python3 -m venv <guest-path> && echo VENV_OK)",
    "cd /tmp && <guest-path> -m pip --version && <guest-path> install -q memstrand 2>&1 | tail -15; echo EXIT=$?; <guest-path> show memstrand 2>&1 | head -3; ls <guest-path> | grep memstrand",
    "cd <guest-path> && head -c 3500 docs/cli.md; echo; echo ----; <guest-path> --help 2>&1 | head -40",
    "cd <guest-path> && cat examples/quickstart.py | head -80",
    "cd <guest-path> && export MEMSTRAND_HOME=<guest-path> && timeout 600 <guest-path> remember \"Chiran's mini PC is named cognita-pulse\" --task homelab 2>&1 | tail -15; echo EXIT=${PIPESTATUS[0]}",
    "cd <guest-path> && export MEMSTRAND_HOME=<guest-path> && <guest-path> recall \"what is the mini PC called?\" --task homelab 2>/dev/null; echo EXIT=$?; echo ---unrelated; <guest-path> recall \"mini PC\" --task disk-cleanup 2>/dev/null; echo EXIT=$?",
    <email>\\|def remember\\|def recall\\|name=\\\"remember\\|name=\\\"recall\" src/memstrand/*.py | head -30; grep -rn -i \"bearer\\|MEMSTRAND_TOKEN\\|api.key\" docs/configuration.md | head -8",
    "cd <guest-path> && sed -n 85,175p src/memstrand/mcp_server.py",
    "cd <guest-path> && grep -rn -i \"schedul\\|interval\\|every.*sec\\|while True\\|--once\\|--now\\|def consolidate\" src/memstrand/*.py | head -30; echo ---; grep -n \"consolidat\" docs/cli.md | head; echo ---; grep -n \"pytest\\|\\[project.optional\" -A3 pyproject.toml | head -20",
    "cd <guest-path> && sed -n 970,1010p src/memstrand/server.py; echo ---; sed -n 60,68p docs/cli.md",
    "cd <guest-path> && export MEMSTRAND_HOME=<guest-path> && <guest-path> consolidate 2>/dev/null; echo EXIT=$?; echo ---; timeout 900 <guest-path> examples/quickstart.py 2>/dev/null; echo EXIT=$?",
    "cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/probe.json <<'EOF'\n{\"kind\":\"mcp\",\"argv\":[\"<guest-path>\",\"mcp\"],\"cwd\":\"<guest-path>\",\"env\":{\"MEMSTRAND_HOME\":\"<guest-path>\"},\"tool\":\"recall\",\"arguments\":{\"query\":\"what is the mini PC called?\",\"task_id\":\"homelab\"},\"expected_text\":\"cognita-pulse\"}\nEOF\ncat > .coldpass/claims.json <<'EOF'\n[\n{\"kind\":\"claim\",\"claim\":\"Hard scope isolation: a memory scoped to one task is not returned to an unrelated task\",\"source\":\"- **Hard scope isolation** \u2014 session/task/host is a filter applied before ranking, not a signal\",\"input\":\"recall 'mini PC' under unrelated task disk-cleanup\",\"expected\":\"(no memories found)\",\"probe_kind\":\"cli\",\"argv\":[\"<guest-path>\",\"recall\",\"mini PC\",\"--task\",\"disk-cleanup\"],\"env\":{\"MEMSTRAND_HOME\":\"<guest-path>\"},\"expected_text\":\"(no memories found)\",\"cwd\":\"<guest-path>\"},\n{\"kind\":\"claim\",\"claim\":\"Search by meaning, not keywords\",\"source\":\"2. **Search by meaning**, not keywords.\",\"input\":\"what is the small computer on my desk called?\",\"expected\":\"memory mentioning cognita-pulse is returned\",\"probe_kind\":\"cli\",\"argv\":[\"<guest-path>\",\"recall\",\"what is the small computer on my desk called?\",\"--task\",\"homelab\"],\"env\":{\"MEMSTRAND_HOME\":\"<guest-path>\"},\"expected_text\":\"cognita-pulse\",\"cwd\":\"<guest-path>\"}\n]\nEOF\ncat > .coldpass/examples.json <<'EOF'\n[{\"kind\":\"example\",\"claim\":\"Acceptance rubric: remember, recall by meaning, and no cross-task leak against a persistent store\",\"source\":\"README.md#acceptance-test (examples/quickstart.py)\",\"input\":\"no arguments; uses MEMSTRAND_HOME store\",\"expected\":\"all three tests pass\",\"argv\":[\"<guest-path>\",\"examples/quickstart.py\"],\"cwd\":\"<guest-path>\",\"env\":{\"MEMSTRAND_HOME\":\"<guest-path>\"},\"expected_text\":\"all three tests pass\"}]\nEOF\ncat > .coldpass/cycles.json <<'EOF'\n{\"detected\":true,\"checks\":[{\"claim\":\"Background scheduler periodically runs consolidate() (expire, decay, dedup, replay)\",\"source\":\"src/memstrand/server.py\",\"quote\":\"        if now - last_consolidate >= consolidate_seconds:\",\"schedule\":\"periodic background loop started by memstrand serve (consolidate_seconds)\",\"method\":\"run-once: manual invocation of the same Memory.consolidate() via the CLI, no source edits\",\"input\":\"memstrand consolidate against MEMSTRAND_HOME store\",\"expected\":\"consolidation summary JSON printed, expired count reported\",\"kind\":\"cli\",\"argv\":[\"<guest-path>\",\"consolidate\"],\"cwd\":\"<guest-path>\",\"env\":{\"MEMSTRAND_HOME\":\"<guest-path>\"},\"expected_text\":\"\\\"expired\\\": 0\"}]}\nEOF\nfor f in probe claims examples cycles; do <guest-path> -c \"import json,sys;json.load(open(sys.argv[1]));print('ok',sys.argv[1])\" .coldpass/$f.json; done",
    "cd <guest-path> && grep -n \"Hard scope isolation\\|Search by meaning\" README.md",
    "cd <guest-path> && <guest-path> -I - <<'EOF'\nimport json\np='.coldpass/claims.json'\nc=json.load(open(p))\nc[0]['source']='- Hard scope isolation \u2014 session/task/host is a filter applied before ranking, not a signal'\njson.dump(c,open(p,'w'),indent=1,ensure_ascii=False)\nprint(open('README.md',encoding='utf-8').read().count(c[0]['source']), open('README.md',encoding='utf-8').read().count(c[1]['source']))\nEOF\n<env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -60",
    "cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/report.json <<'EOF'\n{\"outcome\":\"working\",\"fault_owner\":null,\"operation\":\"Store a memory with the CLI, read it back by meaning through the CLI and the MCP stdio server (recall tool), confirm it does not leak into an unrelated task, and run the README acceptance example.\",\"operation_scope\":\"Linux (Ubuntu 24.04, Python 3.12.3), PyPI memstrand 0.3.0 (matches pinned commit a22dc07 pyproject version), local embedded store under MEMSTRAND_HOME=<guest-path>, local ONNX embedding model (downloaded from Hugging Face on first use). No LLM endpoint configured; no daemon started.\",\"steps\":[\"git init; git remote add origin https://github.com/memstrand/memstrand; git fetch --depth 1 origin a22dc07381fd1b6ab090e4ddacf377df0ef68538; git reset --mixed FETCH_HEAD\",\"python3 -m venv <guest-path> (after apt-get install python3-venv python3-pip)\",\"<guest-path> install memstrand (README Quickstart)\",\"<guest-path> remember \\\"Chiran's mini PC is named cognita-pulse\\\" --task homelab\",\"<guest-path> recall \\\"what is the mini PC called?\\\" --task homelab\",\"<guest-path> recall \\\"mini PC\\\" --task disk-cleanup (returned no memories)\",\"<guest-path> mcp (MCP stdio, tool recall)\",\"<guest-path> consolidate (one manual cycle of the scheduler's consolidate step)\",\"<guest-path> examples/quickstart.py (README acceptance test)\"],\"deviations\":[\"<guest-path> was not a git repository; ran git init and the pinned fetch/reset as instructed (fetch succeeded).\",\"System python3 could not create a venv (python3-venv missing); installed python3-venv and python3-pip with sudo apt-get (guest is ubuntu uid 1000 with passwordless sudo).\",\"Installed the README's PyPI package (pip install memstrand) into <guest-path> instead of the Makefile's editable install from the checkout (make install / pip install -e '.[dev,all]' not run). PyPI version 0.3.0 matches the pinned pyproject version.\",\"No local LLM endpoint is configured, so distillation (improve) is skipped; consolidate reports 'local LLM unreachable'. The distillation half of the product was not exercised.\",\"The background scheduler is not run as a long-lived daemon; the consolidate cycle was triggered by hand with the CLI, which calls the same Memory.consolidate() method.\",\"Repository pytest suite (make test) not run; only the README acceptance example and CLI/MCP operations were exercised.\",\"Embedding model (BAAI/bge-small via fastembed) downloaded from Hugging Face on first use; this needed network access.\"],\"stuck_step\":null,\"main_blocker\":null,\"plain_failure\":null,\"suggested_fix\":\"None required for the tested path. Optional: configure a local LLM endpoint to exercise improve()/distillation, and run the repo's pytest suite via make install then make test.\"}\nEOF\n<guest-path> -c \"import json;json.load(open('.coldpass/report.json'));print('report ok')\"; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | head -c 400; echo; ps aux | grep -c \"[m]emstrand\"",
    "ps -eo pid,etime,args | grep \"[m]emstrand\" | cut -c1-200"
  ],
  "stuck_step": null,
  "error_excerpt": null,
  "what_it_did": "Store a memory with the CLI, read it back by meaning through the CLI and the MCP stdio server (recall tool), confirm it does not leak into an unrelated task, and run the README acceptance example.",
  "suggested_fix": null,
  "tokens_in": 443122,
  "tokens_out": 13861,
  "cost_usd": 0.018572989999999998,
  "usage_complete": true,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": true,
        "argv": [
          "<guest-path>",
          "mcp"
        ],
        "kind": "mcp",
        "serverInfo": {
          "name": "memstrand",
          "version": ""
        },
        "tools": [
          "remember",
          "recall",
          "context",
          "answer",
          "scope",
          "update",
          "forget",
          "log_turn",
          "improve",
          "ingest",
          "stats"
        ],
        "tool_schema_bytes": 10164,
        "tool_result": {
          "content": [
            {
              "text": "{\n  \"id\": \"mem:f5e07e3a1add4647\",\n  \"score\": 0.849128236279044,\n  \"category\": \"fact\",\n  \"content\": \"Chiran's mini PC is named cognita-pulse\",\n  \"provenance\": \"explicit_statement\",\n  \"confidence\": 0.95,\n  \"task_id\": \"homelab\",\n  \"scopes\": [\n    \"homelab\"\n  ],\n  \"tags\": [],\n  \"source_ref\": null,\n  \"contradictions\": []\n}",
              "type": "text"
            }
          ],
          "isError": false,
          "structuredContent": {
            "result": [
              {
                "id": "mem:f5e07e3a1add4647",
                "score": 0.849128236279044,
                "category": "fact",
                "content": "Chiran's mini PC is named cognita-pulse",
                "provenance": "explicit_statement",
                "confidence": 0.95,
                "task_id": "homelab",
                "scopes": [
                  "homelab"
                ],
                "tags": [],
                "source_ref": null,
                "contradictions": []
              }
            ]
          }
        },
        "tool_result_checked": true,
        "scope": "product operation"
      }
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 1 connection review.",
    "findings": [
      {
        "kind": "connection-review",
        "count": 1,
        "note": "Repository processes attempted these non-loopback connections; proxies can hide the final hostname.",
        "location_count": 35,
        "process_count": 10
      }
    ],
    "context": [],
    "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=memstrand--memstrand-claude-haiku-5-5-1792785875194590859",
    "evidence_file": "/data/safety/memstrand--memstrand-claude-haiku-5-5-1792785875194590859.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": 20,
  "native_bundle": null,
  "architecture": null,
  "backend": "hyperv",
  "platform_details": {
    "backend": "hyperv",
    "os": "linux"
  },
  "platform_conflicts": null,
  "sandbox_source": null,
  "source_pin": {
    "commit": "a22dc07381fd1b6ab090e4ddacf377df0ef68538",
    "url": "https://github.com/memstrand/memstrand"
  },
  "purpose": "initial",
  "profile": {
    "model": "claude-haiku-5-5",
    "reasoning": "low"
  },
  "fault": {
    "owner": null,
    "status": "resolved",
    "reason": null
  },
  "fix_id": null,
  "verifies_run_id": null,
  "hosting": null,
  "operation_scope": "product operation",
  "tool_calls": 20,
  "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/memstrand/memstrand",
  "cost_to_try": "free",
  "hardware": null,
  "what_failed": null,
  "local_or_hosted": "local",
  "cycle_checks": [
    {
      "kind": "cycle",
      "claim": "Background scheduler periodically runs consolidate() (expire, decay, dedup, replay)",
      "source": "src/memstrand/server.py",
      "input": "memstrand consolidate against MEMSTRAND_HOME store",
      "expected": "consolidation summary JSON printed, expired count reported",
      "command": "<guest-path> consolidate",
      "schedule": "periodic background loop started by memstrand serve (consolidate_seconds)",
      "method": "run-once: manual invocation of the same Memory.consolidate() via the CLI, no source edits",
      "verdict": "yes",
      "outcome": "Triggered one cycle by hand (run-once: manual invocation of the same Memory.consolidate() via the CLI, no source edits; normal trigger: periodic background loop started by memstrand serve (consolidate_seconds)): {\n  \"expired\": 0,\n  \"edges_pruned\": 0,\n  \"duplicates_linked\": 0,\n  \"replayed\": 0,\n  \"distilled\": {\n    \"skipped\": \"local LLM unreachable\"\n  }\n}",
      "evidence": "{\n  \"expired\": 0,\n  \"edges_pruned\": 0,\n  \"duplicates_linked\": 0,\n  \"replayed\": 0,\n  \"distilled\": {\n    \"skipped\": \"local LLM unreachable\"\n  }\n}",
      "returncode": 0
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "Hard scope isolation: a memory scoped to one task is not returned to an unrelated task",
      "source": "- Hard scope isolation \u2014 session/task/host is a filter applied before ranking, not a signal",
      "input": "recall 'mini PC' under unrelated task disk-cleanup",
      "expected": "(no memories found)",
      "command": "<guest-path> recall 'mini PC' --task disk-cleanup",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: (no memories found)",
      "evidence": "(no memories found)\n",
      "returncode": 0,
      "source_checked": true,
      "source_file": "README.md"
    },
    {
      "kind": "claim",
      "claim": "Search by meaning, not keywords",
      "source": "2. **Search by meaning**, not keywords.",
      "input": "what is the small computer on my desk called?",
      "expected": "memory mentioning cognita-pulse is returned",
      "command": "<guest-path> recall 'what is the small computer on my desk called?' --task homelab",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: cognita-pulse",
      "evidence": "cognita-pulse\n          id=mem:f5e07e3a1add4647  scope=homelab\n",
      "returncode": 0,
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "Acceptance rubric: remember, recall by meaning, and no cross-task leak against a persistent store",
      "source": "README.md#acceptance-test (examples/quickstart.py)",
      "input": "no arguments; uses MEMSTRAND_HOME store",
      "command": "<guest-path> examples/quickstart.py",
      "evidence": "test 2 (semantic recall): [{'id': 'mem:f5e07e3a1add4647', 'score': 0.8591283596433427, 'content': \"Chiran's mini PC is named cognita-pulse\", 'category': 'fact', 'provenance': 'explicit_statement', 'confidence': 0.95, 'task_id': 'homelab', 'scopes': ['homelab'], 'tags': [], 'host': None, 'source': None, 'source_ref': None, 'created_at': '2026-10-23T20:07:58.199159+00:00', 'similarity': 0.7425051700805104, 'keyword': True, 'superseded': False, 'neighbors': [], 'contradictions': []}]\ntest 3 (no cross-task leak): []\ntest 3b (unscoped query): []\nall three tests pass",
      "deferred": false,
      "expected": "all three tests pass",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    }
  ],
  "does_what_it_says": "yes",
  "maintenance": {
    "last_commit_at": "2026-10-22T20:00:00Z",
    "commits_90d": 51,
    "merged_prs_90d": 12,
    "open_issues": 0,
    "open_prs": 0,
    "reply_share": null,
    "reply_threads": 0,
    "median_reply_hours": null,
    "last_release_at": null,
    "archived": false,
    "verdict": "maintained",
    "note": "actively maintained: last commit 1 days ago; 51 commits and 12 merged PRs in 90 days; 0 open issues, 0 open PRs; no releases"
  },
  "maintenance_verdict": "maintained",
  "maintenance_note": "actively maintained: last commit 1 days ago; 51 commits and 12 merged PRs in 90 days; 0 open issues, 0 open PRs; no releases",
  "maintained": "active",
  "maintained_note": "last commit 1 days ago",
  "last_commit_at": "2026-10-22T20:00:04Z",
  "last_release_at": null,
  "open_issues": null,
  "answered_issues": null,
  "platforms_claimed": [
    "linux"
  ],
  "topic": "mcp-server",
  "agent_interfaces": [
    {
      "interface": "mcp",
      "evidence": "independent checker",
      "observed": true,
      "operation_checked": true
    }
  ],
  "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": 11,
    "schema_bytes": 10164,
    "tokens_approx": 2541,
    "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-23T20:10:44.763246+00:00",
  "tested_commit": "a22dc07381fd1b6ab090e4ddacf377df0ef68538",
  "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": "memstrand/memstrand",
    "source": "https://github.com/memstrand/memstrand",
    "commit": "a22dc07381fd1b6ab090e4ddacf377df0ef68538",
    "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": "a22dc07381fd1b6ab090e4ddacf377df0ef68538",
      "url": "https://github.com/memstrand/memstrand"
    },
    "platform_details": {
      "os": "linux",
      "backend": "hyperv"
    },
    "platform_conflicts": null,
    "reasoning": "low",
    "service_tier": null,
    "resources": {
      "cpus": 2,
      "memory_mib": 4096,
      "disk_mib": 32768
    },
    "operation": "Store a memory with the CLI, read it back by meaning through the CLI and the MCP stdio server (recall tool), confirm it does not leak into an unrelated task, and run the README acceptance example.",
    "operation_scope": "product operation",
    "hosting": null,
    "kind": "mcp",
    "test_version": "readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9",
    "evidence_version": null
  },
  "other_model": null,
  "other_run_id": null,
  "models_agree": null,
  "furthest_model": null,
  "transcript_url": null,
  "report_url": "/reports/memstrand--memstrand-claude-haiku-5-5-1792785875194590859.json"
}
