Engraph epistemic report
Type: agentic-system-analyses/types/agentic-system-epistemic-report.md
Source-and-claim boundary
Question: what does Engraph acquire, transform, check and license for later reliance when a vault becomes agent context? The whole-system scope and exclusions are those of boundary; source identities and evidence layers are in its Source register. Engraph is the vault service, not the external conversational agent. All source findings below use SRC-1, implementation unless identified as doctrine/design. No target, tests, models or examples were executed.
The public claims assessed are EPI-CLM-vault-knowledge, EPI-CLM-search-confidence, EPI-CLM-health-diagnostics, and EPI-CLM-placement-learning. The service's current-state presentation also matters: see EPI-RTE-identity-extract. These are not all claims that Engraph makes, nor a claim that it promises universally true answers.
Coverage distinguishes supplied runtime evidence from direct reads in this job. The runtime is a provisional baseline, not an inspection ceiling.
| Entry point / operation | SRC-1 path | Coverage and records | Limit / conclusion prevented |
|---|---|---|---|
| CLI index, search, serve, setup, identity, configure, graph, context, write, migrate, models, clear | src/main.rs |
Direct dispatch/declaration searches and bounded reads of command enums, clear and context variants; supplied RT-RTE-query-search, RT-RTE-setup-apply, RT-RTE-para-migration | Not every CLI formatting/configuration branch reread; no system-complete absence conclusion. |
| MCP tool registration, read/context/who/project, health, identity, mutation and maintenance | src/serve.rs |
Direct registered-function search, health and identity handlers; supplied RT-RTE-note-admission, RT-RTE-index-refresh, RT-RTE-http-access; added EPI-RTE-health-report | Handler wiring is not agent obedience or per-content human review. |
| HTTP discovery, search/context/health, identity, setup and mutators | src/http.rs |
Direct endpoint/function search; supplied runtime adapter inspection; RT-RTE-http-access | No deployed grants, tunnel, client or endpoint runs. |
| Generated/cached/heuristic search orchestration, fusion and ranking | src/search.rs, src/llm.rs, src/fusion.rs, src/store.rs |
Direct orchestration/parser/fallback, search consumers, fusion and cache-related searches; EPI-RTE-orchestration-parse, EPI-RTE-confidence-normalize | Actual weights and model behavior unavailable; no relevance calibration or semantic preservation established. |
| Reads, section reads, list/map, person/project/topic bundles | src/context.rs |
Direct person/project assembly and helper reads; supplied RT-RTE-topic-context | Full read/section resolution and all graph internals not reread; completeness and real-world membership unestablished. |
| Note admission, metadata, links, placement, edits, move/archive/delete, cleanup | src/writer.rs, src/links.rs, src/placement.rs |
Direct delete/archive/integrity cleanup, initial link index/protected-region code and placement rules/correction code; supplied RT-RTE-note-admission; added EPI-RTE-content-withdrawal | Later auto-link application internals and all tag-resolution internals not inspected here; no blanket semantic-preservation finding. |
| Synchronization hooks, index replacement, centroid updates, identity refresh | src/watcher.rs, src/indexer.rs, src/store.rs |
Direct startup/events/move-correction/identity-refresh/centroid and identity-store reads; RT-RTE-index-refresh, EPI-RTE-placement-correction, EPI-RTE-identity-extract | Event delivery, crash recovery and live freshness unobserved; ordinary changed-file indexing is not proof of L1 identity re-extraction. |
| Structural health evaluators | src/health.rs |
Direct complete non-test implementation; EPI-RTE-health-report | Stale-note evaluator is a stub; no semantic truth check follows from structural health. |
| Setup prompts and external-agent guidance | README.md, skills/engraph/SKILL.md |
Direct selected public claims and ChatGPT instructions; supplied RT-BAP-agent-skill | Actual loading, adherence and downstream answer quality unobserved. |
| Product tests and release plane | .github/workflows/ci.yml, .github/workflows/release.yml, tests/ |
Supplied RT-RTE-product-release and boundary coverage | No run results, interventions or independent component comparisons. Tests define checks rather than successful checking episodes. |
| Supporting profiles, tags, graph, temporal rules, tokenizer/chunker, optional Obsidian implementation | src/profile.rs, src/tags.rs, src/graph.rs, src/temporal.rs, src/chunker.rs, src/obsidian.rs |
Supplied runtime findings where cited; supporting internals remain partly uninspected | Their possible additional material checks prevent a system-complete negative about all evaluation or criticism. |
Missing evidence has local consequences. Unknown user-vault provenance prevents endorsing imported premises. Uninspected model bytes/provider internals prevent claims about internal model knowledge, parameter learning or reliable judgment. No execution traces establish activation, successful retention/recovery, client use or benefit. No experiments identify retrieval improvements, placement improvements or component effects. Available but uninspected support modules are not source-access gaps.
Epistemic-object inventory
| Object ID | Candidate truth-apt content or none | Claimed role | Evidence source ID and local anchor | Gap/limit |
|---|---|---|---|---|
| EPI-OBJ-vault-content | see record | see record | SRC-1 src/writer.rs |
Caller authority and premise truth unknown. |
| EPI-OBJ-identity-facts | see record | see record | SRC-1 src/identity.rs |
Extraction labels can exceed premises; some source paths discarded. |
| EPI-OBJ-health-report | see record | see record | SRC-1 src/health.rs |
Structural propositions only; stale empty list is not a check result. |
| RT-OBJ-llm-cache | Intent/date fields can assert properties of a query; expansion strings are retrieval instructions, not necessarily propositions | see record | SRC-1 src/store.rs |
Semantic preservation and warrant unknown. |
| RT-OBJ-search-config | None required: current-call retrieval policy | see record | SRC-1 src/search.rs |
Policy effect is separate from epistemic endorsement. |
| RT-CMP-llama-embed | Not determinable for inaccessible weight content; vectors are numerical selectors, not independently warranted claims | see record | SRC-1 src/llm.rs |
Actual distributed-parametric provenance unknown. |
| RT-CMP-llama-orchestrator | Generated intent/date interpretation; truth-apt content in weights not determinable | see record | SRC-1 src/llm.rs |
Syntax check does not test interpretation. |
| RT-CMP-llama-rerank | Query–snippet relevance judgment, not snippet truth; weight content not determinable | see record | SRC-1 src/llm.rs |
No reference-answer or calibration evidence. |
Folder centroids, proposed placements and correction metadata have their own operational consumer, assessed in EPI-RTE-placement-correction. This does not treat every number, path or transport object as a truth claim.
Authority-route ledger
The ledger is a sparse overlay. Fields owned by declaring records say see; each row's architectural status, content relation and epistemic assessment are local findings. No observed route operation is inferred from implemented. A result consumed for retrieval is operational reliance, not necessarily acceptance of a claim for knowledge use.
| 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 or none | Mismatch marker or none | Gap/limit |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RT-RTE-note-admission | content transformation | implemented | EPI-OBJ-vault-content | truth-apt transformation: acquisition/import | see route | see route | see route | see route | see route | External text acquired, source warrant unknown; adapter label not author proof | see route | see route | SRC-1 src/writer.rs |
EPI-CLM-vault-knowledge | none | Writer's additional linking/tag/placement changes are not automatically faithful import. |
| RT-RTE-note-admission | disposition/acceptance | implemented | EPI-OBJ-vault-content | no content change | see route | see route | see route | see route | see route | Operational write admission; not evidence-consuming acceptance of note truth | see route | see route | SRC-1 src/writer.rs |
none | none | I/O, permission, collision and mtime criteria concern mutation, not claim warrant. |
| RT-RTE-note-admission | retention | implemented | EPI-OBJ-vault-content | no content change | see route | see route | see route | see route | see route | Retention before epistemic acceptance; no lifecycle integration inferred | see route | see route | SRC-1 src/writer.rs |
EPI-CLM-vault-knowledge | none | DB/disk disagreement and alternate write-path limits remain as in runtime. |
| RT-RTE-index-refresh | content transformation | implemented | EPI-OBJ-vault-content | truth-apt transformation: non-ampliative reshaping | see route | see route | see route | see route | see route | Chunk/index representation enables locating text, not endorsing it | see route | see route | SRC-1 src/indexer.rs |
EPI-CLM-vault-knowledge | none | Applies to text chunking/indexing; inferred mention/graph associations need separate interpretation. |
| EPI-RTE-orchestration-parse | check/evidence production | implemented | RT-OBJ-llm-cache | no content change | see route | see route | see route | see route | see route | License only for accepted parser shape, not faithful query meaning | see route | see route | SRC-1 src/llm.rs |
none | none | Empty/missing expansions rejected; string content can still be irrelevant. |
| EPI-RTE-orchestration-parse | disposition/acceptance | implemented | RT-OBJ-llm-cache | no content change | see route | see route | see route | see route | see route | Operational admission or heuristic substitution; not semantic acceptance | see route | see route | SRC-1 src/search.rs |
none | none | Cache deserialization takes a different path from generated-text parser. |
| RT-RTE-query-search | content transformation | implemented | RT-OBJ-llm-cache | truth-apt transformation: indeterminate | see route | see route | see route | see route | see route | Generated interpretation/expansion is not established as entailed or as reliably preserving scope | see route | see route | SRC-1 src/llm.rs |
EPI-CLM-vault-knowledge | none | No output instances; prompt intent alone does not demonstrate conjecture or faithful reshaping. |
| RT-RTE-query-search | check/evidence production | implemented | RT-CMP-llama-rerank | no content change | see route | see route | see route | see route | see route | Scores judge relevance of query–snippet pairs, not factual truth of notes | see route | see route | SRC-1 src/search.rs |
EPI-CLM-search-confidence | none | Limited candidate set and snippet, no answer oracle or observed reliability. |
| EPI-RTE-confidence-normalize | content transformation | implemented | RT-OBJ-search-config | truth-apt transformation: entailed derivation | see route | see route | see route | see route | see route | Exact relative-score arithmetic within supplied lane rankings; not truth probability | see route | see route | SRC-1 src/fusion.rs |
EPI-CLM-search-confidence | none | Arithmetic inputs need not be warranted measurements of relevance. |
| RT-RTE-query-search | operational admission/selection/consumption | implemented | EPI-OBJ-vault-content | no content change | see route | see route | see route | see route | see route | Rank permits delivery only; high rank grants no factual endorsement | see route | see route | SRC-1 src/search.rs |
EPI-CLM-vault-knowledge | none | Client's further reliance remains external and unobserved. |
| RT-RTE-topic-context | content transformation | implemented | EPI-OBJ-vault-content | truth-apt transformation: non-ampliative reshaping | see route | see route | see route | see route | see route | Selected/truncated disk text delivered; omitted qualifications can degrade warrant | see route | see route | SRC-1 src/context.rs |
EPI-CLM-vault-knowledge | none | Selection from index and body from disk may have different freshness. |
| EPI-RTE-identity-extract | content transformation | implemented | EPI-OBJ-identity-facts | truth-apt transformation: ampliative conjecture | see route | see route | see route | see route | see route | OOO association and activity/importance labels exceed guaranteed premises | see route | see route | SRC-1 src/identity.rs |
EPI-CLM-vault-knowledge | scope promotion | Deterministic counterexample in record; current-focus/blocked copying is separately context-lossy, not all extraction ampliative. |
| EPI-RTE-identity-extract | retention | implemented | EPI-OBJ-identity-facts | no content change | see route | see route | see route | see route | see route | Heuristic candidates retained as facts before a truth check | see route | see route | SRC-1 src/store.rs |
none | none | Clearing old L1 rows is regeneration, not content-directed criticism. |
| EPI-RTE-identity-extract | operational admission/selection/consumption | implemented | EPI-OBJ-identity-facts | no content change | see route | see route | see route | see route | see route | Current-state presentation licenses no stronger conclusion than extraction supports | see route | see route | SRC-1 src/identity.rs |
EPI-CLM-vault-knowledge | scope promotion | Output drops source fields; client adherence and factual validity unobserved. |
| EPI-RTE-health-report | check/evidence production | implemented | EPI-OBJ-health-report | truth-apt transformation: entailed derivation | see route | see route | see route | see route | see route | Bounded structural findings from indexed data/rules, not external-world truth | see route | see route | SRC-1 src/health.rs |
EPI-CLM-health-diagnostics | stale stub | Broken-link/orphan findings are relative to index scope; stale empty list has no derivation from age evidence. |
| EPI-RTE-health-report | operational admission/selection/consumption | implemented | EPI-OBJ-health-report | no content change | see route | see route | see route | see route | see route | Advisory report; no implemented semantic acceptance/rejection follows | see route | see route | SRC-1 src/serve.rs |
EPI-CLM-health-diagnostics | stale stub | No inspected automatic repair consumer; external action unknown. |
| EPI-RTE-placement-correction | behavior/policy adaptation | implemented | see route | non-truth-apt policy/content update: folder centroids and placement metadata | see route | see route | see route | see route | see route | Moved destination treated as feedback, not a warranted proposition about optimal organization | see route | see route | SRC-1 src/watcher.rs |
EPI-CLM-placement-learning | attribution limit | Durable selector adaptation exists; improved future capacity and human intent not demonstrated. |
| EPI-RTE-content-withdrawal | disposition/acceptance | implemented | EPI-OBJ-vault-content | no content change | see route | see route | see route | see route | see route | Operational withdrawal on caller request or missing path, not falsification of note claims | see route | see route | SRC-1 src/writer.rs |
none | none | Archive/delete/recovery vary; withdrawal is not universally permanent invisibility. |
| RT-RTE-para-migration | operational admission/selection/consumption | implemented | see route | non-truth-apt policy/content update: proposed and applied file locations | see route | see route | see route | see route | see route | Confidence licenses moves, not proof of category truth or human review | see route | see route | SRC-1 src/migrate.rs |
none | none | Preview application and best-effort undo remain distinct from epistemic acceptance. |
| RT-RTE-setup-apply | retention | implemented | see route | truth-apt transformation: acquisition/import | see route | see route | see route | see route | see route | Supplied identity acquired with unknown warrant; detected profile drives operation | see route | see route | SRC-1 src/onboarding.rs |
none | none | Writes can precede errors; generic caller is not authenticated human approval. |
| RT-RTE-product-release | check/evidence production | implemented | see route | no content change | see route | see route | see route | see route | see route | Declared format/lint/tests assess product under fixed checks, not vault truth | see route | see route | SRC-1 .github/workflows/ci.yml |
none | none | No outcomes, enforced CI gate or improvement experiment supplied. |
No lifecycle integration after an evidence-consuming acceptance decision is established by these inspected routes. This is a bounded finding, not an assertion that an external client cannot review and accept a note. Person/project bundling is also operational: see EPI-OBJ-vault-content; filename/folder/edge selection does not prove person identity, project membership, team membership or present task activity.
System-claim versus route comparison
| Claim ID | Claimed operation or warrant | Claim source ID/anchor and evidence layer | Doctrine/design support | Implemented route IDs | Observed-run support | Causal support and design limits | Supported conclusion | Mismatch/unknown |
|---|---|---|---|---|---|---|---|---|
| EPI-CLM-vault-knowledge | see record | SRC-1 README.md, doctrine/design |
see record | RT-RTE-note-admission, RT-RTE-index-refresh, RT-RTE-query-search, RT-RTE-topic-context, EPI-RTE-identity-extract | None supplied | No answer-quality comparison; index relations and extracted state have bounded meanings | Queryable retained vault context is wired | Calling it knowledge is not evidence that content was checked/accepted as true. No universal truth promise attributed. |
| EPI-CLM-search-confidence | see record | SRC-1 README.md, doctrine/design |
see record | EPI-RTE-confidence-normalize, RT-RTE-query-search | None supplied | No calibration or relevance/answer improvement measurement | A normalized ranking percentage exists and can guide selection | Higher relative fusion score, not probability of truth or calibrated certainty. |
| EPI-CLM-health-diagnostics | see record | SRC-1 README.md, doctrine/design |
see record | EPI-RTE-health-report | None supplied | Indexed structure and hard-coded tag rule; no stale-age check | Orphan/broken-link/tag/inbox/index-age report wired to MCP/HTTP | Stale content detection unsupported by stub; advertised CLI context health absent from inspected ContextAction variants. |
| EPI-CLM-placement-learning | see record | SRC-1 README.md, doctrine/design |
see record | EPI-RTE-placement-correction | None supplied | No correct-placement oracle, before/after outcomes or independently varied components | Move-derived centroid adaptation can alter later placement | Improved capacity not established; only listed adapter labels qualify, not all writes/users/moves. |
Runtime's separate RT-CLM-server-readonly and RT-CLM-write-consistency already bound mutation and persistence authority. This member does not redefine those claims: read-only is not a semantic acceptance criterion; reconciliation is not confirmation of the truth or authorship of recovered content.
Bounded conclusion
Engraph acquires caller- and filesystem-supplied Markdown, retains it, reshapes it into searchable text/numerical/graph structures, selects it and returns it to clients. Source truth is unknown. Paths and IDs preserve locatability, but snippet/budget selection can discard qualifications, and retained adapter labels do not authenticate origins. These conclusions concern RT-RTE-note-admission, RT-RTE-index-refresh, RT-RTE-query-search, and RT-RTE-topic-context, not successful downstream answering.
There are real bounded evaluators. The orchestration parser checks usable output shape and triggers heuristic replacement; the reranker evaluates query–snippet relevance; structural health evaluates index-relative links, isolation and tag conventions; fusion derives a relative percentage by explicit arithmetic. Their targets differ, and none licenses note truth. The health stale-list stub and normalized top-result confidence are concrete counterexamples to stronger readings of diagnostics or certainty. See EPI-RTE-orchestration-parse, EPI-RTE-health-report, and EPI-RTE-confidence-normalize.
Identity extraction is not merely retrieval. It promotes tags, edge prominence and keyword co-occurrence into active-project, key-person and OOO labels, then stores and formats them as current state. A source-level counterexample establishes a non-entailed OOO association. Other bullet extractions copy text while dropping checkbox/context/source distinctions. Retention and current-state delivery occur without a found evidence-consuming truth acceptance step in that inspected route; no warranted accepted ampliative claim is established. See EPI-RTE-identity-extract.
Caller write/apply/delete permissions and filesystem freshness/collision predicates license operations for defined paths; they do not license factual belief. Health delivery is advisory, retrieval scores rank, identity text advises the external agent, and writer/indexer mutations enforce changes to durable data. Archive/delete and missing-path cleanup withdraw operational access but do not refute claims. There is no evidence that these routes integrate claims after epistemic acceptance. See EPI-RTE-content-withdrawal and the runtime admission records.
Placement correction supplies a separate automatic behavior-adaptation route: detected moved-note feedback adjusts durable centroids consumed by later semantic placement. Fixed inference parameters therefore do not imply absence of all use-derived adaptation. However, improvement of future action is unestablished without outcome/comparison evidence, and event-derived feedback is not necessarily human approval. The inspected route does not formulate content-directed criticism with blame and retain it for theory revision. External user theories may reside in notes, but their existence and delivery do not establish an internal theory-building loop. Model internals remain opaque rather than proven to lack such processing. Learning benefit, reflection, autonomous theory building and successful self-improvement receive no bundled verdict. See EPI-RTE-placement-correction and the independently bounded model component records.
Shared records
Components
none declared in this member
Operative objects
EPI-OBJ-vault-content
Label: Vault content
Caller text and filesystem Markdown are natural-language material on disk. Tags, frontmatter, paths, IDs, chunk headings and graph relationships have symbolic consumers; embeddings have distributed-parametric numerical consumers. Candidate truth-apt content is whatever assertions the notes contain over their own subject scopes, not every path/tag. Claimed role: retained searchable agent context. SRC-1 src/writer.rs, src/indexer.rs, src/context.rs; acquisition/admission/retention are supplied by RT-RTE-note-admission and RT-RTE-index-refresh. No supplied operative-object record names the vault itself; RT-OBJ-llm-cache is distinct query-policy JSON, not note content.
Later search returns snippets with references; topic context rereads selected disk bodies. Person context assembles mention/wikilink relations; project context includes same-folder and incoming-link notes, open-checkbox tasks and people-path links. These are source-native associations, not evidence that every child belongs to a project or every people link identifies a team member. SRC-1 src/context.rs:
// Files in same folder if let Some(folder) = &project_folder { let folder_files = params.store.list_files(Some(folder), &[], None, 50)?; ---
src/context.rsif trimmed.starts_with("- [ ] ") { ---
src/context.rs
Source warrant: unknown on import; transformed selection can degrade scope by omission. Authorship and human approval cannot be inferred from created_by; see supplied admission record. No observed vault instance was supplied.
EPI-OBJ-identity-facts
Label: identity_facts
Symbolic SQLite rows carry tier/key/value/source/updated_at. Natural-language values become claims through formatter labels and client interpretation. Candidate content: active projects, key people, current focus, blocking and OOO, plus separately acquired L0 name/role/purpose in config. Claimed role: compact identity/current context. Distinct from RT-OBJ-llm-cache; produced within RT-RTE-setup-apply and index refresh but neither supplied record individually contains the whole object's lifecycle. SRC-1 src/store.rs, src/identity.rs:
"INSERT INTO identity_facts (tier, key, value, source, updated_at) VALUES (?1, ?2, ?3, ?4, datetime('now')) ON CONFLICT(tier, key, value) DO UPDATE SET source = excluded.source, updated_at = datetime('now')", ---
src/store.rs
OOO/focus/blocking upserts omit source paths; formatted text omits source fields even where retained. Stored update time is extraction time, not proof the represented state remains current.
EPI-OBJ-health-report
Label: HealthReport
Current-call symbolic Rust/JSON report: orphans, unresolved links, stale_notes, inbox_pending, tag_issues, index age and count. Truth-apt candidates are index-relative structural propositions, such as a stored unresolved target or a work-path note lacking work. Claimed role: vault diagnostics, not note-truth endorsement. No supplied object counterpart; adjacent RT-RTE-index-refresh produces inputs, not this report. SRC-1 src/health.rs:
pub struct HealthReport { pub orphans: Vec
, pub broken_links: Vec , pub stale_notes: Vec , --- src/health.rs
No evidence that an empty stale_notes result represents an evaluated absence of stale content.
Routes
EPI-RTE-orchestration-parse
Label: Orchestration parsing Part of: RT-RTE-query-search
Material parser/admission part, not a replacement for the full retrieval route. Endpoints: generated text → extracted JSON → intent/string expansions/date interpretation → usable result or fallback; cached structured JSON instead goes through serde deserialization in search. Code owns parsing/progression; model proposes strings, code can veto malformed output, external client supplies query and can decline invocation. Open requests, no improvement trigger or reference-answer oracle. SRC-1 src/llm.rs, src/search.rs.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: OrchestrationResult or parse error; concrete orchestrator substitutes heuristic result on parse/generation failure.
- Later read-back: Accepted result can be cached under query hash and reused by later searches; no model/age check in supplied cache record.
- Delegated visibility: External caller sees selected search results, not necessarily the accepted expansions or parse/fallback history.
- Selection predicate: Extractable JSON object and nonempty vector of string expansions; unknown intent defaults to exploratory; dates can override intent.
- Invalidation or expiry: Cache replacement on same query; getter does not expire by age/model; CLI clear removes database as a separate operation.
- Activation or effect: Parsing result gates generated-policy use; code consumes expansions/intent/date in retrieval. Shape acceptance changes search, not warrant of the interpretation.
- Evidence limits: No actual generated outputs or runs; cache serde branch is not equivalent to generated parser checks.
Target/domain: usable orchestration JSON, not semantic equivalence to the user's query. Disposition is operative because parse failure produces heuristic replacement. No semantic acceptance criterion, rollback of incorrect meaning or original-query inclusion check was found in this parser.
if expansions.is_empty() { anyhow::bail!("no expansions in orchestration response"); } ---
src/llm.rsserde_json::from_str(&cached_json).unwrap_or_else(|| { orch.orchestrate(query) .unwrap_or_else(|| llm::heuristic_orchestrate(query)) }) ---
src/search.rs
A concrete deterministic contrast: generated JSON with "expansions":["unrelated"] and an unknown intent passes the shown shape criterion with exploratory intent. This proves permissive content admission, not that a model actually produced that input.
EPI-RTE-confidence-normalize
Label: Confidence normalization Part of: RT-RTE-query-search
Material numerical derivation part of retrieval. Endpoints: ranked lanes/weights → RRF sums → relative maximum normalization → returned confidence field. Symbolic code owns calculation and top_n consumer; local models supply some ranks but no answer oracle. Open retrieval, no improvement experiment. SRC-1 src/fusion.rs, src/search.rs.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: FusedResult including rrf_score and confidence.
- Later read-back: inapplicable — normalized score is current-call output, not use-derived retained state in this function.
- Delegated visibility: CLI/MCP/HTTP search callers receive confidence; lane explanation is not universally returned.
- Selection predicate: Weighted reciprocal rank summed by path; maximum score after sorting supplies denominator; top_n selects delivered rows.
- Invalidation or expiry: inapplicable — no durable score in this function; next search recomputes against current lanes.
- Activation or effect: Fusion orders results and normalization changes their displayed percentage; public instructions suggest preferring higher confidence.
- Evidence limits: No calibration, measured relevance, factual correctness or executed arithmetic; deduction is from inspected implementation.
Target/domain: relative rank-fusion magnitude among this call's candidates. With a single positive-weight lane containing one file, rank 1 and k=60 give score weight/61 and normalization gives exactly 100 percent, regardless of factual accuracy or absolute relevance. This checked algebra establishes an entailed numerical result, not a newly warranted world claim. SRC-1 src/fusion.rs:
let contribution = weight / (k as f64 + rank as f64); ---
src/fusion.rslet max_score = results.first().map(|r| r.rrf_score).unwrap_or(1.0); for r in &mut results { r.confidence = if max_score > 0.0 { (r.rrf_score / max_score) * 100.0 } else { 0.0 }; } ---
src/fusion.rs
EPI-RTE-identity-extract
Label: Identity extraction
Distinct multi-entry extraction/retention/formatter route overlaps RT-RTE-index-refresh and RT-RTE-setup-apply, with no single supplied record containing all entries and consumers. Endpoints: indexed vault/profile → clear tier-1 rows → heuristic category extraction/upserts → subsequent identity formatting/API return. CLI refresh and full shared indexing are triggers; the MCP identity handler reads existing facts. Code owns extraction and storage; callers supply vault/configuration, not per-fact approval. Open synchronization/setup, no reference-answer oracle or improvement experiment. SRC-1 src/identity.rs, src/store.rs, src/indexer.rs, src/serve.rs, src/main.rs.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: L1Summary from extraction; later identity requests return formatted L0/L1 text or structured CLI JSON.
- Later read-back: identity_facts persist in SQLite; formatter reads them on subsequent requests, config supplies separately retained L0 fields.
- Delegated visibility: Formatted block groups values under Current State labels without source paths; external agent receives that text, not proof of extraction correctness.
- Selection predicate: Project tags excluding template/archive components; top-five incoming-edge-ranked people; latest dated daily priorities bullets; last-seven daily-note OOO/person substring co-occurrence; last-three blocking keyword bullets.
- Invalidation or expiry: Extraction clears all tier-1 facts before repopulation; no independent truth/age expiry. Errors after clear can leave partial replacement; normal per-file watcher refresh is not shown to regenerate facts.
- Activation or effect: Code persists candidates and formats Active projects/Key people/Current focus/Blocking/OOO for clients; actual client reliance unobserved.
- Evidence limits: No user-vault run or checked fact; categories have heuristic rather than evidence-consuming semantic admission.
Admission: code applies extraction rules with no separate acceptance check against truth, intended reliance scope or reference outcome. Caller can change source files/config or request refresh; no saved previous L1 set is restored by this procedure. Static rules guide the proposal and persist in code; extracted values persist in SQLite. The record's claims are about this exposed route, not model internals.
Concrete source-level counterexample: let a configured people folder contain Alice.md and Bob.md, and a considered daily snippet be - Alice is in office.\n- Bob is on vacation. The OOO regex matches vacation; both person names occur in the whole snippet. For Alice, extract_ooo_detail returns the first OOO-matching line, Bob is on vacation., and upsert retains Alice (Bob is on vacation.) under OOO. The premise explicitly puts Alice in office, so associating her with OOO is not entailed. The implementation can create an ampliative/misassociated current-state candidate without target execution. SRC-1 src/identity.rs:
if chunk .snippet .to_ascii_lowercase() .contains(&person.to_ascii_lowercase()) { // Extract context around the match. let detail = extract_ooo_detail(&chunk.snippet, &ooo_re); let label = format!("{} ({})", person, detail); store.upsert_identity_fact(1, "ooo", &label, None)?; ---
src/identity.rsif ooo_re.is_match(trimmed) { // Return the line content (stripped of bullet prefix) as the detail. ---
src/identity.rs
Activity and importance are also inferred rather than checked: a project tag admits an Active projects label; edge counts select Key people. These labels exceed the guaranteed propositions “has project tag” and “among top five incoming-edge counts.” Copying focus/blocking bullets is a different relation: code removes checkbox markers, loses daily source pointers and caps focus items. For example a priorities bullet - [x] Ship release becomes Ship release under Current focus, losing completion information. This is context-lossy reshaping; it need not invent a new sentence to weaken warrant.
let rest = rest .strip_prefix("[ ] ") .or_else(|| rest.strip_prefix("[x] ")) .or_else(|| rest.strip_prefix("[X] ")) .unwrap_or(rest); let clean = rest.trim().to_string(); ---
src/identity.rs:267-291out.push_str(&format!("OOO: {}\n", ooo_vals.join(", "))); ---
src/identity.rs
The source-level transformation establishes a possible candidate, not an observed accepted claim. Clearing/repopulating rows is not evidence of content-directed criticism or acceptance. Updated_at records extraction recency, not state truth.
EPI-RTE-health-report
Label: Health reporting
Distinct diagnostic route, absent from the supplied runtime route inventory; adjacent RT-RTE-index-refresh supplies its data. Endpoints: authenticated HTTP or MCP health request → indexed structural queries and fixed tag rules → serialized HealthReport. Rust code owns progression; caller requests assessment, no model or human decides findings. Open diagnostic requests, no improvement trigger or answer oracle. SRC-1 src/health.rs, src/serve.rs, src/http.rs.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Lists of isolated indexed paths, indexed unresolved links, inbox files, work-path tag issues, index age and total count; stale_notes always empty in inspected stub.
- Later read-back: inapplicable — health results are current-call outputs; their underlying retained index is supplied by a separate route.
- Delegated visibility: MCP/HTTP client sees the serialized report, not an enforced repair or truth decision.
- Selection predicate: No edges after configured daily/inbox exclusions; unresolved_links rows; inbox prefix; Work-path notes without exact work tag; maximum parsed indexed_at for age.
- Invalidation or expiry: inapplicable — report is regenerated per request; stale source index can still affect its input facts.
- Activation or effect: Report delivery is wired, advisory to the caller; no automatic rejection/revision consumer is implemented in the inspected health module/handlers.
- Evidence limits: No health run; computed results are index-relative and path conventions are not semantic note classification.
Evaluator targets/domains: orphan means no stored edges outside chosen exclusions; broken link means unresolved indexed wikilink; tag issue means a particular path/tag predicate. Those are bounded structural criteria. Their successful computation would not endorse note claims. The stale-note slot lacks an evaluator, and index age is time since most recent indexed file, not a completeness/freshness certificate.
pub fn find_stale_notes(_store: &Store, _days: u32) -> Result
> { Ok(Vec::new()) } --- src/health.rs.filter(|f| f.path.contains("Work/") || f.path.contains("01-Projects/Work/")) .filter(|f| !f.tags.iter().any(|t| t == "work")) ---
src/health.rs
The stale empty list therefore licenses no inference that all content is current. The advertised CLI engraph context health has no matching variant in inspected ContextAction; MCP/HTTP health is a positive alternate witness, so the finding is not “health absent.”
EPI-RTE-placement-correction
Label: Placement correction
Distinct automatic feedback route overlapping RT-RTE-note-admission and RT-RTE-index-refresh, not a duplicate of initial placement/admission. Endpoints: watcher matched move → created_by/suggested_folder comparison → mean-vector centroid addition/subtraction and correction log → metadata stripping → later semantic placement. Distributed-parametric folder centroids persist as SQLite vector blobs; symbolic correction rows and suggested_folder metadata are separate parts. Code owns adaptation; external editor produces movement, but neither human identity nor intended evaluation is authenticated. SRC-1 src/watcher.rs, src/placement.rs, src/store.rs.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Watcher logs/continues; adjustment/log/strip failures can warn; no reference-answer judgment returned.
- Later read-back: Updated folder centroids are read by try_semantic_placement for future writes; correction logs persist but inspected selector consumes centroids, not a learned prose explanation.
- Delegated visibility: Later caller sees chosen placement/confidence; not every detected move or failed centroid update is delivered.
- Selection predicate: Detected move paired by content hash; known created_by label and nonmatching suggested/actual folders; available stored chunk vectors for centroid adjustment; future semantic similarity above 0.65 admits centroid placement unless type rules/explicit folder preempt it.
- Invalidation or expiry: Batch indexing overwrites only centroid rows for first-path-component groups represented by chunk vectors from indexed_rel_paths; unchanged files can contribute nothing in an incremental run. It does not clear all centroid rows, so nested parent-folder rows written by feedback can survive even a rebuild. Subsequent additions/removals/corrections alter affected rows; stripping removes suggested_folder/confidence from a recognized move's note. Errors can leave partial updates; no global feedback reset or coherent full-vault centroid recovery is established.
- Activation or effect: Code boosts actual and decays suggested centroid; later placement consumer is wired to changed state. No exercised placement improvement observed.
- Evidence limits: Supported adapter labels exclude http-api; file move is proxy feedback, not an authenticated approval or a truth check. Vector granularity/count consistency and benefit are unestablished.
Trigger/proposal/admission: movement plus metadata produces a software correction; code gates by label and comparison, not independently checked correctness. Users can refrain from moving, change metadata or override folders, but the route has no per-correction approval request. Guidance persists as static detection/placement rules; numeric centroids and symbolic log persist. Recovery is best effort: errors warn, and later indexing may overwrite touched first-component rows, but neither global feedback invalidation nor a saved centroid transaction rollback is established. Operating mode: open watcher feedback, no controlled improvement experiment or answer oracle. SRC-1 src/indexer.rs, src/store.rs, src/watcher.rs support this bounded recovery account; see also the supplied peer evidence in MEM-OBJ-folder-centroids and MEM-RTE-placement-feedback.
The batch indexer averages chunk vectors only for files indexed in that invocation, grouped by first path component. Feedback instead uses the moved note's mean vector and actual parent-folder key, while adjustment treats the stored count as file-vector count. These different keys and units prevent a uniform full-vault centroid invariant. The inspected rebuild branch clears vectors, not all centroid rows; its later centroid loop only upserts represented groups.
for rel_path in &indexed_rel_paths { let folder = rel_path.split('/').next().unwrap_or("(root)").to_string(); ---
src/indexer.rsstore.upsert_folder_centroid(folder, ¢roid, vectors.len())?; ---
src/indexer.rslet actual_folder = std::path::Path::new(&new_rel) .parent() .map(|p| p.to_string_lossy().to_string()) .unwrap_or_default(); ---
src/watcher.rsconst ENGRAPH_AGENTS: &[&str] = &["claude-code", "cli", "mcp-server"]; ---
src/placement.rs// Adjust centroids: boost actual, decay suggested ---
src/watcher.rs.map(|(o, v)| (o * nf + v) / new_n as f32) ---
src/store.rsif best_sim > 0.65 { ---
src/placement.rs
This is durable behavior-shaping adaptation without a truth-apt policy proposition. Centroid inference is not online updating of loaded model parameters. Formulated criticism with challenged claim/result/blame and retained theory revision is not established by the move-score mechanism. Improvement of future action is unestablished, independently of persistence and automatic updating. It therefore supports an adaptation mechanism, not demonstrated learning benefit or successful self-improvement.
EPI-RTE-content-withdrawal
Label: Content withdrawal
Distinct withdrawal/recovery functions spanning supplied RT-RTE-note-admission and RT-RTE-index-refresh. Endpoints: caller archive/soft-delete/hard-delete or missing-file integrity cleanup → filesystem/index removal or movement → future selection changes. Code owns I/O; caller requests withdrawal, filesystem absence triggers orphan cleanup. SRC-1 src/writer.rs, src/main.rs; startup invocation is supplied by runtime.
- implementation conclusion status: wired
- operation conclusion status: uninspected
- Immediate return: Write metadata or success/error/count depending on operation; CLI clear reports removal of database or entire data directory.
- Later read-back: Archive disk copies remain; unarchive is a separate recovery request; deleted retrieval entries no longer supply the removed path until content is reintroduced/indexed. Soft delete inserts an archive file record rather than behaving identically to archive_note.
- Delegated visibility: Caller sees status/metadata, not proof every other client's copied context was withdrawn; prior tool returns remain external.
- Selection predicate: Explicit resolved file/mode for note withdrawal; path.exists false for integrity cleanup; all flag determines CLI clear scope.
- Invalidation or expiry: Reindex/reintroduction or unarchive can restore availability; hard deletion/CLI clear have no previous-body rollback in inspected procedures.
- Activation or effect: Archive removes old vectors/FTS/edges/file record and original file; hard deletion removes disk file then purges Store; integrity cleanup removes missing-path derived entries; clear deletes database or whole data directory.
- Evidence limits: No runs or crash tests; archive paths can be reconsidered by later indexing subject to its configuration. Immediate removal does not prove permanent exclusion or truth rejection.
Admission/rejection: callers propose withdrawal and server/HTTP controls can veto covered mutations, as in runtime. Integrity cleanup uses existence, not content truth. No answer oracle; open maintenance requests, not evaluation experiments. Recovery varies by mode and is not cross-resource atomic. Static archive/delete/existence rules guide operation; remaining disk artifacts or removal effects persist. Withdrawal does not revise a formulated theory or identify a false claim.
if !full_path.exists() { // Clean up orphan: vectors, FTS, edges, file record ---
src/writer.rs// Delete disk file first, then purge store std::fs::remove_file(&old_path)?; store.delete_file_hard(&file_record.path)?; ---
src/writer.rs// Delete only index files: engraph.db. let db_path = data_dir.join("engraph.db"); ---
src/main.rs
Claims
EPI-CLM-vault-knowledge
Label: Vault knowledge API
Claimed operation: expose vault content and its connections as queryable agent knowledge/context, not an explicit promise of universally correct generated answers. No supplied claim counterpart; RT-RTE-query-search describes implementation, not this public claim. SRC-1 README.md, doctrine/design:
engraph turns your markdown vault into a searchable knowledge graph that any AI agent can query ---
README.md
Boundary already supplies this passage and its context. Implementation supports querying and associations; whether the contents merit factual reliance depends on unknown source warrant and downstream checking.
EPI-CLM-search-confidence
Label: Search confidence guidance
Claimed operation: display normalized confidence and advise a client to prefer higher matches. Distinct from supplied write-consistency/read-only claims; closest route is RT-RTE-query-search. SRC-1 README.md, doctrine/design:
Results include confidence % — prefer higher confidence matches ---
README.mdConfidence % display: search results show normalized 0-100% confidence instead of raw RRF scores ---
README.md
The latter explicitly discloses normalization. The mismatch is a stronger probability/warrant reading, not proof the documentation claims calibrated factual certainty.
EPI-CLM-health-diagnostics
Label: Health diagnostics
Claimed operation: detect stale content along with structural issues and expose CLI/MCP diagnostics. No supplied claim counterpart; RT-RTE-index-refresh concerns maintenance, not diagnosis. SRC-1 README.md, doctrine/design:
- Vault health diagnostics — detect orphan notes, broken wikilinks, stale content, and tag hygiene issues. Available as MCP tool and CLI command. ---
README.mdengraph context health ---
README.md
Stale-content detection is unsupported by inspected stub, and ContextAction lacks a health variant. Exposed MCP/HTTP reporting remains supported.
EPI-CLM-placement-learning
Label: Placement correction learning
Claimed operation: learn placement corrections from user file moves. Distinct from RT-RTE-note-admission, which names initial placement but not a learning claim. SRC-1 README.md, doctrine/design:
- Placement correction learning from user file moves ---
README.md
Inspected move-derived adaptation supports a concrete operational interpretation. Beneficial learning and intentional human correction are separate unestablished conclusions.
Evidenced absences
none declared in this member
Behavioral-authority paths
none declared in this member