{
  "checker": {
    "claims": [
      {
        "claim": "The wake-mcp server exposes a search tool that finds sessions by text",
        "command": "<guest-path> tools/call {\"tool\": \"wake_search\", \"arguments\": {\"query\": \"useEffect(\"}}",
        "evidence": "068f4ced-a156-4781-ad94-c83ef5097a5f` \u00b7 Claude Code \u00b7 \\\"\u4e2d\u6587\u77ed\u8bcd\u6bd4\u5982\u4e24\u4e2a\u5b57\u7684\u600e\u4e48\u529e?\\\"\\n  <host-path> \u00b7 updated 2026-10-24 03:40:15 \u00b7 5 messages \u00b7 claude-fable-5\\n  - seq 1 (assistant, 2026-10-24 03:38:35): \u2026exes every 3-char window, so `\u4e8c\u7ef4\u7801` and `**useEffect(**` both match without language-specific tokenizers. Queries under 3 chars fall ba\u2026\\n    ref: wake://session/claude-code:068f4ced-a156-4781-ad94-c83ef5097a5f#1\\n\\nRead a session with wake_get_session (pass the key, or a ref to start at that message).\\nIndex covers activity up to 2026-10-24 04:01:35 (local time); Wake keeps it fresh whil",
        "expected": "the matching Claude Code session key is returned",
        "input": "{\"tool\": \"wake_search\", \"arguments\": {\"query\": \"useEffect(\"}}",
        "kind": "claim",
        "outcome": "Real input produced the expected result: 068f4ced-a156-4781-ad94-c83ef5097a5f",
        "source": "Search every session and memory file",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "wake-cli answers the same search questions from a terminal",
        "command": "<guest-path> search 'useEffect('",
        "evidence": "068f4ced-a156-4781-ad94-c83ef5097a5f` \u00b7 Claude Code \u00b7 \"\u4e2d\u6587\u77ed\u8bcd\u6bd4\u5982\u4e24\u4e2a\u5b57\u7684\u600e\u4e48\u529e?\"\n  <host-path> \u00b7 updated 2026-10-24 03:40:15 \u00b7 5 messages \u00b7 claude-fable-5\n  - seq 1 (assistant, 2026-10-24 03:38:35): \u2026exes every 3-char window, so `\u4e8c\u7ef4\u7801` and `**useEffect(**` both match without language-specific tokenizers. Queries under 3 chars fall ba\u2026\n    ref: wake://session/claude-code:068f4ced-a156-4781-ad94-c83ef5097a5f#1\n\nRead a session with wake_get_session (pass the key, or a ref to start at that message).\nIndex covers activity up to 2026-10-24 04:01:35 (local time); Wake keeps it fresh while it is ",
        "expected": "the matching session key is printed",
        "input": "search useEffect(",
        "kind": "claim",
        "outcome": "Real input produced the expected result: 068f4ced-a156-4781-ad94-c83ef5097a5f",
        "returncode": 0,
        "source": "`wake-cli` gives the same answers in a terminal",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Inspected README and entry points (wake-cli, wake-mcp, wake GUI). No cron, --once or --now scheduler. The only loop is the GUI file watcher (crates/wake-core/src/watcher.rs, recv_timeout) which runs inside the desktop app; the README's manual one-shot is 'wake-cli refresh' (covered as an example). Desktop GUI could not be run headless here, so no cycle was triggered.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Inspected README and entry points (wake-cli, wake-mcp, wake GUI). No cron, --once or --now scheduler. The only loop is the GUI file watcher (crates/wake-core/src/watcher.rs, recv_timeout) which runs inside the desktop app; the README's manual one-shot is 'wake-cli refresh' (covered as an example). Desktop GUI could not be run headless here, so no cycle was triggered.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>"
      ],
      "kind": "mcp",
      "scope": "product operation",
      "serverInfo": {
        "name": "wake",
        "title": "Wake",
        "version": "0.10.1"
      },
      "tool_result": {
        "content": [
          {
            "text": "1 session match `useEffect(` \u2014 showing 1, best matches first.\n\n1. `claude-code:068f4ced-a156-4781-ad94-c83ef5097a5f` \u00b7 Claude Code \u00b7 \"\u4e2d\u6587\u77ed\u8bcd\u6bd4\u5982\u4e24\u4e2a\u5b57\u7684\u600e\u4e48\u529e?\"\n  <host-path> \u00b7 updated 2026-10-24 03:40:15 \u00b7 5 messages \u00b7 claude-fable-5\n  - seq 1 (assistant, 2026-10-24 03:38:35): \u2026exes every 3-char window, so `\u4e8c\u7ef4\u7801` and `**useEffect(**` both match without language-specific tokenizers. Queries under 3 chars fall ba\u2026\n    ref: wake://session/claude-code:068f4ced-a156-4781-ad94-c83ef5097a5f#1\n\nRead a session with wake_get_session (pass the key, or a ref to start at that message).\nIndex covers activity up to 2026-10-24 04:01:35 (local time); Wake keeps it fresh while it is running.",
            "type": "text"
          }
        ],
        "isError": false
      },
      "tool_result_checked": true,
      "tool_schema_bytes": 8382,
      "tools": [
        "wake_search",
        "wake_list_sessions",
        "wake_get_session",
        "wake_list_projects",
        "wake_list_memories"
      ],
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Data-layer tests run with cargo",
        "command": "<guest-path> test -p wake-core",
        "deferred": false,
        "evidence": "oundtrip.rs (target/debug/deps/db_roundtrip-ee5de68cb77ec280)\n     Running tests/devin_default_root.rs (target/debug/deps/devin_default_root-cfa0dafceaf63e7f)\n     Running tests/mcp_stdio.rs (target/debug/deps/mcp_stdio-8b462d5b49f14a73)\n     Running tests/remote_sync.rs (target/debug/deps/remote_sync-29d6529df81d61ae)\n     Running tests/remote_sync_paths.rs (target/debug/deps/remote_sync_paths-d5285f22086ea84e)\n     Running tests/scanner_finale.rs (target/debug/deps/scanner_finale-b82fe3d8fc82747b)\n     Running tests/skills.rs (target/debug/deps/skills-b80c8f4ccf7b8229)\n   Doc-tests wake_core",
        "expected": "all test suites report ok",
        "input": "cargo test -p wake-core",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Development section: data-layer tests only (adapter contracts, FTS, scanner)",
        "verdict": "yes"
      },
      {
        "claim": "Refresh the index while Wake is closed",
        "command": "<guest-path> refresh",
        "deferred": false,
        "evidence": "Refreshed the index at /tmp/wake-demo-home/.local/share/wake/wake.db: 424 sessions from 16 agents.",
        "expected": "index is refreshed with the synthetic demo sessions",
        "input": "no arguments",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md shell commands: wake-cli refresh",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Installed system packages and rustup with the README's install commands. The Ubuntu package list came from the README's Linux section; rustup was the README's Rust toolchain requirement, installed with the rustup.rs installer.",
    "The source snapshot is not a git repository, so I did not run git init / git fetch of the pinned commit. make-linux.sh and the tests need no git metadata, so the pin could not be checked against the snapshot.",
    "Did not run scripts/test.sh (it is a zsh script). Ran the documented 'cargo test -p wake-core' instead.",
    "Did not run the install.sh step of the tar.gz or the .deb; those write to the user's home and system paths. Used the built binaries from target/release directly.",
    "Probes and claims use absolute binary paths and set HOME=/tmp/wake-demo-home. The checker's replay environment did not find the rustup default toolchain for the cargo example, so that example sets RUSTUP_HOME and CARGO_HOME explicitly. The first validation run failed on that, and the second passed.",
    "Cycle detection: no scheduler, cron, --once or --now trigger was found. The only loop is the GUI file watcher, which runs inside the desktop app and was not started. The manual one-shot 'wake-cli refresh' was run as an example. cycles.json records detected=false with that reason.",
    "The GUI app (Wake) was built but not launched, so no GUI behaviour was checked."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Build Wake for Linux with the README's make-linux.sh, index a synthetic agent-session home with wake-cli, and search it through the wake-mcp stdio server (wake_search tool) and wake-cli search.",
  "operation_scope": "Ubuntu 24.04 x86_64 VM, non-root user with passwordless sudo. Linux is marked experimental in the README. Data is the synthetic demo home from scripts/demo-home.py at /tmp/wake-demo-home (424 sessions). The desktop GUI was not launched because it needs a display. No real agent data was read.",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "sudo apt-get install -y libasound2-dev libfontconfig1-dev libwayland-dev libxkbcommon-dev libxkbcommon-x11-dev libssl-dev libzstd-dev pkg-config cmake clang (plus curl, build-essential)",
    "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable  (Rust 1.99.1)",
    "scripts/make-linux.sh  (release build; produced dist/wake-0.10.1-linux-amd64.tar.gz and dist/wake_0.10.1_amd64.deb)",
    "python3 scripts/demo-home.py /tmp/wake-demo-home",
    "HOME=/tmp/wake-demo-home wake-cli index",
    "HOME=/tmp/wake-demo-home wake-cli search \"useEffect(\"",
    "HOME=/tmp/wake-demo-home wake-mcp call wake_search '{\"query\":\"useEffect(\"}'  (and an MCP initialize/tools/list over stdio)",
    "HOME=/tmp/wake-demo-home wake-cli refresh",
    "cargo test -p wake-core  (documented data-layer tests: all suites ok)"
  ],
  "stuck_step": null,
  "suggested_fix": "None needed for the tested path. For a full check, run the GUI on a machine with a display and confirm sessions list and resume, since Linux support is experimental."
}
