{
  "schemaVersion": 1,
  "title": "Klypix decision-correction handoff: disposable MCP smoke test",
  "observedAt": "2026-09-24T09:07:40.457Z",
  "engine": {
    "package": "klypix-mcp",
    "version": "1.86.2",
    "npmReceipt": {
      "resolved": "https://registry.npmjs.org/klypix-mcp/-/klypix-mcp-1.86.2.tgz",
      "integrity": "sha512-ETbxW1I9sNFYx3gHg771rxkClEJ7BIl+bMlWyvPgETO+O/54kxYMSBP594xpcu4PiJW8qa2eZD6UzvYqYE7AmQ=="
    },
    "sourceFiles": {
      "package.json": "28275148877786808d7337cbf950098cfb904d990a121e07ea6d5af7c73eb26a",
      "bin/klypix-mcp.mjs": "4f69de6c1da053df3a715319d3f390aa14828d6c622e41280b6318f1bf96bedb",
      "bin/klypix-worker.mjs": "c1038ceb5a0d0e099b42ec19beac1f1ca9168153bc290aef3a1046336286abd1",
      "src/klypix-core.mjs": "b861a5d20e2c3e7b121c838d522afb259519724a1f602fa48ee86789874cf8d5",
      "src/klypix-format.mjs": "b9fe450402cceb5f08d798b53d3867fb61a7d536759d0fec23d828b9195ba3a7",
      "src/semantic-memory.mjs": "2606dc11ad7b836f24087231882e015df7259e7b5661e9442a08cfd1ccab8a07"
    },
    "sha256": "0571040ef4d04ec5461ba6d791a9b13e3e73041d3f6ac5cfaf335c319b6bbebd"
  },
  "harnessSha256": "8ce6c3acaec92f3d79c4285651455add89e2fad9aaa02250fcf9a72b70915c74",
  "environment": {
    "node": "v24.13.1",
    "platform": "win32",
    "arch": "x64",
    "retrieval": "lexical; optional embedding runtime absent",
    "freshProcesses": 4,
    "isolatedHomePerProcess": true
  },
  "command": "node verify-memory-handoff.mjs --engine ./node_modules/klypix-mcp --out result.json",
  "setup": "npm install --ignore-scripts --no-audit --no-fund klypix-mcp@1.86.2",
  "fixture": {
    "original": "Project Atlas database decision: use SQLite for the offline prototype because a single developer needs local setup without a database service.",
    "correction": "CORRECTION: Project Atlas database decision now uses PostgreSQL instead of SQLite because the team needs concurrent writers and shared transactions. The offline prototype choice is superseded.",
    "question": "What is the Project Atlas database decision and why was it chosen?",
    "expectedDecisionCards": 2
  },
  "passed": true,
  "summary": {
    "passed": 11,
    "total": 11
  },
  "checks": [
    {
      "name": "emptyFixtureHasNoDecisions",
      "passed": true,
      "details": "Empty container only; no expected answers pre-seeded."
    },
    {
      "name": "originalDecisionPersisted",
      "passed": true,
      "details": "Saved card contains the captured database choice and its complete rationale."
    },
    {
      "name": "freshSessionStructuredRecall",
      "passed": true,
      "details": "A new process and empty home recall the saved original card by the same card ID."
    },
    {
      "name": "freshSessionAskIncludesRationale",
      "passed": true,
      "details": "The brain_ask card body includes the original decision and why; not merely the echoed question."
    },
    {
      "name": "correctionPersistedAsLiveCard",
      "passed": true,
      "details": "The correction was captured as a live card through brain_note."
    },
    {
      "name": "originalPreservedAsSupersededHistory",
      "passed": true,
      "details": "The original card ID and full rationale remain in Archive."
    },
    {
      "name": "explicitSupersessionLinkPersisted",
      "passed": true,
      "details": "The saved graph links the original decision to its correction with superseded by."
    },
    {
      "name": "freshSessionStructuredCurrentDecision",
      "passed": true,
      "details": "Fresh structured recall includes the corrected live card and does not present the old card without correction."
    },
    {
      "name": "freshSessionAskLabelsHistoryAndCorrection",
      "passed": true,
      "details": "brain_ask includes current rationale and separately marks the old answer archived, stale, and corrected."
    },
    {
      "name": "brainOnlyCopyRetainsCurrentDecision",
      "passed": true,
      "details": "Copying only brain.klypix to a new path and using another empty home preserves current recall. This is one-machine copy portability, not two-PC sync."
    },
    {
      "name": "lexicalRetrievalObserved",
      "passed": true,
      "details": "All observed ask responses report lexical ranking; no local embedding model was installed."
    }
  ],
  "observations": {
    "originalCapture": "✓ brain_note → brain.klypix (via canvas:\"<FIXTURE>\\project\\brain.klypix\") · 1 added · 1 linked. Reopen the brain in the KLYPIX app to see it.",
    "originalCard": {
      "id": "txt_hkn398nh",
      "area": "Architecture",
      "text": "Architecture: Project Atlas database\ndecision: use SQLite for the offline\nprototype because a single developer\nneeds local setup without a database\nservice.\n#architecture"
    },
    "freshSessionBeforeCorrection": {
      "mode": "lexical-fast",
      "hits": [
        {
          "id": "txt_hkn398nh",
          "evidence": {
            "sources": [],
            "omitted": 0,
            "verify": null,
            "recordedVia": "memory-handoff-client-1",
            "recordedAt": "2026-09-24T09:07:41.584Z"
          },
          "area": "Architecture",
          "text": "Architecture: Project Atlas database decision: use SQLite for the offline prototype because a single developer needs local setup without a database service. #architecture",
          "score": 10.5,
          "correctedBy": null
        }
      ],
      "sufficient": true,
      "durationMs": 22,
      "brain": "brain.klypix"
    },
    "askBeforeCorrection": "_brain: brain.klypix · “Disposable Project Atlas handoff fixture” · 1 cards · via canvas:\"<FIXTURE>\\project\\brain.klypix\"_\n\n> LEXICAL ONLY — @huggingface/transformers is not present, so these are keyword matches with no semantic ranking. Measured on a real 2,377-card brain: recall@5 0% lexical vs ~30% with the runtime. Retrying will not help. Semantic ranking activates once the runtime resolves, or is placed at <FIXTURE>\\home\\session-2\\.claude\\project-brain\\semantic\\node_modules\\@huggingface\\transformers.\n\n# Answer “What is the Project Atlas database decision and why was it chosen?” from these 1 brain card(s) — 1 matched, lexical-only (no semantic runtime) ranking\n_Synthesize a DIRECT answer from the cards below, then cite the ones you used by [Area]+date. Where a card is marked ⚠️ CORRECTED, answer from the correction, NOT the stale card. Include superseded/archived cards only to show how a decision CHANGED. If the cards don't actually answer the question, say so — don't pad._\n\n## [Architecture] 2026-09-24\nArchitecture: Project Atlas database decision: use SQLite for the offline prototype because a single developer needs local setup without a database service. #architecture\n\n",
    "correctionCapture": "✓ brain_note → brain.klypix (via canvas:\"<FIXTURE>\\project\\brain.klypix\") · 1 added · 1 superseded · 1 linked. Reopen the brain in the KLYPIX app to see it.",
    "savedAfterCorrection": {
      "original": {
        "id": "txt_hkn398nh",
        "area": "Archive",
        "text": "↩︎ superseded 2026-09-24\nArchitecture: Project Atlas database\ndecision: use SQLite for the offline\nprototype because a single developer\nneeds local setup without a database\nservice.\n#architecture"
      },
      "current": {
        "id": "txt_aukj1jfs",
        "area": "Architecture",
        "text": "Architecture: CORRECTION: Project\nAtlas database decision now uses\nPostgreSQL instead of SQLite because\nthe team needs concurrent writers and\n shared transactions. The offline\nprototype choice is superseded.\n#architecture"
      },
      "edge": {
        "from": "↩︎ superseded 2026-09-24",
        "to": "Architecture: CORRECTION: Project",
        "fromId": "txt_hkn398nh",
        "toId": "txt_aukj1jfs",
        "relationship": null,
        "label": "superseded by"
      }
    },
    "freshSessionAfterCorrection": {
      "mode": "lexical-fast",
      "hits": [
        {
          "id": "txt_aukj1jfs",
          "evidence": {
            "sources": [],
            "omitted": 0,
            "verify": null,
            "recordedVia": "memory-handoff-client-2",
            "recordedAt": "2026-09-24T09:07:43.459Z"
          },
          "area": "Architecture",
          "text": "Architecture: CORRECTION: Project Atlas database decision now uses PostgreSQL instead of SQLite because the team needs concurrent writers and shared transactions. The offline prototype choice is superseded. #architecture",
          "score": 6.5,
          "correctedBy": null
        }
      ],
      "sufficient": true,
      "durationMs": 19,
      "brain": "brain.klypix"
    },
    "askAfterCorrection": "_brain: brain.klypix · “Disposable Project Atlas handoff fixture” · 2 cards · via canvas:\"<FIXTURE>\\project\\brain.klypix\"_\n\n> LEXICAL ONLY — @huggingface/transformers is not present, so these are keyword matches with no semantic ranking. Measured on a real 2,377-card brain: recall@5 0% lexical vs ~30% with the runtime. Retrying will not help. Semantic ranking activates once the runtime resolves, or is placed at <FIXTURE>\\home\\session-3\\.claude\\project-brain\\semantic\\node_modules\\@huggingface\\transformers.\n\n# Answer “What is the Project Atlas database decision and why was it chosen?” from these 2 brain card(s) — 2 matched, lexical-only (no semantic runtime) ranking\n_Synthesize a DIRECT answer from the cards below, then cite the ones you used by [Area]+date. Where a card is marked ⚠️ CORRECTED, answer from the correction, NOT the stale card. Include superseded/archived cards only to show how a decision CHANGED. If the cards don't actually answer the question, say so — don't pad._\n\n## [Architecture] 2026-09-24\nArchitecture: CORRECTION: Project Atlas database decision now uses PostgreSQL instead of SQLite because the team needs concurrent writers and shared transactions. The offline prototype choice is superseded. #architecture\n\n## [Archive] 2026-09-24 · ⛔ archived/superseded\n↩︎ superseded 2026-09-24 Architecture: Project Atlas database decision: use SQLite for the offline prototype because a single developer needs local setup without a database service. #architecture\n\n  ⚠️ CORRECTED — this card is STALE; the current truth is:\n  Architecture: CORRECTION: Project Atlas database decision now uses PostgreSQL instead of SQLite because the team needs concurrent writers and shared transactions. The offline prototype choice is superseded. #architecture\n\n",
    "portableCopyContext": {
      "mode": "lexical-fast",
      "hits": [
        {
          "id": "txt_aukj1jfs",
          "evidence": {
            "sources": [],
            "omitted": 0,
            "verify": null,
            "recordedVia": "memory-handoff-client-2",
            "recordedAt": "2026-09-24T09:07:43.459Z"
          },
          "area": "Architecture",
          "text": "Architecture: CORRECTION: Project Atlas database decision now uses PostgreSQL instead of SQLite because the team needs concurrent writers and shared transactions. The offline prototype choice is superseded. #architecture",
          "score": 6.5,
          "correctedBy": null
        }
      ],
      "sufficient": true,
      "durationMs": 30,
      "brain": "brain.klypix"
    },
    "portableCopyAsk": "_brain: brain.klypix · “Disposable Project Atlas handoff fixture” · 2 cards · via canvas:\"<FIXTURE>\\portable-project\\brain.klypix\"_\n\n> LEXICAL ONLY — @huggingface/transformers is not present, so these are keyword matches with no semantic ranking. Measured on a real 2,377-card brain: recall@5 0% lexical vs ~30% with the runtime. Retrying will not help. Semantic ranking activates once the runtime resolves, or is placed at <FIXTURE>\\home\\session-4\\.claude\\project-brain\\semantic\\node_modules\\@huggingface\\transformers.\n\n# Answer “What is the Project Atlas database decision and why was it chosen?” from these 2 brain card(s) — 2 matched, lexical-only (no semantic runtime) ranking\n_Synthesize a DIRECT answer from the cards below, then cite the ones you used by [Area]+date. Where a card is marked ⚠️ CORRECTED, answer from the correction, NOT the stale card. Include superseded/archived cards only to show how a decision CHANGED. If the cards don't actually answer the question, say so — don't pad._\n\n## [Architecture] 2026-09-24\nArchitecture: CORRECTION: Project Atlas database decision now uses PostgreSQL instead of SQLite because the team needs concurrent writers and shared transactions. The offline prototype choice is superseded. #architecture\n\n## [Archive] 2026-09-24 · ⛔ archived/superseded\n↩︎ superseded 2026-09-24 Architecture: Project Atlas database decision: use SQLite for the offline prototype because a single developer needs local setup without a database service. #architecture\n\n  ⚠️ CORRECTED — this card is STALE; the current truth is:\n  Architecture: CORRECTION: Project Atlas database decision now uses PostgreSQL instead of SQLite because the team needs concurrent writers and shared transactions. The offline prototype choice is superseded. #architecture\n\n"
  },
  "error": null,
  "limitations": [
    "Author-run deterministic smoke test of one synthetic decision and one explicit correction; not independent evidence or a comparative ranking.",
    "Four SDK stdio MCP clients with fresh processes and homes; not Claude Code, Codex, or Cursor UI/LLM execution.",
    "Lexical matching with a deliberately shared subject; does not measure paraphrase recall, large-brain retrieval quality, or an LLM correctly acting on context.",
    "One machine, sequential sessions, and a local file copy; does not demonstrate simultaneous teammates, Git merging, live two-PC presence, or cloud synchronization.",
    "No model API keys inherited, optional model runtime absent, auto-update disabled; this is not a packet-capture privacy audit.",
    "Raw engine output includes an advisory referring to a historical retrieval benchmark. This fixture does not reproduce or validate those advisory numbers."
  ]
}
