You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Project identity. Credentials, query strings and inline config comments are stripped from a remote URL before it becomes an identity, so a token never reaches the store. Equivalent spellings of one remote (scp, ssh://, https://, trailing / or .git, case) reduce to the same identity. A relative local remote (../upstream.git, .\x) gives no identity, since it names a different repository from every clone that resolves it. A drive-letter remote (C:\repos\x.git) is read as a local path rather than an scp host named C. A path fact under a filesystem root (C:\, /) binds correctly.
Import. An imported scopeRepo keeps its identity intact (port, subpath and a .git-suffixed subpath included) and has any credential stripped, so it still matches the live project. Imported scope roots are normalized. A captured_at in the future is rejected, captured_at and last_surfaced_at go through a strict ISO-8601 parser that accepts a bare date and refuses malformed or extended-year values, duplicate ids are flagged in the --dry-run plan, and superseded_by edges whose id is not 36 characters are kept.
Review and undo. Undoing a rejection restores the fact's previous status, and undoing a rejection or an edit skips usage and refused-secret events rather than treating them as the change to undo.
Capture.mem remember on text that matches a pending suggestion promotes it with source_type user. A repeated mem suggest counts as a sighting without writing a source row that only echoes the fact. Sighting excerpts keep the fact's own sentence. mem scan-session no longer scans the output that !cmd bash-mode turns wrap in the user turn.
Contradiction and consolidate. A fact that agrees with the winner is never superseded, a pinned project fact is never superseded as a cross-scope duplicate, and mem consolidate compares normalized values, so two spellings of one value are not a conflict.
Anchors.valid-until dates are parsed strictly, git-tracked answers for the repository root, and a non-UTF-8 file under file-contains, a reftable HEAD placeholder, and unsupported glob syntax read as unverified instead of contradicted.
Storage on Windows. A --root that differs from the stored scope root only in case reaffirms the fact instead of missing it.
Backup and restore.mem restore recovers from a live store that is not a readable database by moving it aside to mem.db.unreadable-<timestamp> and naming that file in its output, and retries the swap when a concurrent write leaves the epoch unchanged. The stale-temp sweep only touches mem's own snapshot files.
Wiring. A project mem init run from the home directory keeps the user-level hooks, every duplicated shared AGENTS.md block is stripped and collapsed, shared Copilot keybindings survive until the last uninstall, and mem uninstall --all --user skips tools that have no user-level config. The postinstall script also treats npm_config_location=global as a global install.
CLI. Malformed numeric options are rejected rather than coerced, and daysAgoIso clamps to the valid Date range. The hint footer leaves out a session id that is not safe to pass back on a command line. mem reflect matches session suggestions by the resolved transcript path. The package entry points match the shipped bundle.