# Claim verification

This file maps externally visible claims to reproducible evidence. Code presence alone is not compatibility or security proof. Results use only `PASS`, `FAIL`, `PARTIAL`, or `UNVERIFIED`.

| ID | README claim | Code location | Test location | Verification command | Result | Severity | Handling |
| --- | --- | --- | --- | --- | --- | --- | --- |
| C01 | Sessions are private by default | `src/database.ts` | `test/database.test.mjs` | `pnpm test` | PASS | P0 | No relationship exists until a user operation creates it. |
| C02 | Sources and consumers are independent | `src/database.ts`, `src/ui-command.ts` | `test/database.test.mjs`, `test/plugin.test.mjs` | `pnpm test` | PASS | P0 | Separate tables, operations, and removal paths. |
| C03 | Governance and durable writes require the current direct human event | `src/command-source.ts`, `src/ui-command.ts` | `test/plugin.test.mjs` | `pnpm test:security` | PASS | P0 | Public relationship verbs fail; the plugin exports no model tool. |
| C04 | Recall and FTS use only active, non-expired versions | `src/database.ts`, `src/recall.ts` | `test/database.test.mjs`, `test/recall.test.mjs` | `pnpm test` and `pnpm doctor:fts` | PASS | P0 | Transactional lifecycle and FTS checks. |
| C05 | Every memory has provenance, versions, and answer-use records | `src/database.ts` | `test/database.test.mjs`, `test/plugin.test.mjs` | `pnpm test` | PASS | P1 | Event ranges, excerpts, methods, chains, and usage are asserted. |
| C06 | History import is optional and failures write nothing | `src/history-import.ts` | `test/history-import.test.mjs` | `pnpm test` | PASS | P0 | Cancellation, empty, tool, truncation, oversize, and provider failure paths are covered. |
| C07 | Injection is bounded, previewable, suppressible, and once per turn | `src/index.ts`, `src/recall.ts`, `src/client/MemoryShareUi.tsx` | `test/plugin.test.mjs`, `test/client.test.mjs` | `pnpm test` plus browser core flow | PASS | P0 | Matching preview decisions are consumed once. |
| C08 | Snapshots contain selected messages and use separated hashed tokens | `src/sharing.ts`, `src/database.ts` | `test/sharing.test.mjs`, `test/plugin.test.mjs`, `test/client.test.mjs` | `pnpm test:security` | PASS | P0 | Access and append purposes, expiry, revocation, and atomic limits are distinct. |
| C09 | Schema 3 migration preserves data, creates a backup, and tolerates a two-process race | `src/database.ts` | `test/database.test.mjs`, `test/fixtures/open-store.mjs` | `pnpm test:migration` | PASS | P0 | Complex fixture, rollback, restart, unknown-schema, and process-race paths pass. |
| C10 | Default storage is Profile-local | `src/profile-storage.ts` | `test/profile-storage.test.mjs` | `pnpm test` | PASS | P0 | Source links require an explicit path rather than guessing. |
| C11 | The plugin uses published DSH interfaces without a core patch | `src/index.ts`, `src/client/index.ts`, `package.json` | `test/client.test.mjs`, packaging checks | `pnpm typecheck` and `pnpm package:check` | PASS | P0 | Public imports and published client slots only. |
| C12 | Stock DSH rc.6 works | `src/client/execute-command.ts` | local fresh-profile evidence in `DSH_COMPATIBILITY.md` | rc.6 tarball/source mount script | PASS | P0 | Tarball, browser core, FTS, source link, and uninstall passed locally. |
| C13 | Stock DSH rc.7 works | `src/client/execute-command.ts` | local fresh-profile evidence in `DSH_COMPATIBILITY.md` | rc.7 tarball/source mount script | PASS | P0 | Tarball, browser core, FTS, source link, and uninstall passed locally. |
| C14 | Tarball and source installs uninstall cleanly | `package.json`, `cordis.patch.yml` | real DSH profile evidence | exact-version `dsh plugin add/remove` and `--dump-config` | PASS | P1 | Verified locally for rc.6 and rc.7. |
| C15 | Retrieval remains bounded at the documented scales | `src/database.ts`, `scripts/benchmark.mjs` | benchmark output in `PERFORMANCE.md` | `pnpm benchmark -- --memories 100000 ...` | PARTIAL | P2 | Recall meets the reference target; the 100,000-memory governance view does not. |
| C16 | Dialogs expose usable labels, errors, and controls | `src/client/MemoryShareUi.tsx` | `test/client.test.mjs`, browser core flow | `pnpm test` plus browser interaction | PARTIAL | P2 | Labels, alerts, dialog primitives, and primary interaction pass; full keyboard, screen-reader, contrast, and automated accessibility audits remain. |
| C17 | Hosted Ubuntu, Windows, macOS and Node 22/24 CI passes | `.github/workflows/ci.yml` | GitHub Actions | hosted workflow | PASS | P1 | The public repository matrix and stock rc.6/rc.7 mount jobs pass; every release tag calls the same reusable workflow again. |
| C18 | npm trusted publication with provenance works | `.github/workflows/release.yml`, `scripts/release-metadata.mjs` | `test/release.test.mjs`, npm trusted publisher and tagged GitHub workflow | tagged release | UNVERIFIED | P1 | The first npm package version requires a one-time bootstrap credential; configure the trusted publisher after that publish and remove the bootstrap secret. |
| C19 | Memory is serialized as untrusted context without a prompt-injection-prevention guarantee | `src/serialization.ts`, `src/index.ts` | `test/recall.test.mjs`, `test/plugin.test.mjs` | `pnpm test:security` | PASS | P0 | The README makes no prevention guarantee and treats memory as untrusted data. |
| C20 | Provenance clearing makes no secure physical-erasure claim | `src/database.ts` | `test/database.test.mjs` | `pnpm test` | PASS | P0 | The README explicitly disclaims physical erasure and names retained copies. |

Summary: 17 PASS, 2 PARTIAL, 1 UNVERIFIED, and 0 FAIL. A `PARTIAL` or `UNVERIFIED` row must not be described as complete in release notes.
