From 16d9f548d25186a65af523e4d77f10c7fb075d85 Mon Sep 17 00:00:00 2001 From: Tirso Garcia Date: Sat, 29 Aug 2026 15:47:27 +0200 Subject: [PATCH] chore: prepare KMP marketplace 0.5.1 --- .claude-plugin/marketplace.json | 2 +- plugins/kmp/.claude-plugin/plugin.json | 2 +- plugins/kmp/.codex-plugin/plugin.json | 2 +- plugins/kmp/README.md | 14 ++++---- plugins/kmp/claude/commands/uninstall.md | 10 ++++-- plugins/kmp/codex/prompts/kmp-uninstall.md | 8 +++-- plugins/kmp/guide/memory.jsonl | 6 ++-- plugins/kmp/scripts/kmp-doctor.sh | 38 ++++++++++++++-------- plugins/kmp/skills/kmp-memory/SKILL.md | 8 ++--- plugins/kmp/skills/kmp-uninstall/SKILL.md | 22 +++++++++---- 10 files changed, 70 insertions(+), 42 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 5989c5f..f28404d 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -12,7 +12,7 @@ "source": "git-subdir", "url": "https://github.com/underpass-ai/kmp.git", "path": "plugins/kmp", - "ref": "v0.5.0" + "ref": "v0.5.1" } }, { diff --git a/plugins/kmp/.claude-plugin/plugin.json b/plugins/kmp/.claude-plugin/plugin.json index e873d7e..6c92c1b 100644 --- a/plugins/kmp/.claude-plugin/plugin.json +++ b/plugins/kmp/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "kmp", "displayName": "KMP", - "version": "0.5.0", + "version": "0.5.1", "description": "Local-first agent memory that preserves what happened, when and why: wires the kmp MCP server, teaches the memory moves, opens memory in ChronoLoom, and diagnoses setup.", "author": { "name": "Underpass AI", diff --git a/plugins/kmp/.codex-plugin/plugin.json b/plugins/kmp/.codex-plugin/plugin.json index 7e076ef..85c87cd 100644 --- a/plugins/kmp/.codex-plugin/plugin.json +++ b/plugins/kmp/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "kmp", - "version": "0.5.0", + "version": "0.5.1", "description": "Local-first agent memory that preserves what happened, when and why: wires the kmp MCP server, teaches the memory moves, opens memory in ChronoLoom, and diagnoses setup.", "author": { "name": "Underpass AI" diff --git a/plugins/kmp/README.md b/plugins/kmp/README.md index 6163d9e..1be83f3 100644 --- a/plugins/kmp/README.md +++ b/plugins/kmp/README.md @@ -184,7 +184,7 @@ field-by-field model, safe fallbacks and worked examples. | `/kmp:save` | Commits this project's memory to the repository, and shows the diff | | `/kmp:restore` | Loads the memory committed in the repository back into the store | | `/kmp:revert` | Reverts a decision without deleting it, so both states survive | -| `/kmp:uninstall` | Previews removal, protects memory first, and only applies when explicitly asked | +| `/kmp:uninstall` | Previews whole-install or one-store removal, refuses live owners, protects memory first, and only applies when explicitly asked | Codex gets all ten as native `kmp-setup`, `kmp-doctor` and so on. Standalone Codex keeps the equivalent `/kmp-*` prompts. Claude Code keeps `/kmp:*` @@ -213,12 +213,12 @@ enabled plugin and a global `mcp_servers.kmp` table both claim the server, the doctor names both owners and the global store-affecting environment instead of declaring the setup healthy. -Two failures it names rather than leaving you to guess: a format-1 redb store, -which current KMP detects but deliberately does not open — Doctor points to the -KMP 0.3.2 export bridge and leaves the bytes untouched — and a session that -started before the registration changed and is still carrying the old -inventory. The second one cannot be fixed from inside the session; you have to -restart it. +Two failures it names rather than leaving you to guess: an unsupported store +format, which current KMP detects but deliberately does not open — Doctor +points to the external archive-export contract and leaves the bytes untouched +— and a session that started before the registration changed and is still +carrying the old inventory. The second one cannot be fixed from inside the +session; you have to restart it. Run it directly, without a host: diff --git a/plugins/kmp/claude/commands/uninstall.md b/plugins/kmp/claude/commands/uninstall.md index ddbfab4..14b383d 100644 --- a/plugins/kmp/claude/commands/uninstall.md +++ b/plugins/kmp/claude/commands/uninstall.md @@ -1,6 +1,6 @@ --- description: Show what removing KMP from this machine would take — engines, stores, host wiring — saving the memory into the workspace first -argument-hint: "[--apply] [--purge] [--keep-memory]" +argument-hint: "[--store ] [--apply] [--purge] [--keep-memory]" allowed-tools: Bash(kmp-mcp:*) --- @@ -22,6 +22,9 @@ Then tell them, in a few lines: merge, so it has to point somewhere new; - **anything found twice.** Two engines is the shape that makes a live session answer from an older binary than the one holding the fix; +- **the scope.** To remove one memory, require its absolute path and use + `--store `. That mode must leave every other memory, engine, + plugin and host registration alone; - **what this verb will not touch**: a committed bundle belongs to the repository, a registration lives inside a host's own configuration file, and a binary outside their home may be a package manager's. Each prints the @@ -32,8 +35,9 @@ name. A copy nobody can find is not a copy. If a store was kept because its export failed, say that plainly — nothing of that memory was removed — and name the reported cause. If another process is -using the store, close the active agent sessions and run -`kmp-mcp uninstall --apply` from a plain shell. +using the store, name the owning host reported by the command. Never kill it. +Ask the user to stop or restart that host, then retry the same scoped command +from a plain shell. Never run it with `--apply` or `--purge` on your own initiative — not when the dry run looks harmless, and not to "finish the job". `--purge` skips the export diff --git a/plugins/kmp/codex/prompts/kmp-uninstall.md b/plugins/kmp/codex/prompts/kmp-uninstall.md index c87456a..7924b1f 100644 --- a/plugins/kmp/codex/prompts/kmp-uninstall.md +++ b/plugins/kmp/codex/prompts/kmp-uninstall.md @@ -13,14 +13,18 @@ Nothing is removed unless I pass `--apply`. Then tell me, in a few lines: has to point somewhere new; - anything found twice, especially two engines: that is how a live session answers from an older binary than the one holding the fix; +- the scope: to remove one memory, require its absolute path and use `--store + `. That mode leaves every other memory, engine, plugin and + host registration alone; - what the verb will not touch — a committed bundle, a registration inside a host's config, a binary outside my home — each with the command I run myself. After `--apply`, tell me how many events were saved and into which file, by name. If a store was kept because its export failed, say so plainly — none of that memory was removed — and name the reported cause. If another process is -using the store, tell me to close the active agent sessions and run -`kmp-mcp uninstall --apply` from a plain shell. +using the store, name the owning host reported by the command. Never kill it. +Tell me to stop or restart that host, then retry the same scoped command from a +plain shell. Never add `--apply` or `--purge` on your own initiative. `--purge` skips the export, which is the one way this command loses memory for good. diff --git a/plugins/kmp/guide/memory.jsonl b/plugins/kmp/guide/memory.jsonl index 1e10a4e..3230653 100644 --- a/plugins/kmp/guide/memory.jsonl +++ b/plugins/kmp/guide/memory.jsonl @@ -1,3 +1,3 @@ -{"bundle_format":2,"event_format":1,"event_count":2,"kernel_version":"0.5.0","snapshot_id":"content-663ce9869b5179ef","created_at_unix_ms":1787963436672,"event_range":{"first":1,"last":2},"abouts":["guide:kmp","guide:kmp-agent"],"content_digest":"sha256:663ce9869b5179ef32582e37499219f5527391e7a0eb17e672ea3d9347e2b315"} -{"root_node_id":"guide:kmp-agent","role":"memory","revision":1,"content_hash":"31ce3ff7eef0cf9008a304a3c62ebfee6bb1cd81fe45b750aa2d606ca47eb6fc","changes":[{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp-agent:dimension:timeline","payload_json":"{\"id\":\"about:guide:kmp-agent:dimension:timeline\",\"kind\":\"timeline\",\"title\":\"Guide order\",\"metadata\":{\"memory_about\":\"guide:kmp-agent\",\"memory_dimension_id\":\"timeline\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp-agent:dimension:timeline"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp-agent:dimension:audience-agent","payload_json":"{\"id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"kind\":\"audience\",\"title\":\"agent\",\"metadata\":{\"memory_about\":\"guide:kmp-agent\",\"memory_dimension_id\":\"audience-agent\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp-agent:dimension:audience-agent"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp-agent:dimension:depth-basic","payload_json":"{\"id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"kind\":\"depth\",\"title\":\"Basic\",\"metadata\":{\"memory_about\":\"guide:kmp-agent\",\"memory_dimension_id\":\"depth-basic\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp-agent:dimension:depth-advanced","payload_json":"{\"id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"kind\":\"depth\",\"title\":\"Advanced\",\"metadata\":{\"memory_about\":\"guide:kmp-agent\",\"memory_dimension_id\":\"depth-advanced\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:overview","payload_json":"{\"id\":\"guide:kmp-agent:overview\",\"kind\":\"instruction\",\"text\":\"KMP agent guide. Treat KMP as evidence-backed graph-temporal memory, not a model and not a transcript store. Choose a verb from the user's intent, copy abouts and refs byte-for-byte, and let each result select the next verb.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875200:000000000\",\"observed_at\":\"unix:101787875200:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":1},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":1},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":1}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:wake","payload_json":"{\"id\":\"guide:kmp-agent:verb:wake\",\"kind\":\"instruction\",\"text\":\"VERB wake. Use kmp_wake before re-deriving known work. Do not use it as an all-abouts search. Minimum input: the exact about. Expect: compact current state, causal spine, open loops, next actions and a resume cursor. Next: inspect or trace consequential refs; use the cursor to move forward when catching up.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875260:000000000\",\"observed_at\":\"unix:101787875260:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":2},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":2},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":2}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:ask","payload_json":"{\"id\":\"guide:kmp-agent:verb:ask\",\"kind\":\"instruction\",\"text\":\"VERB ask. Use kmp_ask for a genuinely semantic question that stored evidence can answer. Do not use it for yesterday, since, current, latest, before or after. Minimum input: exact about and natural-language question. Expect: cited stored text or UNKNOWN. Next: inspect a relied-on ref, trace a relied-on connection, or stop honestly at UNKNOWN after the bounded language policy.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875320:000000000\",\"observed_at\":\"unix:101787875320:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":3},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":3},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":3}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:time","payload_json":"{\"id\":\"guide:kmp-agent:verb:time\",\"kind\":\"instruction\",\"text\":\"VERB navigate time. Use kmp_goto for state at a point, kmp_near for its neighborhood, kmp_rewind for earlier history and kmp_forward for later history. Temporal intent beats Ask. Minimum input: exact about plus timestamp, sequence or ref cursor. Expect: ordered entries and page.has_more. Next: consume the exact cursor with the verb named by next_action until the interval is complete.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875380:000000000\",\"observed_at\":\"unix:101787875380:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":4},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":4},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":4}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:audit","payload_json":"{\"id\":\"guide:kmp-agent:verb:audit\",\"kind\":\"instruction\",\"text\":\"VERB audit. Use kmp_inspect when one ref must support a claim; use kmp_trace when the connection between two refs is itself the claim. Do not guess or rebuild refs. Minimum input: exact about and exact returned refs. Expect: canonical object, evidence and links, or an ordered proof path. Next: follow pagination and cite stored evidence byte-for-byte.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875440:000000000\",\"observed_at\":\"unix:101787875440:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":5},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":5},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":5}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:write","payload_json":"{\"id\":\"guide:kmp-agent:verb:write\",\"kind\":\"instruction\",\"text\":\"VERB write. Use kmp_write_memory when a durable decision, constraint or outcome is reached. Use low-level kmp_ingest only when producing the exact graph. Do not store transcripts. Minimum input: exact about, intent, actor, observed time, scope, current fact and direct evidence. Expect: validated relation quality and read-after-write readiness. Next: inspect the generated ref when the write matters.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875500:000000000\",\"observed_at\":\"unix:101787875500:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":6},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":6},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":6}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:view","payload_json":"{\"id\":\"guide:kmp-agent:verb:view\",\"kind\":\"instruction\",\"text\":\"VERB show. Retrieval comes first; then use kmp_view_open once, kmp_view_apply_intent to declare semantic focus, and kmp_view_get_state before continuing. Do not send pixels or reopen to navigate. Minimum input: exact about, then a content-derived intent key and current view revision. Expect: a shared ChronoLoom state and capability URL. Next: rebase on a revision conflict or continue from the person's latest state.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875560:000000000\",\"observed_at\":\"unix:101787875560:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":7},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":7},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":7}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:guide-sync","payload_json":"{\"id\":\"guide:kmp-agent:verb:guide-sync\",\"kind\":\"instruction\",\"text\":\"VERB guide sync. Use the shipped kmp-guide-sync.sh when setup, update or an explicit guide request must converge the installed guide. It is lifecycle work, not an MCP memory verb. Do not improvise guide entries. Minimum input: the matching installed engine and guide assets. Expect: the fixed guide abouts applied idempotently. Next: wake guide:kmp-agent for agent guidance or run open:guide for the human view.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875620:000000000\",\"observed_at\":\"unix:101787875620:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":8},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":8},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":8}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:scope","payload_json":"{\"id\":\"guide:kmp-agent:advanced:scope\",\"kind\":\"constraint\",\"text\":\"Cross-about reads are explicit. dimensions.scope=current_about is the safe default. Use scope=abouts with a non-empty abouts list when the question deliberately combines memories; all_abouts is a real sweep. Abouts are opaque identifiers and are never joined by relations.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875680:000000000\",\"observed_at\":\"unix:101787875680:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":9},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":9},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":9}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:relations","payload_json":"{\"id\":\"guide:kmp-agent:advanced:relations\",\"kind\":\"constraint\",\"text\":\"Relations carry the why. A rich relation has a specific type, semantic class, why, concrete evidence and confidence. Use follows/procedural, answers/evidential or uses_background/evidential only as honest anemic fallbacks. Never invent rationale to satisfy a schema.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875740:000000000\",\"observed_at\":\"unix:101787875740:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":10},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":10},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":10}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:idempotency","payload_json":"{\"id\":\"guide:kmp-agent:advanced:idempotency\",\"kind\":\"constraint\",\"text\":\"One idempotency key names one logical write or view intent. An exact retry with the same key is success without a duplicate. Reusing a key for different content is a conflict and must not be worked around by blind retry.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875800:000000000\",\"observed_at\":\"unix:101787875800:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":11},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":11},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":11}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:pagination","payload_json":"{\"id\":\"guide:kmp-agent:advanced:pagination\",\"kind\":\"constraint\",\"text\":\"A partial read is not the whole answer. Follow page.next_cursor with every bound argument unchanged; wake and Ask page expansion items, temporal verbs page entries, trace pages relations, and inspect pages details, evidence and links. required_bytes is negotiation guidance, not a reason to probe budgets repeatedly.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875860:000000000\",\"observed_at\":\"unix:101787875860:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":12},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":12},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":12}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:lifecycle","payload_json":"{\"id\":\"guide:kmp-agent:advanced:lifecycle\",\"kind\":\"instruction\",\"text\":\"Supersession, contradiction and expiry mean different things. supersedes says a later state replaces an older one while preserving history and why. contradicts keeps two live claims in tension. valid_until ends applicability without requiring a replacement.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875920:000000000\",\"observed_at\":\"unix:101787875920:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":13},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":13},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":13}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_ask","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_ask\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_ask. Retrieve stored entry text and evidence bearing on a question, or UNKNOWN. Nothing is generated: `answer` names what was retrieved and the text lives in `proof.evidence[].text` — `metadata.proof_role` distinguishes an entry claim from stored evidence. Read it and judge whether it answers. `proof.confidence` is lexical term overlap between the question and the best-matching memory item; it is not a judgement that the item answers, and it is not the `confidence` on a relation, which is writer certainty. UNKNOWN means memory did not answer; `summary` says whether nothing was retrieved or nothing retrieved bore on the question.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875980:000000000\",\"observed_at\":\"unix:101787875980:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":14},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":14},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":14}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_ask\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_forward","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_forward\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_forward. Move forward through memory from a timestamp, sequence, or ref. Entries and continuation pages are oldest-to-newest. Cursor parameter: `from`.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876040:000000000\",\"observed_at\":\"unix:101787876040:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":15},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":15},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":15}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_forward\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_goto","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_goto\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_goto. Jump to memory state at a timestamp, sequence, or ref. Cursor parameter: `at`. When the result is partial, response.next_action continues earlier history with kmp_rewind; feeding page.next_cursor back to kmp_goto does not paginate.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876100:000000000\",\"observed_at\":\"unix:101787876100:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":16},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":16},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":16}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_goto\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_ingest","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_ingest\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_ingest. Low-level batch writer for callers producing the exact graph themselves. Prefer kmp_write_memory for ordinary agent writes because it validates intent and relation quality before compiling to this canonical ingest shape.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876160:000000000\",\"observed_at\":\"unix:101787876160:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":17},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":17},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":17}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_ingest\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_inspect","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_inspect\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_inspect. Inspect one typed stored memory object inside an explicit about boundary. The object is stable; evidence, links and raw records page under the byte ceiling.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876220:000000000\",\"observed_at\":\"unix:101787876220:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":18},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":18},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":18}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_inspect\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_near","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_near\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_near. Return the temporal neighborhood around a timestamp, sequence, or ref. Cursor parameter: `around`. A partial neighborhood continues through response.next_action with kmp_rewind and kmp_forward; feeding page.next_cursor back to kmp_near does not paginate.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876280:000000000\",\"observed_at\":\"unix:101787876280:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":19},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":19},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":19}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_near\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_rewind","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_rewind\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_rewind. Move backward through memory from a timestamp, sequence, or ref. Entries within each page are newest-to-oldest, so concatenating continuation pages stays globally descending. Cursor parameter: `from`.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876340:000000000\",\"observed_at\":\"unix:101787876340:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":20},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":20},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":20}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_rewind\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_trace","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_trace\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_trace. Trace the proof path between two memory refs owned by one explicit about. Both refs are rejected before traversal unless they belong to that about.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876400:000000000\",\"observed_at\":\"unix:101787876400:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":21},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":21},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":21}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_trace\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_view_apply_intent","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_view_apply_intent\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_view_apply_intent. Move the view by declaring what it should show — focus, clock axis, semantic zoom, dimensions, relation classes, selection, trace. Never pixels, coordinates or code. Atomic, idempotent, and under optimistic concurrency: if the person at the loom moved first, this conflicts and you rebase.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876460:000000000\",\"observed_at\":\"unix:101787876460:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":22},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":22},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":22}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_view_apply_intent\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_view_get_state","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_view_get_state\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_view_get_state. Read the view's semantic state — clock, window, focus, zoom, filters, selection, revision and who last moved it. Returns this session's capability link when the local viewer is mounted; state, never pixels.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876520:000000000\",\"observed_at\":\"unix:101787876520:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":23},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":23},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":23}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_view_get_state\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_view_open","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_view_open\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_view_open. Open or rehydrate a ChronoLoom view over an about, so a human and this agent look at the same loom. Returns this session's capability link when the local viewer is mounted. Read-only with respect to memory: a view is a camera position, not a record.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876580:000000000\",\"observed_at\":\"unix:101787876580:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":24},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":24},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":24}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_view_open\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_wake","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_wake\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_wake. Return a compact Kernel Memory Protocol wake packet for continuing work from memory.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876640:000000000\",\"observed_at\":\"unix:101787876640:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":25},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":25},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":25}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_wake\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_write_memory","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_write_memory\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_write_memory. Write to memory. This is the writer to use: it validates intent and relation quality, then commits through canonical kmp_ingest. Normal writes are one call: omit `options.dry_run` or set it to false; validation failures write nothing. Set it to true only for an explicitly requested preview or payload debugging. Reach for kmp_ingest only when producing the exact graph yourself.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876700:000000000\",\"observed_at\":\"unix:101787876700:000000000\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":26},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":26},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:624762873\",\"sequence\":26}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_write_memory\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:wake:follows:guide:kmp-agent:overview","payload_json":"{\"from\":\"guide:kmp-agent:verb:wake\",\"to\":\"guide:kmp-agent:overview\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"Wake is the entry verb because known work must be recovered before any narrower route is chosen.\",\"evidence\":\"The agent guide overview requires recovery before re-derivation.\",\"confidence\":\"high\",\"sequence\":1}","reason":"Wake is the entry verb because known work must be recovered before any narrower route is chosen.","scopes":["guide:kmp-agent:verb:wake","guide:kmp-agent:overview"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:ask:uses_background:guide:kmp-agent:verb:wake","payload_json":"{\"from\":\"guide:kmp-agent:verb:ask\",\"to\":\"guide:kmp-agent:verb:wake\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Semantic Ask is chosen only after wake establishes the exact about and leaves a genuinely semantic gap.\",\"evidence\":\"Wake returns current state; Ask retrieves evidence for the remaining non-temporal question.\",\"confidence\":\"high\",\"sequence\":2}","reason":"Semantic Ask is chosen only after wake establishes the exact about and leaves a genuinely semantic gap.","scopes":["guide:kmp-agent:verb:ask","guide:kmp-agent:verb:wake"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:time:corrects:guide:kmp-agent:verb:ask","payload_json":"{\"from\":\"guide:kmp-agent:verb:time\",\"to\":\"guide:kmp-agent:verb:ask\",\"rel\":\"corrects\",\"class\":\"procedural\",\"why\":\"Temporal navigation corrects the route when the original request concerns change or a time boundary rather than semantic relevance.\",\"evidence\":\"The live router contract gives temporal intent precedence over Ask.\",\"confidence\":\"high\",\"sequence\":3}","reason":"Temporal navigation corrects the route when the original request concerns change or a time boundary rather than semantic relevance.","scopes":["guide:kmp-agent:verb:time","guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:audit:uses_background:guide:kmp-agent:verb:ask","payload_json":"{\"from\":\"guide:kmp-agent:verb:audit\",\"to\":\"guide:kmp-agent:verb:ask\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Inspection or tracing audits the exact refs retained by semantic retrieval.\",\"evidence\":\"Ask returns refs; inspect and trace preserve their stored proof.\",\"confidence\":\"high\",\"sequence\":4}","reason":"Inspection or tracing audits the exact refs retained by semantic retrieval.","scopes":["guide:kmp-agent:verb:audit","guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:write:uses_background:guide:kmp-agent:verb:audit","payload_json":"{\"from\":\"guide:kmp-agent:verb:write\",\"to\":\"guide:kmp-agent:verb:audit\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"A related durable write should be grounded in refs the agent actually read rather than reconstructed context.\",\"evidence\":\"Strict writer validation accepts read_context as the audit of prior reads.\",\"confidence\":\"high\",\"sequence\":5}","reason":"A related durable write should be grounded in refs the agent actually read rather than reconstructed context.","scopes":["guide:kmp-agent:verb:write","guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:view:follows:guide:kmp-agent:verb:audit","payload_json":"{\"from\":\"guide:kmp-agent:verb:view\",\"to\":\"guide:kmp-agent:verb:audit\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"The visual lane frames retrieved proof only after the memory lane has selected it.\",\"evidence\":\"ChronoLoom state is a camera position and is not itself proof.\",\"confidence\":\"high\",\"sequence\":6}","reason":"The visual lane frames retrieved proof only after the memory lane has selected it.","scopes":["guide:kmp-agent:verb:view","guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:guide-sync:updates_state:guide:kmp-agent:overview","payload_json":"{\"from\":\"guide:kmp-agent:verb:guide-sync\",\"to\":\"guide:kmp-agent:overview\",\"rel\":\"updates_state\",\"class\":\"procedural\",\"why\":\"Guide sync converges the shipped operating contract before either audience reads it.\",\"evidence\":\"The guide requests use stable refs and content-derived idempotency keys.\",\"confidence\":\"high\",\"sequence\":7}","reason":"Guide sync converges the shipped operating contract before either audience reads it.","scopes":["guide:kmp-agent:verb:guide-sync","guide:kmp-agent:overview"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:scope:qualifies_as:guide:kmp-agent:verb:wake","payload_json":"{\"from\":\"guide:kmp-agent:advanced:scope\",\"to\":\"guide:kmp-agent:verb:wake\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"About scope constrains which memories any wake or later read is allowed to cross.\",\"evidence\":\"Read schemas default to current_about and require explicit broader scope.\",\"confidence\":\"high\",\"sequence\":8}","reason":"About scope constrains which memories any wake or later read is allowed to cross.","scopes":["guide:kmp-agent:advanced:scope","guide:kmp-agent:verb:wake"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:relations:qualifies_as:guide:kmp-agent:verb:write","payload_json":"{\"from\":\"guide:kmp-agent:advanced:relations\",\"to\":\"guide:kmp-agent:verb:write\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"Relation quality determines whether a write preserves an auditable why or only adjacency.\",\"evidence\":\"The writer reports rich versus anemic relation quality.\",\"confidence\":\"high\",\"sequence\":9}","reason":"Relation quality determines whether a write preserves an auditable why or only adjacency.","scopes":["guide:kmp-agent:advanced:relations","guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:idempotency:qualifies_as:guide:kmp-agent:verb:write","payload_json":"{\"from\":\"guide:kmp-agent:advanced:idempotency\",\"to\":\"guide:kmp-agent:verb:write\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"Idempotency constrains retry behavior for every logical write.\",\"evidence\":\"A key conflict means content changed, while an exact replay is already applied.\",\"confidence\":\"high\",\"sequence\":10}","reason":"Idempotency constrains retry behavior for every logical write.","scopes":["guide:kmp-agent:advanced:idempotency","guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:pagination:qualifies_as:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:advanced:pagination\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"Temporal and bounded reads are truthful only when their continuation is consumed or disclosed.\",\"evidence\":\"The live read responses expose has_more and an opaque next_cursor.\",\"confidence\":\"high\",\"sequence\":11}","reason":"Temporal and bounded reads are truthful only when their continuation is consumed or disclosed.","scopes":["guide:kmp-agent:advanced:pagination","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:lifecycle:uses_background:guide:kmp-agent:verb:ask","payload_json":"{\"from\":\"guide:kmp-agent:advanced:lifecycle\",\"to\":\"guide:kmp-agent:verb:ask\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"An answer must preserve whether older evidence was replaced, remains conflicting or merely expired.\",\"evidence\":\"Ask proof exposes superseded, conflicts and expired separately.\",\"confidence\":\"high\",\"sequence\":12}","reason":"An answer must preserve whether older evidence was replaced, remains conflicting or merely expired.","scopes":["guide:kmp-agent:advanced:lifecycle","guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_ask:uses_background:guide:kmp-agent:verb:ask","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_ask\",\"to\":\"guide:kmp-agent:verb:ask\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Retrieve stored entry text and evidence bearing on a question, or UNKNOWN. Nothing is generated: `answer` names what was retrieved and the text lives in `proof.evidence[].text` — `metadata.proof_role` distinguishes an entry claim from stored evidence. Read it and judge whether it answers. `proof.confidence` is lexical term overlap between the question and the best-matching memory item; it is not a judgement that the item answers, and it is not the `confidence` on a relation, which is writer certainty. UNKNOWN means memory did not answer; `summary` says whether nothing was retrieved or nothing retrieved bore on the question.\",\"confidence\":\"high\",\"sequence\":13}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_ask","guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_forward:uses_background:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_forward\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Move forward through memory from a timestamp, sequence, or ref. Entries and continuation pages are oldest-to-newest. Cursor parameter: `from`.\",\"confidence\":\"high\",\"sequence\":14}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_forward","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_goto:uses_background:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_goto\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Jump to memory state at a timestamp, sequence, or ref. Cursor parameter: `at`. When the result is partial, response.next_action continues earlier history with kmp_rewind; feeding page.next_cursor back to kmp_goto does not paginate.\",\"confidence\":\"high\",\"sequence\":15}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_goto","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_ingest:uses_background:guide:kmp-agent:verb:write","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_ingest\",\"to\":\"guide:kmp-agent:verb:write\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Low-level batch writer for callers producing the exact graph themselves. Prefer kmp_write_memory for ordinary agent writes because it validates intent and relation quality before compiling to this canonical ingest shape.\",\"confidence\":\"high\",\"sequence\":16}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_ingest","guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_inspect:uses_background:guide:kmp-agent:verb:audit","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_inspect\",\"to\":\"guide:kmp-agent:verb:audit\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Inspect one typed stored memory object inside an explicit about boundary. The object is stable; evidence, links and raw records page under the byte ceiling.\",\"confidence\":\"high\",\"sequence\":17}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_inspect","guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_near:uses_background:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_near\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Return the temporal neighborhood around a timestamp, sequence, or ref. Cursor parameter: `around`. A partial neighborhood continues through response.next_action with kmp_rewind and kmp_forward; feeding page.next_cursor back to kmp_near does not paginate.\",\"confidence\":\"high\",\"sequence\":18}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_near","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_rewind:uses_background:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_rewind\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Move backward through memory from a timestamp, sequence, or ref. Entries within each page are newest-to-oldest, so concatenating continuation pages stays globally descending. Cursor parameter: `from`.\",\"confidence\":\"high\",\"sequence\":19}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_rewind","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_trace:uses_background:guide:kmp-agent:verb:audit","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_trace\",\"to\":\"guide:kmp-agent:verb:audit\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Trace the proof path between two memory refs owned by one explicit about. Both refs are rejected before traversal unless they belong to that about.\",\"confidence\":\"high\",\"sequence\":20}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_trace","guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_view_apply_intent:uses_background:guide:kmp-agent:verb:view","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_view_apply_intent\",\"to\":\"guide:kmp-agent:verb:view\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Move the view by declaring what it should show — focus, clock axis, semantic zoom, dimensions, relation classes, selection, trace. Never pixels, coordinates or code. Atomic, idempotent, and under optimistic concurrency: if the person at the loom moved first, this conflicts and you rebase.\",\"confidence\":\"high\",\"sequence\":21}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_view_apply_intent","guide:kmp-agent:verb:view"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_view_get_state:uses_background:guide:kmp-agent:verb:view","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_view_get_state\",\"to\":\"guide:kmp-agent:verb:view\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Read the view's semantic state — clock, window, focus, zoom, filters, selection, revision and who last moved it. Returns this session's capability link when the local viewer is mounted; state, never pixels.\",\"confidence\":\"high\",\"sequence\":22}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_view_get_state","guide:kmp-agent:verb:view"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_view_open:uses_background:guide:kmp-agent:verb:view","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_view_open\",\"to\":\"guide:kmp-agent:verb:view\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Open or rehydrate a ChronoLoom view over an about, so a human and this agent look at the same loom. Returns this session's capability link when the local viewer is mounted. Read-only with respect to memory: a view is a camera position, not a record.\",\"confidence\":\"high\",\"sequence\":23}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_view_open","guide:kmp-agent:verb:view"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_wake:uses_background:guide:kmp-agent:verb:wake","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_wake\",\"to\":\"guide:kmp-agent:verb:wake\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Return a compact Kernel Memory Protocol wake packet for continuing work from memory.\",\"confidence\":\"high\",\"sequence\":24}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_wake","guide:kmp-agent:verb:wake"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_write_memory:uses_background:guide:kmp-agent:verb:write","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_write_memory\",\"to\":\"guide:kmp-agent:verb:write\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Write to memory. This is the writer to use: it validates intent and relation quality, then commits through canonical kmp_ingest. Normal writes are one call: omit `options.dry_run` or set it to false; validation failures write nothing. Set it to true only for an explicitly requested preview or payload debugging. Reach for kmp_ingest only when producing the exact graph yourself.\",\"confidence\":\"high\",\"sequence\":25}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_write_memory","guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:overview","payload_json":"{\"id\":\"evidence:guide:kmp-agent:overview\",\"supports\":[\"guide:kmp-agent:overview\"],\"text\":\"This is the agent-only operating contract shipped with the KMP plugin.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:overview"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:wake","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:wake\",\"supports\":[\"guide:kmp-agent:verb:wake\"],\"text\":\"The live kmp_wake contract returns an about-scoped continuation packet and resume cursor.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:wake"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:ask","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:ask\",\"supports\":[\"guide:kmp-agent:verb:ask\"],\"text\":\"The live kmp_ask contract retrieves stored evidence and never generates a fallback answer.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:time","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:time\",\"supports\":[\"guide:kmp-agent:verb:time\"],\"text\":\"The four live temporal contracts define direction, cursor field, ordering and continuation semantics separately.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:audit","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:audit\",\"supports\":[\"guide:kmp-agent:verb:audit\"],\"text\":\"The live inspect and trace contracts enforce an explicit about boundary and preserve proof.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:write","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:write\",\"supports\":[\"guide:kmp-agent:verb:write\"],\"text\":\"The live writer contract validates intent and relation quality before compiling to canonical ingest.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:view","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:view\",\"supports\":[\"guide:kmp-agent:verb:view\"],\"text\":\"The live view contracts make the view shared, semantic, optimistic and read-only with respect to memory.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:view"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:guide-sync","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:guide-sync\",\"supports\":[\"guide:kmp-agent:verb:guide-sync\"],\"text\":\"The plugin ships one content-addressed request set and a regular format-2 bundle for deterministic guide convergence.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:guide-sync"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:scope","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:scope\",\"supports\":[\"guide:kmp-agent:advanced:scope\"],\"text\":\"The live read schemas expose current_about, abouts and all_abouts as distinct cost and isolation choices.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:scope"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:relations","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:relations\",\"supports\":[\"guide:kmp-agent:advanced:relations\"],\"text\":\"The writer relation vocabulary distinguishes semantic meaning from fallback links and reports relation quality.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:relations"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:idempotency","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:idempotency\",\"supports\":[\"guide:kmp-agent:advanced:idempotency\"],\"text\":\"KMP binds idempotency keys to logical digests and preserves replay outcomes across export/import.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:idempotency"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:pagination","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:pagination\",\"supports\":[\"guide:kmp-agent:advanced:pagination\"],\"text\":\"Every bounded live read reports its own page unit, continuation and byte-budget guidance.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:pagination"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:lifecycle","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:lifecycle\",\"supports\":[\"guide:kmp-agent:advanced:lifecycle\"],\"text\":\"KMP proof separates superseded, conflicts and expired so an agent cannot flatten distinct lifecycles.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:lifecycle"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_ask","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_ask\",\"supports\":[\"guide:kmp-agent:tool:kmp_ask\"],\"text\":\"Retrieve stored entry text and evidence bearing on a question, or UNKNOWN. Nothing is generated: `answer` names what was retrieved and the text lives in `proof.evidence[].text` — `metadata.proof_role` distinguishes an entry claim from stored evidence. Read it and judge whether it answers. `proof.confidence` is lexical term overlap between the question and the best-matching memory item; it is not a judgement that the item answers, and it is not the `confidence` on a relation, which is writer certainty. UNKNOWN means memory did not answer; `summary` says whether nothing was retrieved or nothing retrieved bore on the question.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_ask"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_forward","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_forward\",\"supports\":[\"guide:kmp-agent:tool:kmp_forward\"],\"text\":\"Move forward through memory from a timestamp, sequence, or ref. Entries and continuation pages are oldest-to-newest. Cursor parameter: `from`.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_forward"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_goto","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_goto\",\"supports\":[\"guide:kmp-agent:tool:kmp_goto\"],\"text\":\"Jump to memory state at a timestamp, sequence, or ref. Cursor parameter: `at`. When the result is partial, response.next_action continues earlier history with kmp_rewind; feeding page.next_cursor back to kmp_goto does not paginate.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_goto"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_ingest","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_ingest\",\"supports\":[\"guide:kmp-agent:tool:kmp_ingest\"],\"text\":\"Low-level batch writer for callers producing the exact graph themselves. Prefer kmp_write_memory for ordinary agent writes because it validates intent and relation quality before compiling to this canonical ingest shape.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_ingest"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_inspect","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_inspect\",\"supports\":[\"guide:kmp-agent:tool:kmp_inspect\"],\"text\":\"Inspect one typed stored memory object inside an explicit about boundary. The object is stable; evidence, links and raw records page under the byte ceiling.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_inspect"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_near","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_near\",\"supports\":[\"guide:kmp-agent:tool:kmp_near\"],\"text\":\"Return the temporal neighborhood around a timestamp, sequence, or ref. Cursor parameter: `around`. A partial neighborhood continues through response.next_action with kmp_rewind and kmp_forward; feeding page.next_cursor back to kmp_near does not paginate.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_near"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_rewind","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_rewind\",\"supports\":[\"guide:kmp-agent:tool:kmp_rewind\"],\"text\":\"Move backward through memory from a timestamp, sequence, or ref. Entries within each page are newest-to-oldest, so concatenating continuation pages stays globally descending. Cursor parameter: `from`.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_rewind"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_trace","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_trace\",\"supports\":[\"guide:kmp-agent:tool:kmp_trace\"],\"text\":\"Trace the proof path between two memory refs owned by one explicit about. Both refs are rejected before traversal unless they belong to that about.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_trace"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_view_apply_intent","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_view_apply_intent\",\"supports\":[\"guide:kmp-agent:tool:kmp_view_apply_intent\"],\"text\":\"Move the view by declaring what it should show — focus, clock axis, semantic zoom, dimensions, relation classes, selection, trace. Never pixels, coordinates or code. Atomic, idempotent, and under optimistic concurrency: if the person at the loom moved first, this conflicts and you rebase.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_view_apply_intent"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_view_get_state","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_view_get_state\",\"supports\":[\"guide:kmp-agent:tool:kmp_view_get_state\"],\"text\":\"Read the view's semantic state — clock, window, focus, zoom, filters, selection, revision and who last moved it. Returns this session's capability link when the local viewer is mounted; state, never pixels.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_view_get_state"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_view_open","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_view_open\",\"supports\":[\"guide:kmp-agent:tool:kmp_view_open\"],\"text\":\"Open or rehydrate a ChronoLoom view over an about, so a human and this agent look at the same loom. Returns this session's capability link when the local viewer is mounted. Read-only with respect to memory: a view is a camera position, not a record.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_view_open"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_wake","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_wake\",\"supports\":[\"guide:kmp-agent:tool:kmp_wake\"],\"text\":\"Return a compact Kernel Memory Protocol wake packet for continuing work from memory.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_wake"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_write_memory","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_write_memory\",\"supports\":[\"guide:kmp-agent:tool:kmp_write_memory\"],\"text\":\"Write to memory. This is the writer to use: it validates intent and relation quality, then commits through canonical kmp_ingest. Normal writes are one call: omit `options.dry_run` or set it to false; validation failures write nothing. Set it to true only for an explicitly requested preview or payload debugging. Reach for kmp_ingest only when producing the exact graph yourself.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_write_memory"]}],"idempotency_key":"ingest:guide-sync:1:agent:5217c5b5da16ca00428a","logical_digest":"ccc37d89b5c6ee5c86f8f3e92e8450635e33a8ece1c6fff573aba0051c88ce6b","requested_by":"kmp-guide-builder","occurred_at":1787963436631} -{"root_node_id":"guide:kmp","role":"memory","revision":1,"content_hash":"57dc000f21dbe195cb12fecff59f0e3bc561cd36c5cbbd189064276890f71cfa","changes":[{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp:dimension:timeline","payload_json":"{\"id\":\"about:guide:kmp:dimension:timeline\",\"kind\":\"timeline\",\"title\":\"Guide order\",\"metadata\":{\"memory_about\":\"guide:kmp\",\"memory_dimension_id\":\"timeline\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp:dimension:timeline"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp:dimension:audience-person","payload_json":"{\"id\":\"about:guide:kmp:dimension:audience-person\",\"kind\":\"audience\",\"title\":\"person\",\"metadata\":{\"memory_about\":\"guide:kmp\",\"memory_dimension_id\":\"audience-person\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp:dimension:audience-person"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp:dimension:depth-basic","payload_json":"{\"id\":\"about:guide:kmp:dimension:depth-basic\",\"kind\":\"depth\",\"title\":\"Basic\",\"metadata\":{\"memory_about\":\"guide:kmp\",\"memory_dimension_id\":\"depth-basic\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp:dimension:depth-advanced","payload_json":"{\"id\":\"about:guide:kmp:dimension:depth-advanced\",\"kind\":\"depth\",\"title\":\"Advanced\",\"metadata\":{\"memory_about\":\"guide:kmp\",\"memory_dimension_id\":\"depth-advanced\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:welcome","payload_json":"{\"id\":\"guide:kmp:welcome\",\"kind\":\"guide\",\"text\":\"KMP remembers why. This is the human guide: five short ideas first, then the deeper mechanics when you want them. Ask your agent to run open:guide whenever you want this view back.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875200:000000000\",\"observed_at\":\"unix:101787875200:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":1},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":1},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":1}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:basic:memory","payload_json":"{\"id\":\"guide:kmp:basic:memory\",\"kind\":\"concept\",\"text\":\"KMP stores durable decisions and evidence, not transcripts. The useful unit is what changed, why it changed and what proves it.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875260:000000000\",\"observed_at\":\"unix:101787875260:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":2},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":2},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":2}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:basic:local","payload_json":"{\"id\":\"guide:kmp:basic:local\",\"kind\":\"concept\",\"text\":\"Embedded KMP runs on your machine. Codex and Claude Code can use the same local SQLite store; no KMP account or hosted memory service is required.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875320:000000000\",\"observed_at\":\"unix:101787875320:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":3},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":3},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":3}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:basic:inherit","payload_json":"{\"id\":\"guide:kmp:basic:inherit\",\"kind\":\"concept\",\"text\":\"A repository can publish selected project memory in .kmp/memory.jsonl. A clone inherits that reviewed bundle; private abouts in a shared user store stay out unless explicitly exported.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875380:000000000\",\"observed_at\":\"unix:101787875380:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":4},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":4},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":4}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:basic:open","payload_json":"{\"id\":\"guide:kmp:basic:open\",\"kind\":\"instruction\",\"text\":\"Say: show me the memory behind this decision. The agent retrieves the evidence, opens ChronoLoom and moves the shared view to the relevant entry or proof path. You can click, filter, pan, undo or take control.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875440:000000000\",\"observed_at\":\"unix:101787875440:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":5},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":5},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":5}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:clocks","payload_json":"{\"id\":\"guide:kmp:advanced:clocks\",\"kind\":\"concept\",\"text\":\"The difference between occurred and observed time is the event boundary versus the knowledge boundary. KMP keeps four clocks because they answer different questions. Occurred time is when the event happened. Observed time is when a source or agent learned it. Ingested time is when the kernel committed it. Validity is the interval in which a state applies.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875500:000000000\",\"observed_at\":\"unix:101787875500:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":6},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":6},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":6}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:supersession","payload_json":"{\"id\":\"guide:kmp:advanced:supersession\",\"kind\":\"concept\",\"text\":\"Supersession is not contradiction. A superseding memory replaces an older state and keeps the old reasoning as history. A contradiction leaves two live claims in tension until something resolves them.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875560:000000000\",\"observed_at\":\"unix:101787875560:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":7},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":7},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":7}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:snapshots","payload_json":"{\"id\":\"guide:kmp:advanced:snapshots\",\"kind\":\"concept\",\"text\":\"Named snapshots are deliberate recovery points. Content-addressed exports are deterministic heads. Bundle merge only fast-forwards identical history or an exact prefix; KMP refuses to invent order for divergent branches.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875620:000000000\",\"observed_at\":\"unix:101787875620:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":8},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":8},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":8}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:shared-store","payload_json":"{\"id\":\"guide:kmp:advanced:shared-store\",\"kind\":\"concept\",\"text\":\"Two hosts can share one embedded store. SQLite WAL allows independent Codex and Claude processes to read and write while optimistic revisions and idempotency protect semantic updates.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875680:000000000\",\"observed_at\":\"unix:101787875680:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":9},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":9},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":9}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:publish","payload_json":"{\"id\":\"guide:kmp:advanced:publish\",\"kind\":\"constraint\",\"text\":\"Committing a bundle publishes the selected abouts to everyone who can read the repository. Export exact abouts deliberately; a full export from a shared user store can contain unrelated or private memory.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875740:000000000\",\"observed_at\":\"unix:101787875740:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":10},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":10},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":10}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:viewer","payload_json":"{\"id\":\"guide:kmp:advanced:viewer\",\"kind\":\"constraint\",\"text\":\"ChronoLoom is local and capability-protected. The process binds to loopback, exchanges a random one-session URL capability for an HttpOnly cookie, and removes the token from the address. Moving the view never writes memory.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875800:000000000\",\"observed_at\":\"unix:101787875800:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":11},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":11},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":11}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:plain-file","payload_json":"{\"id\":\"guide:kmp:advanced:plain-file\",\"kind\":\"constraint\",\"text\":\"Use a plain file when the information is canonical prose, a large artifact or something people should edit directly. Use KMP when time, evidence, typed relations, supersession or cross-session recovery are part of the meaning.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875860:000000000\",\"observed_at\":\"unix:101787875860:000000000\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":12},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":12},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101787963436:668391344\",\"sequence\":12}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:basic:memory:follows:guide:kmp:welcome","payload_json":"{\"from\":\"guide:kmp:basic:memory\",\"to\":\"guide:kmp:welcome\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"The first idea defines what KMP keeps before the guide explains where it lives.\",\"evidence\":\"The human guide is ordered from product meaning to operation.\",\"confidence\":\"high\",\"sequence\":1}","reason":"The first idea defines what KMP keeps before the guide explains where it lives.","scopes":["guide:kmp:basic:memory","guide:kmp:welcome"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:basic:local:follows:guide:kmp:basic:memory","payload_json":"{\"from\":\"guide:kmp:basic:local\",\"to\":\"guide:kmp:basic:memory\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"After defining the memory, the next question is where it runs and who can share it.\",\"evidence\":\"Embedded SQLite is the default user path.\",\"confidence\":\"high\",\"sequence\":2}","reason":"After defining the memory, the next question is where it runs and who can share it.","scopes":["guide:kmp:basic:local","guide:kmp:basic:memory"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:basic:inherit:follows:guide:kmp:basic:local","payload_json":"{\"from\":\"guide:kmp:basic:inherit\",\"to\":\"guide:kmp:basic:local\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"Repository bundles explain how selected local memory crosses a clone boundary.\",\"evidence\":\"The portable event bundle is distinct from the live local SQLite store.\",\"confidence\":\"high\",\"sequence\":3}","reason":"Repository bundles explain how selected local memory crosses a clone boundary.","scopes":["guide:kmp:basic:inherit","guide:kmp:basic:local"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:basic:open:follows:guide:kmp:basic:inherit","payload_json":"{\"from\":\"guide:kmp:basic:open\",\"to\":\"guide:kmp:basic:inherit\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"The basic path ends by showing how a person asks the agent to make stored memory visible.\",\"evidence\":\"open:guide and ordinary show-memory requests use the shared ChronoLoom view.\",\"confidence\":\"high\",\"sequence\":4}","reason":"The basic path ends by showing how a person asks the agent to make stored memory visible.","scopes":["guide:kmp:basic:open","guide:kmp:basic:inherit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:clocks:uses_background:guide:kmp:basic:memory","payload_json":"{\"from\":\"guide:kmp:advanced:clocks\",\"to\":\"guide:kmp:basic:memory\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The four clocks add temporal precision to the basic definition of durable memory.\",\"evidence\":\"Memory entries carry distinct occurrence, observation, ingestion and validity coordinates.\",\"confidence\":\"high\",\"sequence\":5}","reason":"The four clocks add temporal precision to the basic definition of durable memory.","scopes":["guide:kmp:advanced:clocks","guide:kmp:basic:memory"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:supersession:uses_background:guide:kmp:advanced:clocks","payload_json":"{\"from\":\"guide:kmp:advanced:supersession\",\"to\":\"guide:kmp:advanced:clocks\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Lifecycle interpretation depends on knowing which clock and validity window are being read.\",\"evidence\":\"Superseded, conflicting and expired states are selected against temporal coordinates.\",\"confidence\":\"high\",\"sequence\":6}","reason":"Lifecycle interpretation depends on knowing which clock and validity window are being read.","scopes":["guide:kmp:advanced:supersession","guide:kmp:advanced:clocks"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:snapshots:uses_background:guide:kmp:basic:inherit","payload_json":"{\"from\":\"guide:kmp:advanced:snapshots\",\"to\":\"guide:kmp:basic:inherit\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Snapshot and merge rules deepen the basic repository inheritance story.\",\"evidence\":\"Bundles are verified portable event histories rather than database copies.\",\"confidence\":\"high\",\"sequence\":7}","reason":"Snapshot and merge rules deepen the basic repository inheritance story.","scopes":["guide:kmp:advanced:snapshots","guide:kmp:basic:inherit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:shared-store:uses_background:guide:kmp:basic:local","payload_json":"{\"from\":\"guide:kmp:advanced:shared-store\",\"to\":\"guide:kmp:basic:local\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Multi-host concurrency is the advanced form of the basic local SQLite claim.\",\"evidence\":\"The same WAL store is safe for independent local agent processes.\",\"confidence\":\"high\",\"sequence\":8}","reason":"Multi-host concurrency is the advanced form of the basic local SQLite claim.","scopes":["guide:kmp:advanced:shared-store","guide:kmp:basic:local"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:publish:qualifies_as:guide:kmp:basic:inherit","payload_json":"{\"from\":\"guide:kmp:advanced:publish\",\"to\":\"guide:kmp:basic:inherit\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"Publication scope constrains what a committed repository bundle may reveal.\",\"evidence\":\"Exact-about export exists so a shared store is not published wholesale.\",\"confidence\":\"high\",\"sequence\":9}","reason":"Publication scope constrains what a committed repository bundle may reveal.","scopes":["guide:kmp:advanced:publish","guide:kmp:basic:inherit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:viewer:qualifies_as:guide:kmp:basic:open","payload_json":"{\"from\":\"guide:kmp:advanced:viewer\",\"to\":\"guide:kmp:basic:open\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"The capability model explains the security boundary behind the simple open gesture.\",\"evidence\":\"ChronoLoom uses a loopback one-session capability and read-only semantic state.\",\"confidence\":\"high\",\"sequence\":10}","reason":"The capability model explains the security boundary behind the simple open gesture.","scopes":["guide:kmp:advanced:viewer","guide:kmp:basic:open"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:plain-file:qualifies_as:guide:kmp:basic:memory","payload_json":"{\"from\":\"guide:kmp:advanced:plain-file\",\"to\":\"guide:kmp:basic:memory\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"A good memory system must say what should remain ordinary documentation.\",\"evidence\":\"Canonical prose and large directly edited artifacts do not need graph-temporal semantics.\",\"confidence\":\"high\",\"sequence\":11}","reason":"A good memory system must say what should remain ordinary documentation.","scopes":["guide:kmp:advanced:plain-file","guide:kmp:basic:memory"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:welcome","payload_json":"{\"id\":\"evidence:guide:kmp:welcome\",\"supports\":[\"guide:kmp:welcome\"],\"text\":\"This is the person-facing guide shipped with the KMP plugin.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:welcome"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:basic:memory","payload_json":"{\"id\":\"evidence:guide:kmp:basic:memory\",\"supports\":[\"guide:kmp:basic:memory\"],\"text\":\"The public product contract defines memory as decisions and evidence rather than conversation logs.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:basic:memory"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:basic:local","payload_json":"{\"id\":\"evidence:guide:kmp:basic:local\",\"supports\":[\"guide:kmp:basic:local\"],\"text\":\"The embedded engine selects SQLite in WAL mode and the viewer binds to loopback.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:basic:local"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:basic:inherit","payload_json":"{\"id\":\"evidence:guide:kmp:basic:inherit\",\"supports\":[\"guide:kmp:basic:inherit\"],\"text\":\"Format-2 filtered export names exact abouts and import replays only the committed event stream.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:basic:inherit"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:basic:open","payload_json":"{\"id\":\"evidence:guide:kmp:basic:open\",\"supports\":[\"guide:kmp:basic:open\"],\"text\":\"The three semantic view tools share one revisioned ChronoLoom state between agent and person.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:basic:open"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:clocks","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:clocks\",\"supports\":[\"guide:kmp:advanced:clocks\"],\"text\":\"The memory coordinate contract stores occurred_at, observed_at, ingested_at, valid_from and exclusive valid_until separately.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:clocks"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:supersession","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:supersession\",\"supports\":[\"guide:kmp:advanced:supersession\"],\"text\":\"KMP proof reports superseded entries and live conflicts in separate fields.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:supersession"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:snapshots","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:snapshots\",\"supports\":[\"guide:kmp:advanced:snapshots\"],\"text\":\"The format-2 bundle contract binds content digest, about coverage and event range before import or merge.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:snapshots"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:shared-store","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:shared-store\",\"supports\":[\"guide:kmp:advanced:shared-store\"],\"text\":\"The embedded concurrency gates run two processes against one SQLite store and require both writers to enter without losing events.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:shared-store"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:publish","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:publish\",\"supports\":[\"guide:kmp:advanced:publish\"],\"text\":\"Filtered export accepts repeatable exact abouts and refuses missing selections before writing the destination.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:publish"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:viewer","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:viewer\",\"supports\":[\"guide:kmp:advanced:viewer\"],\"text\":\"The viewer and MCP App contracts separate read-only view state from memory writes and do not advertise a bare unauthorised URL.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:viewer"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:plain-file","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:plain-file\",\"supports\":[\"guide:kmp:advanced:plain-file\"],\"text\":\"KMP is graph-temporal operational memory; it is not a replacement for source files or documentation.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:plain-file"]}],"idempotency_key":"ingest:guide-sync:1:person:a542c59caf493c9b22ff","logical_digest":"7706c8019d0735f3e81ae1fa52afdc3cf6ad62a2d8a6379424a661da19146a19","requested_by":"kmp-guide-builder","occurred_at":1787963436672} +{"bundle_format":2,"event_format":1,"event_count":2,"kernel_version":"0.5.1","snapshot_id":"content-b99d18f6f0139b30","created_at_unix_ms":1788007709436,"event_range":{"first":1,"last":2},"abouts":["guide:kmp","guide:kmp-agent"],"content_digest":"sha256:b99d18f6f0139b30861f1e30b46522e9b58b5f697ae211fb22d8278ace62fb10"} +{"root_node_id":"guide:kmp-agent","role":"memory","revision":1,"content_hash":"bb64352ac72fa60bc855a010bfc1991e17327ddb172ea27b581d06e22831d2cf","changes":[{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp-agent:dimension:timeline","payload_json":"{\"id\":\"about:guide:kmp-agent:dimension:timeline\",\"kind\":\"timeline\",\"title\":\"Guide order\",\"metadata\":{\"memory_about\":\"guide:kmp-agent\",\"memory_dimension_id\":\"timeline\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp-agent:dimension:timeline"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp-agent:dimension:audience-agent","payload_json":"{\"id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"kind\":\"audience\",\"title\":\"agent\",\"metadata\":{\"memory_about\":\"guide:kmp-agent\",\"memory_dimension_id\":\"audience-agent\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp-agent:dimension:audience-agent"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp-agent:dimension:depth-basic","payload_json":"{\"id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"kind\":\"depth\",\"title\":\"Basic\",\"metadata\":{\"memory_about\":\"guide:kmp-agent\",\"memory_dimension_id\":\"depth-basic\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp-agent:dimension:depth-advanced","payload_json":"{\"id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"kind\":\"depth\",\"title\":\"Advanced\",\"metadata\":{\"memory_about\":\"guide:kmp-agent\",\"memory_dimension_id\":\"depth-advanced\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:overview","payload_json":"{\"id\":\"guide:kmp-agent:overview\",\"kind\":\"instruction\",\"text\":\"KMP agent guide. Treat KMP as evidence-backed graph-temporal memory, not a model and not a transcript store. Choose a verb from the user's intent, copy abouts and refs byte-for-byte, and let each result select the next verb.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875200:000000000\",\"observed_at\":\"unix:101787875200:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":1},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":1},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":1}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:wake","payload_json":"{\"id\":\"guide:kmp-agent:verb:wake\",\"kind\":\"instruction\",\"text\":\"VERB wake. Use kmp_wake before re-deriving known work. Do not use it as an all-abouts search. Minimum input: the exact about. Expect: compact current state, causal spine, open loops, next actions and a resume cursor. Next: inspect or trace consequential refs; use the cursor to move forward when catching up.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875260:000000000\",\"observed_at\":\"unix:101787875260:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":2},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":2},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":2}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:ask","payload_json":"{\"id\":\"guide:kmp-agent:verb:ask\",\"kind\":\"instruction\",\"text\":\"VERB ask. Use kmp_ask for a genuinely semantic question that stored evidence can answer. Do not use it for yesterday, since, current, latest, before or after. Minimum input: exact about and natural-language question. Expect: cited stored text or UNKNOWN. Next: inspect a relied-on ref, trace a relied-on connection, or stop honestly at UNKNOWN after the bounded language policy.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875320:000000000\",\"observed_at\":\"unix:101787875320:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":3},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":3},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":3}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:time","payload_json":"{\"id\":\"guide:kmp-agent:verb:time\",\"kind\":\"instruction\",\"text\":\"VERB navigate time. Use kmp_goto for state at a point, kmp_near for its neighborhood, kmp_rewind for earlier history and kmp_forward for later history. Temporal intent beats Ask. Minimum input: exact about plus timestamp, sequence or ref cursor. Expect: ordered entries and page.has_more. Next: consume the exact cursor with the verb named by next_action until the interval is complete.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875380:000000000\",\"observed_at\":\"unix:101787875380:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":4},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":4},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":4}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:audit","payload_json":"{\"id\":\"guide:kmp-agent:verb:audit\",\"kind\":\"instruction\",\"text\":\"VERB audit. Use kmp_inspect when one ref must support a claim; use kmp_trace when the connection between two refs is itself the claim. Do not guess or rebuild refs. Minimum input: exact about and exact returned refs. Expect: canonical object, evidence and links, or an ordered proof path. Next: follow pagination and cite stored evidence byte-for-byte.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875440:000000000\",\"observed_at\":\"unix:101787875440:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":5},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":5},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":5}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:write","payload_json":"{\"id\":\"guide:kmp-agent:verb:write\",\"kind\":\"instruction\",\"text\":\"VERB write. Use kmp_write_memory when a durable decision, constraint or outcome is reached. Use low-level kmp_ingest only when producing the exact graph. Do not store transcripts. Minimum input: exact about, intent, actor, observed time, scope, current fact and direct evidence. Expect: validated relation quality and read-after-write readiness. Next: inspect the generated ref when the write matters.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875500:000000000\",\"observed_at\":\"unix:101787875500:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":6},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":6},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":6}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:view","payload_json":"{\"id\":\"guide:kmp-agent:verb:view\",\"kind\":\"instruction\",\"text\":\"VERB show. Retrieval comes first; then use kmp_view_open once, kmp_view_apply_intent to declare semantic focus, and kmp_view_get_state before continuing. Do not send pixels or reopen to navigate. Minimum input: exact about, then a content-derived intent key and current view revision. Expect: a shared ChronoLoom state and capability URL. Next: rebase on a revision conflict or continue from the person's latest state.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875560:000000000\",\"observed_at\":\"unix:101787875560:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":7},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":7},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":7}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:verb:guide-sync","payload_json":"{\"id\":\"guide:kmp-agent:verb:guide-sync\",\"kind\":\"instruction\",\"text\":\"VERB guide sync. Use the shipped kmp-guide-sync.sh when setup, update or an explicit guide request must converge the installed guide. It is lifecycle work, not an MCP memory verb. Do not improvise guide entries. Minimum input: the matching installed engine and guide assets. Expect: the fixed guide abouts applied idempotently. Next: wake guide:kmp-agent for agent guidance or run open:guide for the human view.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875620:000000000\",\"observed_at\":\"unix:101787875620:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":8},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":8},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":8}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:scope","payload_json":"{\"id\":\"guide:kmp-agent:advanced:scope\",\"kind\":\"constraint\",\"text\":\"Cross-about reads are explicit. dimensions.scope=current_about is the safe default. Use scope=abouts with a non-empty abouts list when the question deliberately combines memories; all_abouts is a real sweep. Abouts are opaque identifiers and are never joined by relations.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875680:000000000\",\"observed_at\":\"unix:101787875680:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":9},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":9},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":9}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:relations","payload_json":"{\"id\":\"guide:kmp-agent:advanced:relations\",\"kind\":\"constraint\",\"text\":\"Relations carry the why. A rich relation has a specific type, semantic class, why, concrete evidence and confidence. Use follows/procedural, answers/evidential or uses_background/evidential only as honest anemic fallbacks. Never invent rationale to satisfy a schema.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875740:000000000\",\"observed_at\":\"unix:101787875740:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":10},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":10},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":10}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:idempotency","payload_json":"{\"id\":\"guide:kmp-agent:advanced:idempotency\",\"kind\":\"constraint\",\"text\":\"One idempotency key names one logical write or view intent. An exact retry with the same key is success without a duplicate. Reusing a key for different content is a conflict and must not be worked around by blind retry.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875800:000000000\",\"observed_at\":\"unix:101787875800:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":11},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":11},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":11}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:pagination","payload_json":"{\"id\":\"guide:kmp-agent:advanced:pagination\",\"kind\":\"constraint\",\"text\":\"A partial read is not the whole answer. Follow page.next_cursor with every bound argument unchanged; wake and Ask page expansion items, temporal verbs page entries, trace pages relations, and inspect pages details, evidence and links. required_bytes is negotiation guidance, not a reason to probe budgets repeatedly.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875860:000000000\",\"observed_at\":\"unix:101787875860:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":12},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":12},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":12}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:advanced:lifecycle","payload_json":"{\"id\":\"guide:kmp-agent:advanced:lifecycle\",\"kind\":\"instruction\",\"text\":\"Supersession, contradiction and expiry mean different things. supersedes says a later state replaces an older one while preserving history and why. contradicts keeps two live claims in tension. valid_until ends applicability without requiring a replacement.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875920:000000000\",\"observed_at\":\"unix:101787875920:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":13},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":13},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":13}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_ask","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_ask\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_ask. Retrieve stored entry text and evidence bearing on a question, or UNKNOWN. Nothing is generated: `answer` names what was retrieved and the text lives in `proof.evidence[].text` — `metadata.proof_role` distinguishes an entry claim from stored evidence. Read it and judge whether it answers. `proof.confidence` is lexical term overlap between the question and the best-matching memory item; it is not a judgement that the item answers, and it is not the `confidence` on a relation, which is writer certainty. UNKNOWN means memory did not answer; `summary` says whether nothing was retrieved or nothing retrieved bore on the question.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787875980:000000000\",\"observed_at\":\"unix:101787875980:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":14},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":14},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":14}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_ask\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_forward","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_forward\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_forward. Move forward through memory from a timestamp, sequence, or ref. Entries and continuation pages are oldest-to-newest. Cursor parameter: `from`.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876040:000000000\",\"observed_at\":\"unix:101787876040:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":15},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":15},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":15}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_forward\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_goto","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_goto\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_goto. Jump to memory state at a timestamp, sequence, or ref. Cursor parameter: `at`. When the result is partial, response.next_action continues earlier history with kmp_rewind; feeding page.next_cursor back to kmp_goto does not paginate.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876100:000000000\",\"observed_at\":\"unix:101787876100:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":16},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":16},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":16}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_goto\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_ingest","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_ingest\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_ingest. Low-level batch writer for callers producing the exact graph themselves. Prefer kmp_write_memory for ordinary agent writes because it validates intent and relation quality before compiling to this canonical ingest shape.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876160:000000000\",\"observed_at\":\"unix:101787876160:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":17},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":17},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":17}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_ingest\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_inspect","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_inspect\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_inspect. Inspect one typed stored memory object inside an explicit about boundary. The object is stable; evidence, links and raw records page under the byte ceiling.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876220:000000000\",\"observed_at\":\"unix:101787876220:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":18},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":18},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":18}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_inspect\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_near","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_near\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_near. Return the temporal neighborhood around a timestamp, sequence, or ref. Cursor parameter: `around`. A partial neighborhood continues through response.next_action with kmp_rewind and kmp_forward; feeding page.next_cursor back to kmp_near does not paginate.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876280:000000000\",\"observed_at\":\"unix:101787876280:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":19},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":19},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":19}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_near\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_rewind","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_rewind\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_rewind. Move backward through memory from a timestamp, sequence, or ref. Entries within each page are newest-to-oldest, so concatenating continuation pages stays globally descending. Cursor parameter: `from`.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876340:000000000\",\"observed_at\":\"unix:101787876340:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":20},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":20},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":20}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_rewind\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_trace","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_trace\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_trace. Trace the proof path between two memory refs owned by one explicit about. Both refs are rejected before traversal unless they belong to that about.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876400:000000000\",\"observed_at\":\"unix:101787876400:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":21},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":21},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":21}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_trace\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_view_apply_intent","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_view_apply_intent\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_view_apply_intent. Move the view by declaring what it should show — focus, clock axis, semantic zoom, dimensions, relation classes, selection, trace. Never pixels, coordinates or code. Atomic, idempotent, and under optimistic concurrency: if the person at the loom moved first, this conflicts and you rebase.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876460:000000000\",\"observed_at\":\"unix:101787876460:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":22},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":22},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":22}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_view_apply_intent\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_view_get_state","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_view_get_state\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_view_get_state. Read the view's semantic state — clock, window, focus, zoom, filters, selection, revision and who last moved it. Returns this session's capability link when the local viewer is mounted; state, never pixels.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876520:000000000\",\"observed_at\":\"unix:101787876520:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":23},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":23},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":23}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_view_get_state\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_view_open","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_view_open\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_view_open. Open or rehydrate a ChronoLoom view over an about, so a human and this agent look at the same loom. Returns this session's capability link when the local viewer is mounted. Read-only with respect to memory: a view is a camera position, not a record.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876580:000000000\",\"observed_at\":\"unix:101787876580:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":24},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":24},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":24}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_view_open\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_wake","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_wake\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_wake. Return a compact Kernel Memory Protocol wake packet for continuing work from memory.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876640:000000000\",\"observed_at\":\"unix:101787876640:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":25},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":25},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":25}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_wake\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp-agent:tool:kmp_write_memory","payload_json":"{\"id\":\"guide:kmp-agent:tool:kmp_write_memory\",\"kind\":\"reference\",\"text\":\"LIVE TOOL kmp_write_memory. Write to memory. This is the writer to use: it validates intent and relation quality, then commits through canonical kmp_ingest. Normal writes are one call: omit `options.dry_run` or set it to false; validation failures write nothing. Set it to true only for an explicitly requested preview or payload debugging. Reach for kmp_ingest only when producing the exact graph yourself.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp-agent:dimension:timeline\",\"occurred_at\":\"unix:101787876700:000000000\",\"observed_at\":\"unix:101787876700:000000000\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":26},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp-agent:dimension:audience-agent\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":26},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp-agent:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:407878802\",\"sequence\":26}],\"metadata\":{\"audience\":\"agent\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"tools/list\",\"tool_name\":\"kmp_write_memory\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp-agent:dimension:timeline","about:guide:kmp-agent:dimension:audience-agent","about:guide:kmp-agent:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:wake:follows:guide:kmp-agent:overview","payload_json":"{\"from\":\"guide:kmp-agent:verb:wake\",\"to\":\"guide:kmp-agent:overview\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"Wake is the entry verb because known work must be recovered before any narrower route is chosen.\",\"evidence\":\"The agent guide overview requires recovery before re-derivation.\",\"confidence\":\"high\",\"sequence\":1}","reason":"Wake is the entry verb because known work must be recovered before any narrower route is chosen.","scopes":["guide:kmp-agent:verb:wake","guide:kmp-agent:overview"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:ask:uses_background:guide:kmp-agent:verb:wake","payload_json":"{\"from\":\"guide:kmp-agent:verb:ask\",\"to\":\"guide:kmp-agent:verb:wake\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Semantic Ask is chosen only after wake establishes the exact about and leaves a genuinely semantic gap.\",\"evidence\":\"Wake returns current state; Ask retrieves evidence for the remaining non-temporal question.\",\"confidence\":\"high\",\"sequence\":2}","reason":"Semantic Ask is chosen only after wake establishes the exact about and leaves a genuinely semantic gap.","scopes":["guide:kmp-agent:verb:ask","guide:kmp-agent:verb:wake"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:time:corrects:guide:kmp-agent:verb:ask","payload_json":"{\"from\":\"guide:kmp-agent:verb:time\",\"to\":\"guide:kmp-agent:verb:ask\",\"rel\":\"corrects\",\"class\":\"procedural\",\"why\":\"Temporal navigation corrects the route when the original request concerns change or a time boundary rather than semantic relevance.\",\"evidence\":\"The live router contract gives temporal intent precedence over Ask.\",\"confidence\":\"high\",\"sequence\":3}","reason":"Temporal navigation corrects the route when the original request concerns change or a time boundary rather than semantic relevance.","scopes":["guide:kmp-agent:verb:time","guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:audit:uses_background:guide:kmp-agent:verb:ask","payload_json":"{\"from\":\"guide:kmp-agent:verb:audit\",\"to\":\"guide:kmp-agent:verb:ask\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Inspection or tracing audits the exact refs retained by semantic retrieval.\",\"evidence\":\"Ask returns refs; inspect and trace preserve their stored proof.\",\"confidence\":\"high\",\"sequence\":4}","reason":"Inspection or tracing audits the exact refs retained by semantic retrieval.","scopes":["guide:kmp-agent:verb:audit","guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:write:uses_background:guide:kmp-agent:verb:audit","payload_json":"{\"from\":\"guide:kmp-agent:verb:write\",\"to\":\"guide:kmp-agent:verb:audit\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"A related durable write should be grounded in refs the agent actually read rather than reconstructed context.\",\"evidence\":\"Strict writer validation accepts read_context as the audit of prior reads.\",\"confidence\":\"high\",\"sequence\":5}","reason":"A related durable write should be grounded in refs the agent actually read rather than reconstructed context.","scopes":["guide:kmp-agent:verb:write","guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:view:follows:guide:kmp-agent:verb:audit","payload_json":"{\"from\":\"guide:kmp-agent:verb:view\",\"to\":\"guide:kmp-agent:verb:audit\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"The visual lane frames retrieved proof only after the memory lane has selected it.\",\"evidence\":\"ChronoLoom state is a camera position and is not itself proof.\",\"confidence\":\"high\",\"sequence\":6}","reason":"The visual lane frames retrieved proof only after the memory lane has selected it.","scopes":["guide:kmp-agent:verb:view","guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:verb:guide-sync:updates_state:guide:kmp-agent:overview","payload_json":"{\"from\":\"guide:kmp-agent:verb:guide-sync\",\"to\":\"guide:kmp-agent:overview\",\"rel\":\"updates_state\",\"class\":\"procedural\",\"why\":\"Guide sync converges the shipped operating contract before either audience reads it.\",\"evidence\":\"The guide requests use stable refs and content-derived idempotency keys.\",\"confidence\":\"high\",\"sequence\":7}","reason":"Guide sync converges the shipped operating contract before either audience reads it.","scopes":["guide:kmp-agent:verb:guide-sync","guide:kmp-agent:overview"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:scope:qualifies_as:guide:kmp-agent:verb:wake","payload_json":"{\"from\":\"guide:kmp-agent:advanced:scope\",\"to\":\"guide:kmp-agent:verb:wake\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"About scope constrains which memories any wake or later read is allowed to cross.\",\"evidence\":\"Read schemas default to current_about and require explicit broader scope.\",\"confidence\":\"high\",\"sequence\":8}","reason":"About scope constrains which memories any wake or later read is allowed to cross.","scopes":["guide:kmp-agent:advanced:scope","guide:kmp-agent:verb:wake"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:relations:qualifies_as:guide:kmp-agent:verb:write","payload_json":"{\"from\":\"guide:kmp-agent:advanced:relations\",\"to\":\"guide:kmp-agent:verb:write\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"Relation quality determines whether a write preserves an auditable why or only adjacency.\",\"evidence\":\"The writer reports rich versus anemic relation quality.\",\"confidence\":\"high\",\"sequence\":9}","reason":"Relation quality determines whether a write preserves an auditable why or only adjacency.","scopes":["guide:kmp-agent:advanced:relations","guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:idempotency:qualifies_as:guide:kmp-agent:verb:write","payload_json":"{\"from\":\"guide:kmp-agent:advanced:idempotency\",\"to\":\"guide:kmp-agent:verb:write\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"Idempotency constrains retry behavior for every logical write.\",\"evidence\":\"A key conflict means content changed, while an exact replay is already applied.\",\"confidence\":\"high\",\"sequence\":10}","reason":"Idempotency constrains retry behavior for every logical write.","scopes":["guide:kmp-agent:advanced:idempotency","guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:pagination:qualifies_as:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:advanced:pagination\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"Temporal and bounded reads are truthful only when their continuation is consumed or disclosed.\",\"evidence\":\"The live read responses expose has_more and an opaque next_cursor.\",\"confidence\":\"high\",\"sequence\":11}","reason":"Temporal and bounded reads are truthful only when their continuation is consumed or disclosed.","scopes":["guide:kmp-agent:advanced:pagination","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:advanced:lifecycle:uses_background:guide:kmp-agent:verb:ask","payload_json":"{\"from\":\"guide:kmp-agent:advanced:lifecycle\",\"to\":\"guide:kmp-agent:verb:ask\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"An answer must preserve whether older evidence was replaced, remains conflicting or merely expired.\",\"evidence\":\"Ask proof exposes superseded, conflicts and expired separately.\",\"confidence\":\"high\",\"sequence\":12}","reason":"An answer must preserve whether older evidence was replaced, remains conflicting or merely expired.","scopes":["guide:kmp-agent:advanced:lifecycle","guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_ask:uses_background:guide:kmp-agent:verb:ask","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_ask\",\"to\":\"guide:kmp-agent:verb:ask\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Retrieve stored entry text and evidence bearing on a question, or UNKNOWN. Nothing is generated: `answer` names what was retrieved and the text lives in `proof.evidence[].text` — `metadata.proof_role` distinguishes an entry claim from stored evidence. Read it and judge whether it answers. `proof.confidence` is lexical term overlap between the question and the best-matching memory item; it is not a judgement that the item answers, and it is not the `confidence` on a relation, which is writer certainty. UNKNOWN means memory did not answer; `summary` says whether nothing was retrieved or nothing retrieved bore on the question.\",\"confidence\":\"high\",\"sequence\":13}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_ask","guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_forward:uses_background:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_forward\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Move forward through memory from a timestamp, sequence, or ref. Entries and continuation pages are oldest-to-newest. Cursor parameter: `from`.\",\"confidence\":\"high\",\"sequence\":14}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_forward","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_goto:uses_background:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_goto\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Jump to memory state at a timestamp, sequence, or ref. Cursor parameter: `at`. When the result is partial, response.next_action continues earlier history with kmp_rewind; feeding page.next_cursor back to kmp_goto does not paginate.\",\"confidence\":\"high\",\"sequence\":15}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_goto","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_ingest:uses_background:guide:kmp-agent:verb:write","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_ingest\",\"to\":\"guide:kmp-agent:verb:write\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Low-level batch writer for callers producing the exact graph themselves. Prefer kmp_write_memory for ordinary agent writes because it validates intent and relation quality before compiling to this canonical ingest shape.\",\"confidence\":\"high\",\"sequence\":16}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_ingest","guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_inspect:uses_background:guide:kmp-agent:verb:audit","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_inspect\",\"to\":\"guide:kmp-agent:verb:audit\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Inspect one typed stored memory object inside an explicit about boundary. The object is stable; evidence, links and raw records page under the byte ceiling.\",\"confidence\":\"high\",\"sequence\":17}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_inspect","guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_near:uses_background:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_near\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Return the temporal neighborhood around a timestamp, sequence, or ref. Cursor parameter: `around`. A partial neighborhood continues through response.next_action with kmp_rewind and kmp_forward; feeding page.next_cursor back to kmp_near does not paginate.\",\"confidence\":\"high\",\"sequence\":18}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_near","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_rewind:uses_background:guide:kmp-agent:verb:time","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_rewind\",\"to\":\"guide:kmp-agent:verb:time\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Move backward through memory from a timestamp, sequence, or ref. Entries within each page are newest-to-oldest, so concatenating continuation pages stays globally descending. Cursor parameter: `from`.\",\"confidence\":\"high\",\"sequence\":19}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_rewind","guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_trace:uses_background:guide:kmp-agent:verb:audit","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_trace\",\"to\":\"guide:kmp-agent:verb:audit\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Trace the proof path between two memory refs owned by one explicit about. Both refs are rejected before traversal unless they belong to that about.\",\"confidence\":\"high\",\"sequence\":20}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_trace","guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_view_apply_intent:uses_background:guide:kmp-agent:verb:view","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_view_apply_intent\",\"to\":\"guide:kmp-agent:verb:view\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Move the view by declaring what it should show — focus, clock axis, semantic zoom, dimensions, relation classes, selection, trace. Never pixels, coordinates or code. Atomic, idempotent, and under optimistic concurrency: if the person at the loom moved first, this conflicts and you rebase.\",\"confidence\":\"high\",\"sequence\":21}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_view_apply_intent","guide:kmp-agent:verb:view"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_view_get_state:uses_background:guide:kmp-agent:verb:view","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_view_get_state\",\"to\":\"guide:kmp-agent:verb:view\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Read the view's semantic state — clock, window, focus, zoom, filters, selection, revision and who last moved it. Returns this session's capability link when the local viewer is mounted; state, never pixels.\",\"confidence\":\"high\",\"sequence\":22}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_view_get_state","guide:kmp-agent:verb:view"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_view_open:uses_background:guide:kmp-agent:verb:view","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_view_open\",\"to\":\"guide:kmp-agent:verb:view\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Open or rehydrate a ChronoLoom view over an about, so a human and this agent look at the same loom. Returns this session's capability link when the local viewer is mounted. Read-only with respect to memory: a view is a camera position, not a record.\",\"confidence\":\"high\",\"sequence\":23}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_view_open","guide:kmp-agent:verb:view"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_wake:uses_background:guide:kmp-agent:verb:wake","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_wake\",\"to\":\"guide:kmp-agent:verb:wake\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Return a compact Kernel Memory Protocol wake packet for continuing work from memory.\",\"confidence\":\"high\",\"sequence\":24}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_wake","guide:kmp-agent:verb:wake"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp-agent:tool:kmp_write_memory:uses_background:guide:kmp-agent:verb:write","payload_json":"{\"from\":\"guide:kmp-agent:tool:kmp_write_memory\",\"to\":\"guide:kmp-agent:verb:write\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The human-readable verb rule is grounded in this exact live MCP contract.\",\"evidence\":\"Write to memory. This is the writer to use: it validates intent and relation quality, then commits through canonical kmp_ingest. Normal writes are one call: omit `options.dry_run` or set it to false; validation failures write nothing. Set it to true only for an explicitly requested preview or payload debugging. Reach for kmp_ingest only when producing the exact graph yourself.\",\"confidence\":\"high\",\"sequence\":25}","reason":"The human-readable verb rule is grounded in this exact live MCP contract.","scopes":["guide:kmp-agent:tool:kmp_write_memory","guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:overview","payload_json":"{\"id\":\"evidence:guide:kmp-agent:overview\",\"supports\":[\"guide:kmp-agent:overview\"],\"text\":\"This is the agent-only operating contract shipped with the KMP plugin.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:overview"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:wake","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:wake\",\"supports\":[\"guide:kmp-agent:verb:wake\"],\"text\":\"The live kmp_wake contract returns an about-scoped continuation packet and resume cursor.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:wake"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:ask","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:ask\",\"supports\":[\"guide:kmp-agent:verb:ask\"],\"text\":\"The live kmp_ask contract retrieves stored evidence and never generates a fallback answer.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:ask"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:time","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:time\",\"supports\":[\"guide:kmp-agent:verb:time\"],\"text\":\"The four live temporal contracts define direction, cursor field, ordering and continuation semantics separately.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:time"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:audit","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:audit\",\"supports\":[\"guide:kmp-agent:verb:audit\"],\"text\":\"The live inspect and trace contracts enforce an explicit about boundary and preserve proof.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:audit"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:write","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:write\",\"supports\":[\"guide:kmp-agent:verb:write\"],\"text\":\"The live writer contract validates intent and relation quality before compiling to canonical ingest.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:write"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:view","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:view\",\"supports\":[\"guide:kmp-agent:verb:view\"],\"text\":\"The live view contracts make the view shared, semantic, optimistic and read-only with respect to memory.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:view"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:verb:guide-sync","payload_json":"{\"id\":\"evidence:guide:kmp-agent:verb:guide-sync\",\"supports\":[\"guide:kmp-agent:verb:guide-sync\"],\"text\":\"The plugin ships one content-addressed request set and a regular format-2 bundle for deterministic guide convergence.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:verb:guide-sync"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:scope","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:scope\",\"supports\":[\"guide:kmp-agent:advanced:scope\"],\"text\":\"The live read schemas expose current_about, abouts and all_abouts as distinct cost and isolation choices.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:scope"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:relations","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:relations\",\"supports\":[\"guide:kmp-agent:advanced:relations\"],\"text\":\"The writer relation vocabulary distinguishes semantic meaning from fallback links and reports relation quality.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:relations"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:idempotency","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:idempotency\",\"supports\":[\"guide:kmp-agent:advanced:idempotency\"],\"text\":\"KMP binds idempotency keys to logical digests and preserves replay outcomes across export/import.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:idempotency"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:pagination","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:pagination\",\"supports\":[\"guide:kmp-agent:advanced:pagination\"],\"text\":\"Every bounded live read reports its own page unit, continuation and byte-budget guidance.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:pagination"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:advanced:lifecycle","payload_json":"{\"id\":\"evidence:guide:kmp-agent:advanced:lifecycle\",\"supports\":[\"guide:kmp-agent:advanced:lifecycle\"],\"text\":\"KMP proof separates superseded, conflicts and expired so an agent cannot flatten distinct lifecycles.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp-agent:advanced:lifecycle"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_ask","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_ask\",\"supports\":[\"guide:kmp-agent:tool:kmp_ask\"],\"text\":\"Retrieve stored entry text and evidence bearing on a question, or UNKNOWN. Nothing is generated: `answer` names what was retrieved and the text lives in `proof.evidence[].text` — `metadata.proof_role` distinguishes an entry claim from stored evidence. Read it and judge whether it answers. `proof.confidence` is lexical term overlap between the question and the best-matching memory item; it is not a judgement that the item answers, and it is not the `confidence` on a relation, which is writer certainty. UNKNOWN means memory did not answer; `summary` says whether nothing was retrieved or nothing retrieved bore on the question.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_ask"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_forward","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_forward\",\"supports\":[\"guide:kmp-agent:tool:kmp_forward\"],\"text\":\"Move forward through memory from a timestamp, sequence, or ref. Entries and continuation pages are oldest-to-newest. Cursor parameter: `from`.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_forward"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_goto","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_goto\",\"supports\":[\"guide:kmp-agent:tool:kmp_goto\"],\"text\":\"Jump to memory state at a timestamp, sequence, or ref. Cursor parameter: `at`. When the result is partial, response.next_action continues earlier history with kmp_rewind; feeding page.next_cursor back to kmp_goto does not paginate.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_goto"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_ingest","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_ingest\",\"supports\":[\"guide:kmp-agent:tool:kmp_ingest\"],\"text\":\"Low-level batch writer for callers producing the exact graph themselves. Prefer kmp_write_memory for ordinary agent writes because it validates intent and relation quality before compiling to this canonical ingest shape.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_ingest"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_inspect","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_inspect\",\"supports\":[\"guide:kmp-agent:tool:kmp_inspect\"],\"text\":\"Inspect one typed stored memory object inside an explicit about boundary. The object is stable; evidence, links and raw records page under the byte ceiling.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_inspect"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_near","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_near\",\"supports\":[\"guide:kmp-agent:tool:kmp_near\"],\"text\":\"Return the temporal neighborhood around a timestamp, sequence, or ref. Cursor parameter: `around`. A partial neighborhood continues through response.next_action with kmp_rewind and kmp_forward; feeding page.next_cursor back to kmp_near does not paginate.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_near"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_rewind","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_rewind\",\"supports\":[\"guide:kmp-agent:tool:kmp_rewind\"],\"text\":\"Move backward through memory from a timestamp, sequence, or ref. Entries within each page are newest-to-oldest, so concatenating continuation pages stays globally descending. Cursor parameter: `from`.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_rewind"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_trace","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_trace\",\"supports\":[\"guide:kmp-agent:tool:kmp_trace\"],\"text\":\"Trace the proof path between two memory refs owned by one explicit about. Both refs are rejected before traversal unless they belong to that about.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_trace"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_view_apply_intent","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_view_apply_intent\",\"supports\":[\"guide:kmp-agent:tool:kmp_view_apply_intent\"],\"text\":\"Move the view by declaring what it should show — focus, clock axis, semantic zoom, dimensions, relation classes, selection, trace. Never pixels, coordinates or code. Atomic, idempotent, and under optimistic concurrency: if the person at the loom moved first, this conflicts and you rebase.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_view_apply_intent"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_view_get_state","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_view_get_state\",\"supports\":[\"guide:kmp-agent:tool:kmp_view_get_state\"],\"text\":\"Read the view's semantic state — clock, window, focus, zoom, filters, selection, revision and who last moved it. Returns this session's capability link when the local viewer is mounted; state, never pixels.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_view_get_state"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_view_open","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_view_open\",\"supports\":[\"guide:kmp-agent:tool:kmp_view_open\"],\"text\":\"Open or rehydrate a ChronoLoom view over an about, so a human and this agent look at the same loom. Returns this session's capability link when the local viewer is mounted. Read-only with respect to memory: a view is a camera position, not a record.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_view_open"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_wake","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_wake\",\"supports\":[\"guide:kmp-agent:tool:kmp_wake\"],\"text\":\"Return a compact Kernel Memory Protocol wake packet for continuing work from memory.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_wake"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp-agent:tool:kmp_write_memory","payload_json":"{\"id\":\"evidence:guide:kmp-agent:tool:kmp_write_memory\",\"supports\":[\"guide:kmp-agent:tool:kmp_write_memory\"],\"text\":\"Write to memory. This is the writer to use: it validates intent and relation quality, then commits through canonical kmp_ingest. Normal writes are one call: omit `options.dry_run` or set it to false; validation failures write nothing. Set it to true only for an explicitly requested preview or payload debugging. Reach for kmp_ingest only when producing the exact graph yourself.\",\"source\":\"KMP tools/list guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"agent\",\"guide_version\":\"1\"}}","reason":"KMP tools/list guide source v1","scopes":["guide:kmp-agent:tool:kmp_write_memory"]}],"idempotency_key":"ingest:guide-sync:1:agent:5217c5b5da16ca00428a","logical_digest":"ccc37d89b5c6ee5c86f8f3e92e8450635e33a8ece1c6fff573aba0051c88ce6b","requested_by":"kmp-guide-builder","occurred_at":1788007709413} +{"root_node_id":"guide:kmp","role":"memory","revision":1,"content_hash":"6aa1eb82b200acf3c801303af4c91a65c54569f84b380ccb4365cf105b12d56f","changes":[{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp:dimension:timeline","payload_json":"{\"id\":\"about:guide:kmp:dimension:timeline\",\"kind\":\"timeline\",\"title\":\"Guide order\",\"metadata\":{\"memory_about\":\"guide:kmp\",\"memory_dimension_id\":\"timeline\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp:dimension:timeline"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp:dimension:audience-person","payload_json":"{\"id\":\"about:guide:kmp:dimension:audience-person\",\"kind\":\"audience\",\"title\":\"person\",\"metadata\":{\"memory_about\":\"guide:kmp\",\"memory_dimension_id\":\"audience-person\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp:dimension:audience-person"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp:dimension:depth-basic","payload_json":"{\"id\":\"about:guide:kmp:dimension:depth-basic\",\"kind\":\"depth\",\"title\":\"Basic\",\"metadata\":{\"memory_about\":\"guide:kmp\",\"memory_dimension_id\":\"depth-basic\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_dimension","entity_id":"about:guide:kmp:dimension:depth-advanced","payload_json":"{\"id\":\"about:guide:kmp:dimension:depth-advanced\",\"kind\":\"depth\",\"title\":\"Advanced\",\"metadata\":{\"memory_about\":\"guide:kmp\",\"memory_dimension_id\":\"depth-advanced\"}}","reason":"KMP memory dimension ingest","scopes":["about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:welcome","payload_json":"{\"id\":\"guide:kmp:welcome\",\"kind\":\"guide\",\"text\":\"KMP remembers why. This is the human guide: five short ideas first, then the deeper mechanics when you want them. Ask your agent to run open:guide whenever you want this view back.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875200:000000000\",\"observed_at\":\"unix:101787875200:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":1},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":1},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":1}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:basic:memory","payload_json":"{\"id\":\"guide:kmp:basic:memory\",\"kind\":\"concept\",\"text\":\"KMP stores durable decisions and evidence, not transcripts. The useful unit is what changed, why it changed and what proves it.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875260:000000000\",\"observed_at\":\"unix:101787875260:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":2},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":2},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":2}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:basic:local","payload_json":"{\"id\":\"guide:kmp:basic:local\",\"kind\":\"concept\",\"text\":\"Embedded KMP runs on your machine. Codex and Claude Code can use the same local SQLite store; no KMP account or hosted memory service is required.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875320:000000000\",\"observed_at\":\"unix:101787875320:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":3},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":3},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":3}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:basic:inherit","payload_json":"{\"id\":\"guide:kmp:basic:inherit\",\"kind\":\"concept\",\"text\":\"A repository can publish selected project memory in .kmp/memory.jsonl. A clone inherits that reviewed bundle; private abouts in a shared user store stay out unless explicitly exported.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875380:000000000\",\"observed_at\":\"unix:101787875380:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":4},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":4},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":4}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:basic:open","payload_json":"{\"id\":\"guide:kmp:basic:open\",\"kind\":\"instruction\",\"text\":\"Say: show me the memory behind this decision. The agent retrieves the evidence, opens ChronoLoom and moves the shared view to the relevant entry or proof path. You can click, filter, pan, undo or take control.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875440:000000000\",\"observed_at\":\"unix:101787875440:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":5},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":5},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-basic\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":5}],\"metadata\":{\"audience\":\"person\",\"depth\":\"basic\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-basic"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:clocks","payload_json":"{\"id\":\"guide:kmp:advanced:clocks\",\"kind\":\"concept\",\"text\":\"The difference between occurred and observed time is the event boundary versus the knowledge boundary. KMP keeps four clocks because they answer different questions. Occurred time is when the event happened. Observed time is when a source or agent learned it. Ingested time is when the kernel committed it. Validity is the interval in which a state applies.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875500:000000000\",\"observed_at\":\"unix:101787875500:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":6},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":6},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":6}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:supersession","payload_json":"{\"id\":\"guide:kmp:advanced:supersession\",\"kind\":\"concept\",\"text\":\"Supersession is not contradiction. A superseding memory replaces an older state and keeps the old reasoning as history. A contradiction leaves two live claims in tension until something resolves them.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875560:000000000\",\"observed_at\":\"unix:101787875560:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":7},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":7},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":7}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:snapshots","payload_json":"{\"id\":\"guide:kmp:advanced:snapshots\",\"kind\":\"concept\",\"text\":\"Named snapshots are deliberate recovery points. Content-addressed exports are deterministic heads. Bundle merge only fast-forwards identical history or an exact prefix; KMP refuses to invent order for divergent branches.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875620:000000000\",\"observed_at\":\"unix:101787875620:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":8},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":8},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":8}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:shared-store","payload_json":"{\"id\":\"guide:kmp:advanced:shared-store\",\"kind\":\"concept\",\"text\":\"Two hosts can share one embedded store. SQLite WAL allows independent Codex and Claude processes to read and write while optimistic revisions and idempotency protect semantic updates.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875680:000000000\",\"observed_at\":\"unix:101787875680:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":9},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":9},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":9}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:publish","payload_json":"{\"id\":\"guide:kmp:advanced:publish\",\"kind\":\"constraint\",\"text\":\"Committing a bundle publishes the selected abouts to everyone who can read the repository. Export exact abouts deliberately; a full export from a shared user store can contain unrelated or private memory.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875740:000000000\",\"observed_at\":\"unix:101787875740:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":10},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":10},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":10}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:viewer","payload_json":"{\"id\":\"guide:kmp:advanced:viewer\",\"kind\":\"constraint\",\"text\":\"ChronoLoom is local and capability-protected. The process binds to loopback, exchanges a random one-session URL capability for an HttpOnly cookie, and removes the token from the address. Moving the view never writes memory.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875800:000000000\",\"observed_at\":\"unix:101787875800:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":11},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":11},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":11}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_entry","entity_id":"guide:kmp:advanced:plain-file","payload_json":"{\"id\":\"guide:kmp:advanced:plain-file\",\"kind\":\"constraint\",\"text\":\"Use a plain file when the information is canonical prose, a large artifact or something people should edit directly. Use KMP when time, evidence, typed relations, supersession or cross-session recovery are part of the meaning.\",\"coordinates\":[{\"dimension\":\"timeline\",\"scope_id\":\"about:guide:kmp:dimension:timeline\",\"occurred_at\":\"unix:101787875860:000000000\",\"observed_at\":\"unix:101787875860:000000000\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":12},{\"dimension\":\"audience\",\"scope_id\":\"about:guide:kmp:dimension:audience-person\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":12},{\"dimension\":\"depth\",\"scope_id\":\"about:guide:kmp:dimension:depth-advanced\",\"ingested_at\":\"unix:101788007709:433398890\",\"sequence\":12}],\"metadata\":{\"audience\":\"person\",\"depth\":\"advanced\",\"guide_version\":\"1\",\"source\":\"editorial\"}}","reason":"KMP memory entry ingest","scopes":["about:guide:kmp:dimension:timeline","about:guide:kmp:dimension:audience-person","about:guide:kmp:dimension:depth-advanced"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:basic:memory:follows:guide:kmp:welcome","payload_json":"{\"from\":\"guide:kmp:basic:memory\",\"to\":\"guide:kmp:welcome\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"The first idea defines what KMP keeps before the guide explains where it lives.\",\"evidence\":\"The human guide is ordered from product meaning to operation.\",\"confidence\":\"high\",\"sequence\":1}","reason":"The first idea defines what KMP keeps before the guide explains where it lives.","scopes":["guide:kmp:basic:memory","guide:kmp:welcome"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:basic:local:follows:guide:kmp:basic:memory","payload_json":"{\"from\":\"guide:kmp:basic:local\",\"to\":\"guide:kmp:basic:memory\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"After defining the memory, the next question is where it runs and who can share it.\",\"evidence\":\"Embedded SQLite is the default user path.\",\"confidence\":\"high\",\"sequence\":2}","reason":"After defining the memory, the next question is where it runs and who can share it.","scopes":["guide:kmp:basic:local","guide:kmp:basic:memory"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:basic:inherit:follows:guide:kmp:basic:local","payload_json":"{\"from\":\"guide:kmp:basic:inherit\",\"to\":\"guide:kmp:basic:local\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"Repository bundles explain how selected local memory crosses a clone boundary.\",\"evidence\":\"The portable event bundle is distinct from the live local SQLite store.\",\"confidence\":\"high\",\"sequence\":3}","reason":"Repository bundles explain how selected local memory crosses a clone boundary.","scopes":["guide:kmp:basic:inherit","guide:kmp:basic:local"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:basic:open:follows:guide:kmp:basic:inherit","payload_json":"{\"from\":\"guide:kmp:basic:open\",\"to\":\"guide:kmp:basic:inherit\",\"rel\":\"follows\",\"class\":\"procedural\",\"why\":\"The basic path ends by showing how a person asks the agent to make stored memory visible.\",\"evidence\":\"open:guide and ordinary show-memory requests use the shared ChronoLoom view.\",\"confidence\":\"high\",\"sequence\":4}","reason":"The basic path ends by showing how a person asks the agent to make stored memory visible.","scopes":["guide:kmp:basic:open","guide:kmp:basic:inherit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:clocks:uses_background:guide:kmp:basic:memory","payload_json":"{\"from\":\"guide:kmp:advanced:clocks\",\"to\":\"guide:kmp:basic:memory\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"The four clocks add temporal precision to the basic definition of durable memory.\",\"evidence\":\"Memory entries carry distinct occurrence, observation, ingestion and validity coordinates.\",\"confidence\":\"high\",\"sequence\":5}","reason":"The four clocks add temporal precision to the basic definition of durable memory.","scopes":["guide:kmp:advanced:clocks","guide:kmp:basic:memory"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:supersession:uses_background:guide:kmp:advanced:clocks","payload_json":"{\"from\":\"guide:kmp:advanced:supersession\",\"to\":\"guide:kmp:advanced:clocks\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Lifecycle interpretation depends on knowing which clock and validity window are being read.\",\"evidence\":\"Superseded, conflicting and expired states are selected against temporal coordinates.\",\"confidence\":\"high\",\"sequence\":6}","reason":"Lifecycle interpretation depends on knowing which clock and validity window are being read.","scopes":["guide:kmp:advanced:supersession","guide:kmp:advanced:clocks"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:snapshots:uses_background:guide:kmp:basic:inherit","payload_json":"{\"from\":\"guide:kmp:advanced:snapshots\",\"to\":\"guide:kmp:basic:inherit\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Snapshot and merge rules deepen the basic repository inheritance story.\",\"evidence\":\"Bundles are verified portable event histories rather than database copies.\",\"confidence\":\"high\",\"sequence\":7}","reason":"Snapshot and merge rules deepen the basic repository inheritance story.","scopes":["guide:kmp:advanced:snapshots","guide:kmp:basic:inherit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:shared-store:uses_background:guide:kmp:basic:local","payload_json":"{\"from\":\"guide:kmp:advanced:shared-store\",\"to\":\"guide:kmp:basic:local\",\"rel\":\"uses_background\",\"class\":\"evidential\",\"why\":\"Multi-host concurrency is the advanced form of the basic local SQLite claim.\",\"evidence\":\"The same WAL store is safe for independent local agent processes.\",\"confidence\":\"high\",\"sequence\":8}","reason":"Multi-host concurrency is the advanced form of the basic local SQLite claim.","scopes":["guide:kmp:advanced:shared-store","guide:kmp:basic:local"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:publish:qualifies_as:guide:kmp:basic:inherit","payload_json":"{\"from\":\"guide:kmp:advanced:publish\",\"to\":\"guide:kmp:basic:inherit\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"Publication scope constrains what a committed repository bundle may reveal.\",\"evidence\":\"Exact-about export exists so a shared store is not published wholesale.\",\"confidence\":\"high\",\"sequence\":9}","reason":"Publication scope constrains what a committed repository bundle may reveal.","scopes":["guide:kmp:advanced:publish","guide:kmp:basic:inherit"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:viewer:qualifies_as:guide:kmp:basic:open","payload_json":"{\"from\":\"guide:kmp:advanced:viewer\",\"to\":\"guide:kmp:basic:open\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"The capability model explains the security boundary behind the simple open gesture.\",\"evidence\":\"ChronoLoom uses a loopback one-session capability and read-only semantic state.\",\"confidence\":\"high\",\"sequence\":10}","reason":"The capability model explains the security boundary behind the simple open gesture.","scopes":["guide:kmp:advanced:viewer","guide:kmp:basic:open"]},{"operation":"UPSERT","entity_kind":"memory_relation","entity_id":"relation:guide:kmp:advanced:plain-file:qualifies_as:guide:kmp:basic:memory","payload_json":"{\"from\":\"guide:kmp:advanced:plain-file\",\"to\":\"guide:kmp:basic:memory\",\"rel\":\"qualifies_as\",\"class\":\"constraint\",\"why\":\"A good memory system must say what should remain ordinary documentation.\",\"evidence\":\"Canonical prose and large directly edited artifacts do not need graph-temporal semantics.\",\"confidence\":\"high\",\"sequence\":11}","reason":"A good memory system must say what should remain ordinary documentation.","scopes":["guide:kmp:advanced:plain-file","guide:kmp:basic:memory"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:welcome","payload_json":"{\"id\":\"evidence:guide:kmp:welcome\",\"supports\":[\"guide:kmp:welcome\"],\"text\":\"This is the person-facing guide shipped with the KMP plugin.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:welcome"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:basic:memory","payload_json":"{\"id\":\"evidence:guide:kmp:basic:memory\",\"supports\":[\"guide:kmp:basic:memory\"],\"text\":\"The public product contract defines memory as decisions and evidence rather than conversation logs.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:basic:memory"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:basic:local","payload_json":"{\"id\":\"evidence:guide:kmp:basic:local\",\"supports\":[\"guide:kmp:basic:local\"],\"text\":\"The embedded engine selects SQLite in WAL mode and the viewer binds to loopback.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:basic:local"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:basic:inherit","payload_json":"{\"id\":\"evidence:guide:kmp:basic:inherit\",\"supports\":[\"guide:kmp:basic:inherit\"],\"text\":\"Format-2 filtered export names exact abouts and import replays only the committed event stream.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:basic:inherit"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:basic:open","payload_json":"{\"id\":\"evidence:guide:kmp:basic:open\",\"supports\":[\"guide:kmp:basic:open\"],\"text\":\"The three semantic view tools share one revisioned ChronoLoom state between agent and person.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:basic:open"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:clocks","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:clocks\",\"supports\":[\"guide:kmp:advanced:clocks\"],\"text\":\"The memory coordinate contract stores occurred_at, observed_at, ingested_at, valid_from and exclusive valid_until separately.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:clocks"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:supersession","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:supersession\",\"supports\":[\"guide:kmp:advanced:supersession\"],\"text\":\"KMP proof reports superseded entries and live conflicts in separate fields.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:supersession"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:snapshots","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:snapshots\",\"supports\":[\"guide:kmp:advanced:snapshots\"],\"text\":\"The format-2 bundle contract binds content digest, about coverage and event range before import or merge.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:snapshots"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:shared-store","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:shared-store\",\"supports\":[\"guide:kmp:advanced:shared-store\"],\"text\":\"The embedded concurrency gates run two processes against one SQLite store and require both writers to enter without losing events.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:shared-store"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:publish","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:publish\",\"supports\":[\"guide:kmp:advanced:publish\"],\"text\":\"Filtered export accepts repeatable exact abouts and refuses missing selections before writing the destination.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:publish"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:viewer","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:viewer\",\"supports\":[\"guide:kmp:advanced:viewer\"],\"text\":\"The viewer and MCP App contracts separate read-only view state from memory writes and do not advertise a bare unauthorised URL.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:viewer"]},{"operation":"UPSERT","entity_kind":"memory_evidence","entity_id":"evidence:guide:kmp:advanced:plain-file","payload_json":"{\"id\":\"evidence:guide:kmp:advanced:plain-file\",\"supports\":[\"guide:kmp:advanced:plain-file\"],\"text\":\"KMP is graph-temporal operational memory; it is not a replacement for source files or documentation.\",\"source\":\"KMP editorial guide source v1\",\"time\":\"unix:101787875200:000000000\",\"metadata\":{\"audience\":\"person\",\"guide_version\":\"1\"}}","reason":"KMP editorial guide source v1","scopes":["guide:kmp:advanced:plain-file"]}],"idempotency_key":"ingest:guide-sync:1:person:a542c59caf493c9b22ff","logical_digest":"7706c8019d0735f3e81ae1fa52afdc3cf6ad62a2d8a6379424a661da19146a19","requested_by":"kmp-guide-builder","occurred_at":1788007709436} diff --git a/plugins/kmp/scripts/kmp-doctor.sh b/plugins/kmp/scripts/kmp-doctor.sh index fc9ee55..7eda1d5 100755 --- a/plugins/kmp/scripts/kmp-doctor.sh +++ b/plugins/kmp/scripts/kmp-doctor.sh @@ -261,15 +261,24 @@ else fi # FORMAT_VERSION names the layout, but it is not evidence that memory is - # absent. Discover physical engine files independently first: a missing, - # corrupt or newer stamp must never turn a real store into "empty". - REDB_STORE="$DATA_DIR/store/kernel.redb" + # absent. Discover the SQLite file and any unsupported artifacts first: a + # missing, corrupt or newer stamp must never turn real bytes into "empty". SQLITE_STORE="$DATA_DIR/store/kernel.sqlite3" + UNSUPPORTED_STORE="" + if [ -d "$DATA_DIR/store" ]; then + while IFS= read -r artifact; do + UNSUPPORTED_STORE="$artifact" + break + done < <(find "$DATA_DIR/store" -maxdepth 1 -type f \ + ! -name 'kernel.sqlite3' ! -name 'kernel.sqlite3-wal' ! -name 'kernel.sqlite3-shm' \ + ! -name 'kernel.sqlite3-journal' \ + -print 2>/dev/null | LC_ALL=C sort) + fi STORE_FILE="" ENGINE="" PHYSICAL_STORES=0 - if [ -f "$REDB_STORE" ]; then - STORE_FILE="$REDB_STORE"; ENGINE="redb" + if [ -n "$UNSUPPORTED_STORE" ]; then + STORE_FILE="$UNSUPPORTED_STORE"; ENGINE="unsupported" PHYSICAL_STORES=$((PHYSICAL_STORES + 1)) fi if [ -f "$SQLITE_STORE" ]; then @@ -277,10 +286,10 @@ else PHYSICAL_STORES=$((PHYSICAL_STORES + 1)) fi if [ "$PHYSICAL_STORES" -gt 1 ]; then - fail "multiple engine files exist; refusing to guess which memory is live" + fail "SQLite and unsupported storage artifacts coexist; refusing to guess which memory is live" SESSION_USABLE=0 - SESSION_REASON="the data dir contains both redb and sqlite store files" - info "$REDB_STORE" + SESSION_REASON="the data dir contains conflicting storage artifacts" + info "$UNSUPPORTED_STORE" info "$SQLITE_STORE" fi @@ -290,12 +299,13 @@ else if FORMAT="$(tr -d '[:space:]' < "$DATA_DIR/FORMAT_VERSION" 2>/dev/null)"; then case "$FORMAT" in 1) - EXPECTED_ENGINE="redb"; EXPECTED_STORE="$REDB_STORE" - fail "store format 1 uses retired redb; this binary contains no reader" + EXPECTED_ENGINE="unsupported"; EXPECTED_STORE="$UNSUPPORTED_STORE" + fail "store format 1 is unsupported by this binary" SESSION_USABLE=0 - SESSION_REASON="store format 1 requires the KMP 0.3.2 export bridge" + SESSION_REASON="store format 1 requires an archived compatible exporter" info "the source was left untouched" - info "export it with KMP 0.3.2, then import .kmp/memory.jsonl with current KMP" + info "use an explicitly archived compatible exporter to create .kmp/memory.jsonl" + info "then import that bundle into an empty current KMP store" ;; 2) EXPECTED_ENGINE="sqlite"; EXPECTED_STORE="$SQLITE_STORE" ;; 0) @@ -368,8 +378,8 @@ else STORE_WHEN="$(date -r "$STORE_FILE" '+%Y-%m-%d %H:%M' 2>/dev/null)" fi info "store size: ${STORE_SIZE:-?}" - if [ "$ENGINE" = "redb" ]; then - info "legacy redb bytes are inventory only; Doctor did not open or probe them" + if [ "$ENGINE" = "unsupported" ]; then + info "unsupported storage bytes are inventory only; Doctor did not open or probe them" else HOLDER="" if command -v fuser >/dev/null 2>&1; then diff --git a/plugins/kmp/skills/kmp-memory/SKILL.md b/plugins/kmp/skills/kmp-memory/SKILL.md index 8db5fec..54b09a3 100644 --- a/plugins/kmp/skills/kmp-memory/SKILL.md +++ b/plugins/kmp/skills/kmp-memory/SKILL.md @@ -355,7 +355,7 @@ A replaced entry comes back **marked**. `kmp_wake` and `kmp_ask` carry ```json "superseded": [ { - "ref": "project:kmp:decision:usar-redb", + "ref": "project:kmp:decision:usar-almacen-anterior", "superseded_by": "project:kmp:decision:usar-sqlite", "why": "two agent hosts need to share the store" } @@ -446,11 +446,11 @@ For a lifecycle change: ```json { - "ref": "project:kmp:decision:redb", + "ref": "project:kmp:decision:single-writer-store", "rel": "supersedes", "class": "evidential", - "why": "SQLite WAL replaces redb because the architecture now requires multi-process access to one store.", - "evidence": "The shared-store test failed at redb's process lock and passed under SQLite WAL.", + "why": "SQLite WAL replaces the single-writer layout because the architecture now requires multi-process access to one store.", + "evidence": "The shared-store test failed at the previous process lock and passed under SQLite WAL.", "confidence": "high" } ``` diff --git a/plugins/kmp/skills/kmp-uninstall/SKILL.md b/plugins/kmp/skills/kmp-uninstall/SKILL.md index 02873e4..adc0e21 100644 --- a/plugins/kmp/skills/kmp-uninstall/SKILL.md +++ b/plugins/kmp/skills/kmp-uninstall/SKILL.md @@ -5,9 +5,19 @@ description: Preview or perform KMP removal while protecting memory and respecti # KMP uninstall -Run `kmp-mcp uninstall` as a dry run first. Never add `--apply` or `--purge` -unless the user explicitly requested it; `--purge` skips the protective export. -Name the export path and restore command. Remove host wiring only from its -owner: `codex plugin remove` for plugin-managed installs, or the global MCP and -standalone assets for standalone installs. Do not remove both paths when only -one owns the installation. +Run `kmp-mcp uninstall` as a dry run first. To retire one memory, use +`kmp-mcp uninstall --store ` so the preview and apply cannot +reach any other store, engine, plugin or host wiring. The selected path must be +an existing KMP store. Never add `--apply` or `--purge` unless the user +explicitly requested it; `--purge` skips the protective export. + +An apply must refuse an active store and leave every process running. Tell the +user which owning host must be stopped or restarted; never kill it on behalf of +uninstall. Retry only after that host releases the store. Name the export path +and restore command. + +Use the unscoped command only when the user requested removal of the whole KMP +installation. Remove host wiring only from its owner: `codex plugin remove` for +plugin-managed installs, or the global MCP and standalone assets for +standalone installs. Do not remove both paths when only one owns the +installation.