MemPalace epistemic report
Type: agentic-system-analyses/types/agentic-system-epistemic-report.md
Source-and-claim boundary
The question is what licenses reliance on retained conversation and project content, and what checks actually change its admission or later use. Scope and exclusions are those in boundary; sources are declared in its Source register. All added inspection uses SRC-1, implementation unless explicitly labelled doctrine/design. No target or evaluator was executed.
The supplied runtime is a provisional route account, not a coverage limit. Direct inspection of CLI and MCP fragment loading found additional material functions: checkpoint near-duplicate rejection, explicit drawer replacement/deletion, KG temporal withdrawal/replacement, and navigability audit with a failing exit threshold. These refine rather than supersede the runtime's valid containers. A claim that MemPalace merely appends or only returns text would miss these functions. A claim that it verifies stored propositions would confuse structural, similarity and temporal checks with evidence-consuming acceptance.
Public warrant claims include RT-CLM-recall-protocol and EPI-CLM-benchmark-recall. The capability claim RT-CLM-readonly-boundary limits operational admission, not epistemic endorsement.
| Entry point or operation | Source path | Coverage and supporting records, or prevented conclusion |
|---|---|---|
| CLI dispatch | mempalace/cli/__init__.py |
Direct read of fragment list; mining/setup/task routes supplied by runtime. Individual parser branches not fully inspected here. |
| Full/light MCP dispatch and registered handlers | mempalace/mcp_server/__init__.py, mempalace/mcp_light_server.py |
Direct fragment list and result-enrichment read; supplied RT-RTE-mcp-dispatch. Registry includes KG and diary, not only drawer tools. Full schema catalog not independently read. |
| Turn, transcript and setup admission | mempalace/integrations/hermes/__init__.py, mempalace/hooks_cli.py, mempalace/cli/cmd_init.py |
Supplied RT-RTE-hermes-capture, RT-RTE-hook-ingest, RT-RTE-init-detection; source excerpts supplied, not fresh full reads. |
| Drawer add/update/delete and structural checking | mempalace/mcp_server/tools_write.py, mempalace/config.py |
Direct reads; EPI-RTE-drawer-revision, with RT-RTE-mcp-dispatch. |
| Semantic duplicate check and checkpoint skip | mempalace/mcp_server/tools_read.py, mempalace/mcp_server/tools_diary.py |
Direct reads; separate EPI-RTE-duplicate-check and EPI-RTE-checkpoint-disposition. Other diary implementation remains unassessed. |
| Query/prefetch/wake-up and recall instructions | mempalace/searcher/query.py, mempalace/searcher/candidates.py, skills/mempalace-recall/SKILL.md |
Supplied RT-RTE-palace-recall and RT-BAP-agent-context; direct light-wrapper read adds EPI-RTE-relevance-tags. No complete backend-specific recall assessment. |
| KG add/invalidate/supersede/query | mempalace/mcp_server/tools_kg.py, mempalace/knowledge_graph.py |
Direct handler reads and add/invalidate implementation; supersede read through boundary validation, not its complete transaction or underlying query SQL. EPI-RTE-kg-temporal. Atomic/as-of guarantee remains partly uninspected. |
| Audit and tunnel maintenance | mempalace/cli/cmd_audit.py, mempalace/palace_audit.py, mempalace/cli/cmd_tunnels.py |
Direct audit consumer and score function reads; EPI-RTE-palace-audit. EPI-RTE-tunnel-maintenance directly covers proposal review, --yes apply/prune and stale-wing exclusion; underlying proposal/prune algorithms not inspected, preventing validity or completeness conclusions for inferred associations. |
| Retrieval/model evaluation | benchmarks/longmemeval_bench.py, benchmarks/model_eval/runner.py, README.md |
Direct selected metric/consumer reads; EPI-RTE-retrieval-evaluation, EPI-CLM-benchmark-recall. Model runner directly dispatches labelled calibration/classification/entity/memory scoring; its scorers and providers not inspected. No verified model-quality conclusion. |
| Coordination, patch delivery and backend capability admission | mempalace/tasks.py, mempalace/logstream.py, mempalace/backends/registry.py |
Supplied RT-RTE-task-launch, RT-RTE-patch-delivery, RT-RTE-backend-registration; no new truth-acceptance finding. |
| Other included material families | mempalace/miner.py, mempalace/layers.py, crates/, mempalace/backends/, benchmarks/ |
Project/document/source-adapter transformations, closet/AAAK generation, native/media/code routes, non-Chroma variants, replication, repair/backup, other evaluators and host shell variants remain partly or wholly unassessed here. Available evidence is not an access gap. Their omission prevents a system-complete negative about derivation, conjecture, acceptance or evaluator routes. |
Missing evidence is local to conclusions: no live corpus prevents assessment of the actual truth of retained claims; no host trace prevents demonstrated compliance or behavioral activation; no rerun/dataset inspection prevents reproduced recall or encoding-fidelity conclusions; no controlled intervention prevents attributing improvement to a component. Exact external model artifacts and provider internals are unavailable within this pin, preventing claims about their learning, knowledge or stable behavior. Distributed-parametric fixity is separately assessed in RT-CMP-minilm, RT-CMP-embeddinggemma, RT-CMP-embeddinggemma2, RT-CMP-openai-compat and RT-CMP-llm-provider. Fixed inference weights do not imply absence of behavior change through retained text.
Epistemic-object inventory
| Object ID | Candidate truth-apt content or none | Claimed role | Evidence source ID and local anchor | Gap/limit |
|---|---|---|---|---|
| EPI-OBJ-drawer-content | User/assistant testimony or caller-authored propositions, where the text states propositions | Recallable drawer | SRC-1 mempalace/mcp_server/tools_write.py |
Particular truth-apt claims not determinable without corpus; attribution is not verification. |
| EPI-OBJ-kg-triple | Subject–predicate–object relationship over a caller-specified interval | Fact with optional provenance | SRC-1 mempalace/knowledge_graph.py |
Default numerical confidence is not calibrated evidence; predicate interpretation and external truth unchecked. |
| EPI-OBJ-search-tags | Algorithm-relative relevance class and recency rank, not truth probability | Decorate recall result | SRC-1 mempalace/mcp_light_server.py |
Distance and timestamps are the inputs; no endorsement or supersession follows. |
| EPI-OBJ-audit-report | Computed organization scores relative to fixed formulas | Navigability report | SRC-1 mempalace/palace_audit.py |
Formula target differs from truth or actual answer quality. |
| EPI-OBJ-retrieval-metrics | Label-relative retrieval hit metrics | Benchmark evidence | SRC-1 benchmarks/longmemeval_bench.py |
Label/source correctness, actual run and live-loop transfer not established. |
| RT-OBJ-task-request | Goal/done/delivery instructions; any embedded propositions depend on task body | Worker guidance | see RT-OBJ-task-request | Instruction force is not proposition acceptance. |
| RT-OBJ-patch-artifact | Diff is an executable proposal; accompanying rationale may be truth-apt | Delivered change proposal | see RT-OBJ-patch-artifact | Persistence does not establish correct code or installation. |
Authority-route ledger
Rows separate checking, disposition and retention even when one handler connects them. Architectural status describes wiring, not observed activation. Repeated record-owned fields are supplied by the cited declaration; ledger-local judgments below state the epistemic license.
| Route ID | Route function | Architectural status | Object/candidate ID | Content/update relation | Transition or check target | Evaluator/condition and domain | Activation and timing | Possible or observed result | Implemented force | Epistemic authority and scope | Operational authority | Behavioral-authority path | Evidence source ID and local anchor | Claim IDs | Mismatch marker | Gap/limit |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RT-RTE-hermes-capture, RT-RTE-hook-ingest | content transformation | implemented | EPI-OBJ-drawer-content | truth-apt transformation: acquisition/import | Host/source content enters palace | see cited records | see cited records | see cited records | Filing request | Source warrant unknown; host labels preserve attribution, not truth | May retain user and model text without per-item approval | see cited records | see cited records | RT-CLM-recall-protocol | Lossless capture not guaranteed | No corpus/host trace |
| RT-RTE-mcp-dispatch | check/evidence production | implemented | EPI-OBJ-drawer-content | no content change | Input structure, duplicate ID, post-write readability | Software validates size/type/null bytes, identity and storage IDs; not truth | see record; add handler before/after upsert | Error, existing ID, readable ID | Handler refuses malformed/unreadable writes | Only structural validity or detected storage visibility | Blocks add or reports success/error | Caller through MCP result, enforcing current request | SRC-1 mempalace/config.py, mempalace/mcp_server/tools_write.py |
none | Storage success is not acceptance | Backend atomicity remains an external contract |
| RT-RTE-mcp-dispatch | retention | implemented | EPI-OBJ-drawer-content | truth-apt transformation: non-ampliative reshaping | Validated drawer to bounded chunks | Deterministic slicing; see record for admission | see record | see record | Durable upsert | No added warrant; textual retention before acceptance | Later search/direct reads allowed | see RT-BAP-agent-context | SRC-1 mempalace/mcp_server/tools_write.py |
RT-CLM-recall-protocol | none | Sanitization can alter invalid encoding; no universal fidelity claim |
| EPI-RTE-duplicate-check | check/evidence production | implemented | EPI-OBJ-drawer-content | no content change | Similarity of candidate to up to five retrieved drawers | see record | see record | see record | Diagnostic on direct call | Similarity relative to model/metric; not equivalence or truth | Supplies checkpoint's skip predicate | see record | see record | none | Semantic sameness unestablished | Contradictory or materially changed wording can be close in embedding space |
| EPI-RTE-checkpoint-disposition | disposition/acceptance | implemented | EPI-OBJ-drawer-content | no content change | Whether item is filed | see record | see record | see record | Enforcing skip or add call | Admission/rejection only; no acceptance against truth evidence | Suppresses duplicate-marked candidates; dedup error does not veto filing | see record | see record | RT-CLM-recall-protocol | Approximate match can suppress a correction | No preserved rejected-candidate text in returned duplicate entry |
| EPI-RTE-drawer-revision | lineage/freshness/recovery | implemented | EPI-OBJ-drawer-content | truth-apt transformation: acquisition/import | Caller replacement or deletion of retained text | see record | see record | see record | Enforcing storage/cache changes | Caller-supplied revision, warrant unknown; deletion is not disproof | Replaces/removes content and purges source closets | see record | see record | none | none | No automatic evidence-based correction or guaranteed historical rollback established |
| EPI-RTE-kg-temporal | retention | implemented | EPI-OBJ-kg-triple | truth-apt transformation: acquisition/import | Supplied relation into triples | see record | see record | see record | Persistent insertion | Structural/interval validity, not external fact truth | Admits optional-provenance assertions | see record | see record | none | confidence=1.0 is not acceptance |
Underlying predicate semantics remain caller-defined |
| EPI-RTE-kg-temporal | disposition/acceptance | implemented | EPI-OBJ-kg-triple | truth-apt transformation: acquisition/import | Caller marks ended or supplies successor | see record | see record | see record | Enforcing metadata/state update | Withdrawal/replacement request, not checked criticism | Changes later temporal classification; preserves historical route | see record | see record | none | active_facts is not endorsement |
Complete supersede transaction/query boundary not inspected |
| EPI-RTE-relevance-tags | content transformation | implemented | EPI-OBJ-search-tags | truth-apt transformation: entailed derivation | Distance/timestamp to algorithm-relative tags | see record | see record | see record | Advisory annotation | Formula-relative class/rank only; premises' accuracy unchecked | Hints returned without changing hit order | see record | see record | none | Relevance/freshness is not truth | No calibration evidence |
| RT-RTE-palace-recall | operational admission/selection/consumption | implemented | EPI-OBJ-drawer-content | truth-apt transformation: non-ampliative reshaping | Retained text to selected context | see record | see record | see record | Ranking and context supply | Retained testimony; no added source warrant | May shape later answers if consumed | see RT-BAP-agent-context | see record | RT-CLM-recall-protocol | Full verbatim delivery not assured | Hydration/truncation prevents completeness inference |
| EPI-RTE-palace-audit | check/evidence production | implemented | EPI-OBJ-audit-report | truth-apt transformation: entailed derivation | Organization under fixed score formula | see record | see record | see record | Report | Formula result, not proposition truth or measured navigability | Supplies optional threshold consumer | see record | see record | none | none | Analyzer correctness and real utility not measured |
| EPI-RTE-palace-audit | operational admission/selection/consumption | implemented | EPI-OBJ-audit-report | no content change | Overall score versus requested threshold | see record | see record | see record | Exit status 2 below threshold | No claim accepted or rejected | Signals CLI failure; does not mutate palace | CLI exit, enforcing process result; external caller may gate work | see record | none | none | External CI/maintenance consumption unobserved |
| EPI-RTE-tunnel-maintenance | disposition/acceptance | implemented | none — navigation proposal | non-truth-apt policy/content update: caller-approved graph navigation changes | Proposed tunnel plan or prune request to stored graph | Caller selects --yes; code rejects stale endpoints and delegates apply/prune |
see record | see record | Enforcing graph maintenance | No truth acceptance; inferred associations remain unassessed | Adds/removes navigation links | CLI flag to graph writer, enforcing persistent navigation state | see record | none | Association strength is not warrant | Underlying algorithms and later graph use uninspected |
| EPI-RTE-retrieval-evaluation | check/evidence production | implemented | EPI-OBJ-retrieval-metrics | truth-apt transformation: entailed derivation | Ranking versus labelled session IDs | see record | see record | see record | Reporting/persistence | Label-relative retrieval success only | Produces report, no demonstrated live-memory acceptance or policy update | see record | see record | EPI-CLM-benchmark-recall | Retrieval is not QA accuracy | Dataset, execution and causal contrast missing |
The derivations above are domain-local: an audit formula or benchmark set-membership formula derives a computed property from supplied counts/labels. Neither derives a warranted proposition about the user's world. No assessed row establishes lifecycle integration after evidence-consuming acceptance. This is a bounded finding about these rows, not a searched system-wide absence.
System-claim versus route comparison
| Claim ID | Claimed operation or warrant | Claim source ID/anchor and layer | Doctrine/design support | Implemented route IDs | Observed-run support | Causal support and design limits | Supported conclusion | Mismatch/unknown |
|---|---|---|---|---|---|---|---|---|
| RT-CLM-recall-protocol | see record | see record | see record | RT-RTE-palace-recall, RT-RTE-hermes-capture, EPI-RTE-checkpoint-disposition | None supplied | Capture drop, near-duplicate rejection and selected/truncated returns are counterexamples to guaranteed complete verbatim recall | Shipped request to search/quote, supported by retained-content delivery mechanisms | Host compliance and answer truth unknown; skill policy not enforceable truth gate |
| EPI-CLM-benchmark-recall | see record | see record | see record | EPI-RTE-retrieval-evaluation | No executed/reviewed result trace here | Fixed labels define relevance, not truth; reranked/full-set figure and held-out figure have different conditions | Implements bounded retrieval metric; source reports results and explicitly separates QA accuracy | Numbers unreproduced; component attribution and live-loop transfer unsupported |
| RT-CLM-readonly-boundary | see record | see record | see record | RT-RTE-mcp-dispatch | None supplied | Name-based request gate excludes direct writes and recovery exceptions | Protocol-level operational refusal, not endorsement or universal immutable storage | See record for stronger-claim counterexamples |
Bounded conclusion
MemPalace can import caller and host testimony, retain it before any truth acceptance, and deliver selected passages to later agents. Source/session/time metadata preserves some attribution, while the evidence warrant of source propositions remains unknown. Caller-authored assistant text is retained alongside user text; storage does not upgrade either into established knowledge. See RT-RTE-hermes-capture, RT-RTE-mcp-dispatch and RT-RTE-palace-recall.
The material admission criteria differ. Drawer writes have structural, ID and visibility checks. Checkpoints additionally reject near matches at a configurable similarity threshold, with a fail-open path for dedup errors. These criteria target encoding/storage or approximate redundancy, not factual accuracy. A rejected near match can contain a correction, so suppression is consequential without constituting checked semantic equivalence. Explicit replacement/deletion supplies a separate correction capability; cleanup of closets prevents continued selection from stale source summaries, but does not verify the replacement. See EPI-RTE-duplicate-check, EPI-RTE-checkpoint-disposition and EPI-RTE-drawer-revision.
KG assertions differ from ordinary text: code validates interval structure, persists triples and allows caller-requested temporal withdrawal/successor installation. The query wrapper separates active, historical and future results. This gives temporal state operational authority at a later reader, not truth endorsement; optional provenance and default confidence do not establish acceptance. See EPI-RTE-kg-temporal.
Navigation maintenance separately retains a reviewable proposal and uses an operator flag to apply or prune graph links; stale-wing checks constrain operational admission, not the truth of inferred associations. See EPI-RTE-tunnel-maintenance.
Algorithm-relative relevance tags, organization scores and label-relative retrieval metrics are inspectable derivations in narrow formal domains. Their premises are not independently warranted here. Audit has a consequential threshold-to-exit consumer; checkpoint has a check-to-skip consumer; retrieval evaluation produces reports rather than a demonstrated change to live memory or answer policy. These distinct consumers prevent treating all evaluators as one oracle. See EPI-RTE-relevance-tags, EPI-RTE-palace-audit and EPI-RTE-retrieval-evaluation.
Setup classifications can be model/heuristic candidates admitted automatically or edited by people, as in RT-RTE-init-detection. Whether particular outputs preserve inputs, derive facts or conjecture beyond them is not determinable from the supplied route account alone. No assessed route supplies an evidence-consuming decision that accepts an ampliative proposition for a named truth use and scope, then integrates it on that basis. Unassessed extraction, maintenance and evaluator families preclude promoting that local finding into a complete-system absence.
Retained text can change later behavioral context without changing embedding weights. Delivery and policy requests are implemented; exercised reliance, improved capacity, content-directed iterative criticism and exercised self-improvement are independently unestablished in this evidence. Task launch and patch delivery add operational capability and proposal persistence, not product installation or truth warrant. The report assigns no single system-wide epistemic score.
Shared records
Operative objects
EPI-OBJ-drawer-content
Label: Drawer content
Source-native identity: drawer documents text, including physical chunks linked by parent_drawer_id. Representational form: natural language interpreted by agents/humans. Storage substrate: backend collection documents. Distinct from RT-OBJ-task-request and RT-OBJ-patch-artifact: these are conversation/project memory, not coordination events or diffs. Closest supplied route is RT-RTE-mcp-dispatch, whose effects include this object; the route itself is not an object counterpart. SRC-1 mempalace/mcp_server/tools_write.py. Load-bearing storage/chunk evidence follows in EPI-RTE-drawer-revision and the supplied dispatch record.
EPI-OBJ-kg-triple
Label: Knowledge graph triple
Source-native identity: triples relationship with interval, confidence and optional provenance fields. Representational form: symbolic fields with fixed temporal/database consumers; world-relation interpretation depends on caller-defined predicates and readers. Storage substrate: SQLite. Distinct from supplied drawer capture/search routes and coordination objects: temporal relationship rows have separate update and query consumers. SRC-1 mempalace/knowledge_graph.py.
confidence: float = 1.0, source_closet: str = None, source_file: str = None, source_drawer_id: str = None, adapter_name: str = None, ---
mempalace/knowledge_graph.py:250-269
EPI-OBJ-search-tags
Label: Search result annotations
Source-native identity: relevance_confidence, recency_rank, is_latest_record. Representational form: symbolic classifications rendered in a tool response for human/model interpretation. Storage substrate: current response dictionary, not durable acquired memory. Distinct from stored drawers; these are transient derived annotations on RT-RTE-palace-recall output. SRC-1 mempalace/mcp_light_server.py; passage in EPI-RTE-relevance-tags.
EPI-OBJ-audit-report
Label: Palace audit report
Source-native identity: audit report's per-layer/overall scores and findings. Representational form: symbolic numeric results plus natural-language diagnostics. Storage substrate: transient dictionary rendered to terminal/JSON; external retention is not established. No supplied object counterpart after comparison with runtime task/patch objects; navigability evaluation is separate. SRC-1 mempalace/palace_audit.py; formula and consumer passages in EPI-RTE-palace-audit.
EPI-OBJ-retrieval-metrics
Label: Retrieval metrics
Source-native identity: session/turn recall_any, recall_all and NDCG results. Representational form: symbolic floats keyed by rank cutoff; storage substrate: in-memory result log and optional JSONL report. No supplied object counterpart; unlike RT-OBJ-task-request, these are benchmark results, not instructions. SRC-1 benchmarks/longmemeval_bench.py; passages in EPI-RTE-retrieval-evaluation.
Routes
EPI-RTE-duplicate-check
Label: Semantic duplicate check Part of: RT-RTE-mcp-dispatch
This is the check operation within MCP dispatch, not its content-retention or disposition part. Endpoints: candidate content → vector query for five hits → metric-specific distance conversion → threshold matches and boolean. Owner: read handler and backend embedder; context/state: current candidate and indexed drawers. Effects: produces a redundancy diagnostic, consumed separately by checkpoint. SRC-1 mempalace/mcp_server/tools_read.py.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return:
is_duplicateand matches, or vector-disabled/error diagnostic. - Later read-back: inapplicable — the diagnostic is not persisted as knowledge by this handler; the check reads retained drawers.
- Delegated visibility: inapplicable — this operation launches no worker; external embedding-provider behavior is uninspected.
- Selection predicate: nearest five queried hits whose rounded metric-derived similarity meets caller threshold, default 0.9.
- Invalidation or expiry: current-call result; changes to corpus/model/threshold can change later checks.
- Activation or effect: diagnostic production wired; checkpoint skip consumer inspected separately, actual execution unobserved.
- Evidence limits: top-five and embedding closeness do not establish exhaustive duplicates or semantic equivalence; provider/backend versions differ.
Code proposes the match classification; caller supplies candidate/threshold; software decides it, with no human veto inside the check. Open request mode, no reference-answer oracle. Fixed similarity rules guide the result. On unusable vectors the handler exposes a limitation instead of asserting a trustworthy negative.
similarity = round(_distance_to_similarity(dist, metric), 3) if similarity >= threshold: ---
mempalace/mcp_server/tools_read.pyreturn { "is_duplicate": len(duplicates) > 0, "matches": duplicates, } ---
mempalace/mcp_server/tools_read.py
EPI-RTE-checkpoint-disposition
Label: Checkpoint duplicate disposition Part of: RT-RTE-mcp-dispatch
Endpoints: checkpoint item → duplicate diagnostic → skip or tool_add_drawer → aggregate result; optional diary follows. Owner: checkpoint software; context/state: submitted items and shared palace. This differs from EPI-RTE-duplicate-check, which supplies evidence but does not itself reject filing. SRC-1 mempalace/mcp_server/tools_diary.py.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: lists of added, duplicates, errors and optional diary result.
- Later read-back: successfully added items can reach drawer search; skipped item content is not filed by this route.
- Delegated visibility: inapplicable — batch saving launches no isolated agent.
- Selection predicate: valid item fields; positive
is_duplicateskips; otherwise invokes drawer add, including on dedup error. - Invalidation or expiry: checkpoint result is transient; resulting drawers persist until other maintenance.
- Activation or effect: enforcing skip/add branch wired, no supplied checkpoint execution.
- Evidence limits: skip establishes storage rejection only, not falsity or equivalence; each item can fail separately, not one all-or-none batch.
Client proposes content, software decides storage admission, human contribution is unresolved from client identity. No per-item confirmation or answer oracle. Open save mode; configurable threshold and verbatim-retention priority shape disposition. Rejected near matches are not a rollback mechanism; client can choose another write path. No truth acceptance or criticism-based successor selection is established.
dup = tool_check_duplicate(content, threshold=dedup_threshold) if dup.get("is_duplicate"): out["duplicates"].append({"room": room, "matches": dup.get("matches", [])}) continue ---
mempalace/mcp_server/tools_diary.pyOn a dedup error (genuine index failure — content is guaranteed a
string by the guard above) we still file rather than drop the
memory: verbatim recall is the priority and add_drawer's own
idempotency blocks exact duplicates.
res = tool_add_drawer(wing=wing, room=room, content=content, added_by=resolved_added_by) ---
mempalace/mcp_server/tools_diary.py
EPI-RTE-drawer-revision
Label: Drawer replacement and withdrawal Part of: RT-RTE-mcp-dispatch
Endpoints: explicit update/delete request → logical drawer resolution/validation → backend update/upsert/delete → cache invalidation and source-closet purge → result. Owner: write handler; state: old document/chunks/metadata and caller replacement. These are maintenance parts of supplied dispatch, not automatic truth criticism. SRC-1 mempalace/mcp_server/tools_write.py, mempalace/config.py.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: success with drawer/chunk/closet information, not-found/validation error, or backend failure.
- Later read-back: revised content/metadata can reach search/direct reads; removed rows no longer supply those reads if backend mutation succeeds.
- Delegated visibility: inapplicable — maintenance launches no worker.
- Selection predicate: caller-specified drawer ID; logical handle resolves group while a physical chunk delete selects one row; new content/names validated.
- Invalidation or expiry: update sets
last_modified; stale chunks removed after replacement upsert; content changes/deletes purge source closets and invalidate overview caches. - Activation or effect: storage and later-selection changes wired; no observed mutation or answer dependence.
- Evidence limits: backend failure/atomicity not independently checked; WAL intent/result is not a demonstrated undo history or evidence-consuming correctness decision.
Caller proposes replacement/removal, software can veto malformed input/not-found/backend errors. Human authorship/approval is not guaranteed by an MCP client. Open maintenance request, no answer oracle. Fixed validation/chunking/cleanup guidance governs it; explicit later writes can replace content, but automatic truth rollback is not established.
Concrete deterministic trace, deduced without execution: with configured chunk_size=4, input Alice left. passes the shown nonempty/length/null checks and contains no lone surrogate. Add slices it into Alic, e le, ft. with ordered chunk linkage. Concatenating in that order preserves the input proposition; none of the three chunks individually is guaranteed to state it. This supports non-ampliative reshaping, not a new fact. Invalid Unicode sanitization remains a separate fidelity limit.
if not isinstance(value, str) or not value.strip(): raise ValueError("content must be a non-empty string") if len(value) > max_length: raise ValueError(f"content exceeds maximum length of {max_length} characters") if "\x00" in value: raise ValueError("content contains null bytes") return strip_lone_surrogates(value) ---
mempalace/config.pyfor i in range(0, len(content), chunk_size): chunk_idx = i // chunk_size chunk_ids.append(f"{drawer_id}chunk{chunk_idx:06d}") chunk_docs.append(content[i : i + chunk_size]) ---
mempalace/mcp_server/tools_write.pyif content is not None and source_file: closets_deleted = _purge_source_closets(source_file, commit=True) ---
mempalace/mcp_server/tools_write.pycol.delete(ids=record["ids"]) _invalidate_overview_caches()
source_file = record["metadata"].get("source_file") closets_deleted = _purge_source_closets(source_file, commit=True) if source_file else 0 ---
mempalace/mcp_server/tools_write.py
EPI-RTE-kg-temporal
Label: Knowledge graph temporal maintenance Part of: RT-RTE-mcp-dispatch
Endpoints: caller relation/interval → input and temporal validation → SQLite triple insert or interval end/successor request → later KG query wrapper's active/historical/future grouping. Owner: KG handler and graph code; state: entities, triples and optional provenance. Material part distinct from drawer replacement: stored intervals change temporal query eligibility without deleting historical relationships. SRC-1 mempalace/mcp_server/tools_kg.py, mempalace/knowledge_graph.py.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: triple ID/fact, resolved ended value, superseded value or input/domain error.
- Later read-back: KG query returns stored relationships and temporal categories; timeline is an exposed alternate not traced here.
- Delegated visibility: inapplicable — graph maintenance launches no separate agent.
- Selection predicate: supplied subject/predicate/object; invalidate targets open matching rows; interval checks reject ends preceding starts; supersede supplies old/new object and boundary.
- Invalidation or expiry: invalidate stores end time; supersede requests shared boundary, default current UTC; add does not automatically resolve conflicting alternative objects.
- Activation or effect: add/invalidate database writes and wrapper temporal categorization inspected; supersede handler and boundary preparation wired, complete atomic transaction/as-of guarantee uninspected.
- Evidence limits: callers decide external truth; provenance optional; complete supersede transaction and query SQL not read; no live KG trace.
Caller proposes assertion, ending or successor; software checks structural/interval validity, not evidence for the relationship. No human review required by handlers, no answer oracle; open requests. Fixed temporal schema guides the change. Historical categories preserve some withdrawn state; this is not an established truth-directed criticism loop or automatic rollback. An inverted interval is rejected because it would hide the row from queries, not because its world proposition has been falsified.
if ( valid_from is not None and valid_to is not None and _temporal_end_key(valid_to) < _temporal_start_key(valid_from) ): raise ValueError( f"valid_to={valid_to!r} is before valid_from={valid_from!r}; " "an inverted interval would be invisible to every KG query" ) ---
mempalace/knowledge_graph.pyconn.execute( "UPDATE triples SET valid_to=? " "WHERE subject=? AND predicate=? AND object=? AND valid_to IS NULL", (ended, sub_id, pred, obj_id), ) ---
mempalace/knowledge_graph.py"active_facts": active, "historical_facts": historical, "future_facts": future, "facts": results, ---
mempalace/mcp_server/tools_kg.py
EPI-RTE-relevance-tags
Label: Light search relevance annotations Part of: RT-RTE-palace-recall
Endpoints: search result → minimum available distance and timestamp order → relevance/recency annotations → light response. Owner: deterministic light wrapper; current response state changes, hit ordering retained. SRC-1 mempalace/mcp_light_server.py.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: enriched response or no-matches status; original search ranking remains.
- Later read-back: inapplicable — wrapper does not persist annotations; response carries previously retained hit text.
- Delegated visibility: inapplicable — no agent is launched by enrichment.
- Selection predicate: existing results; minimum nonmissing distance; descending available filing/creation timestamp for recency.
- Invalidation or expiry: invocation-local; later query or timestamps can yield other annotations.
- Activation or effect: annotations wired into returned envelope; downstream use and improved decisions unobserved.
- Evidence limits: fixed thresholds not calibrated truth or retrieval-success probability; missing/incorrect timestamps defeat stronger freshness conclusions.
Concrete deduction: if the only available distance is 0.34, minimum distance is below 0.35 and the output class is high; 0.60 gives low. This derives a formula-relative tag, not an entailed world proposition. Software computes it; no candidate acceptance or answer oracle occurs. Annotation channel is advisory to response consumers for the current invocation.
distances = [d for d in (_search_distance(item) for item in results_list) if d is not None] if distances: min_dist = min(distances) if min_dist > 0.52: res["relevance_confidence"] = "low" elif min_dist < 0.35: res["relevance_confidence"] = "high" else: res["relevance_confidence"] = "moderate" ---
mempalace/mcp_light_server.py
EPI-RTE-palace-audit
Label: Palace navigability audit
No counterpart in the supplied runtime after comparison: unlike dispatch gates and setup detection, this route evaluates stored organization and can change CLI exit status. Endpoints: palace counts/organization analysis → score formula/report → JSON/terminal output → optional fail_under comparator. Owner: audit code and CLI; context/state: current organization snapshot. SRC-1 mempalace/palace_audit.py, mempalace/cli/cmd_audit.py.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: report printed, or exit 2 when nonmissing overall score falls below supplied threshold.
- Later read-back: inapplicable — inspected CLI does not retain report; an external caller may store JSON but that path is uninspected.
- Delegated visibility: inapplicable — audit launches no agent.
- Selection predicate: selected palace; layer availability determines which scores enter mean; threshold only applies when supplied and overall is not None.
- Invalidation or expiry: current snapshot report, no palace mutation by this command.
- Activation or effect: threshold changes process outcome; automated maintenance or downstream gating is unobserved.
- Evidence limits: analyzer internals only selectively inspected; scores encode navigational heuristics, not observed usability or factual truth.
Software evaluates generic-room share, name drift and relationship artifacts/coverage; caller selects failure threshold and can veto subsequent work externally. No expected-answer oracle. Open audit mode; fixed formula is the governing guidance, not a learned revision theory. The CLI returns a signal, not a factual-content rejection or automatic repair.
scores["rooms"] = _clamp(100 * (1 - rooms["generic_share"])) if rooms["total_drawers"] else None ---
mempalace/palace_audit.pypresent = [s for s in scores.values() if s is not None] scores["overall"] = _clamp(sum(present) / len(present)) if present else None return scores ---
mempalace/palace_audit.pythreshold = getattr(args, "fail_under", None) overall = report["scores"]["overall"] if threshold is not None and overall is not None and overall < threshold: sys.exit(2) ---
mempalace/cli/cmd_audit.py
EPI-RTE-tunnel-maintenance
Label: Tunnel proposal admission and cleanup
No supplied counterpart after comparison: this is navigation-graph maintenance rather than task patch delivery or drawer capture. Endpoints: current wings/hallways → proposal or prune report → optional user-edited plan → --yes apply/prune branch → saved tunnels. Owner: CLI orchestration and imported tunnel functions; context/state: persistent proposal plan and navigation graph. Only the orchestration was directly inspected. SRC-1 mempalace/cli/cmd_tunnels.py.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: dry-run/proposal report, created/removed count, or stale/invalid-plan error.
- Later read-back: proposal file is reloaded by a later apply invocation; saved tunnels belong to graph navigation, whose downstream internals remain uninspected here.
- Delegated visibility: inapplicable — this CLI route launches no agent.
- Selection predicate: action propose/prune;
--yesselects graph modification; apply drops plan rows whose normalized wings no longer exist and refuses if none remain. - Invalidation or expiry: proposal can be manually edited; stale endpoints filtered on application; prune can remove reported artifacts under the graph writer lock.
- Activation or effect: application and cleanup calls wired; graph-write algorithms, actual changes and later traversal effects unobserved.
- Evidence limits: underlying strength, artifact and application algorithms not inspected; no warrant about real-world associations or measured navigation improvement.
Code proposes a plan; operator can delete unwanted rows and chooses apply. This is human-editable operational admission, not evidence-consuming acceptance of the association's truth. --yes on prune executes the delegated cleanup without a separate dialogue. Open maintenance mode, no answer oracle. Fixed proposal/endpoint rules guide it. No demonstrated rollback or automatic policy-improvement loop follows. Semantic relation of underlying inferred associations is not determinable; the inspected boundary establishes only persistent navigation-state update.
print(f"\n Plan saved to {path}. Delete rows you do not want, then re-run with --yes.") ---
mempalace/cli/cmd_tunnels.pyif not fresh: print(f" Every proposed tunnel names a wing that no longer exists ({stale} rows).") print(" Re-run
mempalace tunnels proposeagainst the current wings.") sys.exit(1) created = apply_proposal({**plan, "tunnels": fresh}, config=config) ---mempalace/cli/cmd_tunnels.pywith mine_lock(_get_tunnel_file(config)): kept, report = prune_tunnels(_load_tunnels(config), wings) if report["removed"]: _save_tunnels(kept, config) ---
mempalace/cli/cmd_tunnels.py
EPI-RTE-retrieval-evaluation
Label: Labelled retrieval evaluation
No counterpart in supplied runtime records: evaluator existence was mentioned, but no evaluator route was declared. Endpoints: benchmark ranking and labelled answer session IDs → session/turn membership metrics → aggregate/per-type reporting and optional JSONL result log. Owner: benchmark harness; context/state: benchmark corpus/rankings/reference IDs. SRC-1 benchmarks/longmemeval_bench.py.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: rank-cutoff metrics and printed summary; optional result file.
- Later read-back: optional persisted report is available to later file readers; no inspected automatic live-policy consumer or demonstrated later reliance.
- Delegated visibility: inapplicable — inspected metric calculation delegates no agent; other retrieval/reranking modes have uninspected provider behavior.
- Selection predicate: top-k ranking IDs versus reference IDs; session-level corpus IDs collapse to session identities; turn reference set includes all corpus IDs from answer sessions.
- Invalidation or expiry: results belong to dataset/mode/configuration; no automatic expiration or product rollback in the inspected save path.
- Activation or effect: report production/persistence wired; route not executed, no observed product change.
- Evidence limits: expected-session membership is not end-to-end answer correctness; turn labels inherit session attribution, not independently annotated minimal evidence; dataset and retained result files not inspected.
Harness supplies the ranking; dataset supplies the reference-outcome oracle (answer_sids); code computes metrics. This is bounded benchmark evaluation, not open live-answer acceptance. Human reference construction is uninspected. Report saving does not itself select a production successor, reject memories or establish an evidence-responsive improvement loop. Concrete deduction: rankings [0], corpus IDs [s1], correct IDs {s1}, k=1 gives both recalls 1; replacing correct IDs with {s2} gives both 0. The checked domain is labelled retrieval membership only.
top_k_ids = set(corpus_ids[idx] for idx in rankings[:k]) recall_any = float(any(cid in top_k_ids for cid in correct_ids)) recall_all = float(all(cid in top_k_ids for cid in correct_ids)) ndcg_score = ndcg(rankings, correct_ids, corpus_ids, k) return recall_any, recall_all, ndcg_score ---
benchmarks/longmemeval_bench.pysession_level_ids = [session_id_from_corpus_id(cid) for cid in corpus_ids] session_correct = answer_sids ---
benchmarks/longmemeval_bench.pyif out_file: with open(out_file, "w") as f: for entry in results_log: f.write(json.dumps(entry) + "\n") print(f" Results saved to: {out_file}") ---
benchmarks/longmemeval_bench.py
Claims
EPI-CLM-benchmark-recall
Label: Reported benchmark recall
Claimed operation: README reports raw LongMemEval R@5 96.6%, hybrid held-out 98.4%, and rerank full-set ≥99%, while warning against equating retrieval recall with QA accuracy and against test-specific tuning. Source: SRC-1 README.md, doctrine/design and attributed reported results, not an inspected run trace. Distinct from RT-CLM-recall-protocol: numeric evaluator claims are not the agent's recall policy. The registered source layer and this inspection support attribution and evaluator implementation, not independent result authentication. EPI-RTE-retrieval-evaluation supplies the bounded metric interpretation.
- doctrine conclusion status: claimed
- operation conclusion status: uninspected
| Raw (semantic search, no heuristics, no LLM) | 96.6% | None | | Hybrid v4, held-out 450q (tuned on 50 dev, not seen during training) | 98.4% | None | | Hybrid v4 + LLM rerank (full 500) | ≥99% | Any capable model | ---
README.mdmetrics on different splits, and placing retrieval recall next to end-to-end QA accuracy is not an honest comparison. See each project's own research page for their published numbers. ---
README.md