← ExomemCONTENT HISTORY

Update to Exomem

Snapshot Nov 3, 2026 · 12:11 UTC · version 0.134.2

Collection source: downloaded plugin package.

WHAT CHANGED

Instructions updated for exomem-curate

Skill instructions — Now says: 0d23c50d8751e79c26e99bbe70bc7adfcdf460c8ba88dd7bde037f50d2190af0 ## Vocabulary Read [vocabulary](references/vocabulary.md) before changing a registry. If the...

Observed in instructions or declared skills. Runtime behavior has not been tested.

Save Exomem and check future changes in Following.

Up to 10 plugins free · no card required.

All fields and original values.

Skill instructions

Before

Oct 24, 2026 · 13:41 UTC

2217ceb2ba966d84a83e3d4083daf2277d2eab0ed70a3f91d829c26fde9721bc <!-- exomem-semantic-authoring:v4 sha256:837b03b15c3d83f6c6eeb50771f4eaa04e4beaaae0f7d54be249be40ce7685f7 --> Every new, replaced, or activated active compiled note needs a...

After

Nov 3, 2026 · 12:11 UTC

0d23c50d8751e79c26e99bbe70bc7adfcdf460c8ba88dd7bde037f50d2190af0 ## Vocabulary Read [vocabulary](references/vocabulary.md) before changing a registry. If the vocabulary reference is missing, inspect the exposed bootstrap schema. Use `boo...

Supporting files

Before

Oct 24, 2026 · 13:41 UTC

[{"relative_path":"references/audit-checks.md","size_in_bytes":12725},{"relative_path":"references/before-writing.md","size_in_bytes":5978},{"relative_path":"references/engagement.md","size_in_bytes":19238},{"relative_path":"references/f...

After

Nov 3, 2026 · 12:11 UTC

[{"relative_path":"references/audit-checks.md","size_in_bytes":13831},{"relative_path":"references/before-writing.md","size_in_bytes":5923},{"relative_path":"references/engagement.md","size_in_bytes":21333},{"relative_path":"references/f...

Compare saved observations

Download comparison JSON

SKILL.md text changes

− removed · + added

--- before
+++ after
@@ -2,7 +2,7 @@
 name: exomem-curate
 description: Improve Exomem note quality by adding links, clarifying compiled notes, and organizing safely without editing raw Sources or Evidence.
 metadata:
-  skill_contract: 2217ceb2ba966d84a83e3d4083daf2277d2eab0ed70a3f91d829c26fde9721bc
+  skill_contract: 0d23c50d8751e79c26e99bbe70bc7adfcdf460c8ba88dd7bde037f50d2190af0
   version: "0.2.0"
 ---
 
@@ -49,6 +49,16 @@
 8. Leave raw `Sources/` and `Evidence/` untouched except for metadata the core contract explicitly allows.
 9. Check `review_memory(mode="audit", categories=["unregistered_relation"])` for relation labels that recur but are not registered; promote the ones that have earned it with `schema_memory(subject="relations")`, which turns them into real typed edges instead of standing review debt.
 
+## Vocabulary
+
+Read [vocabulary](references/vocabulary.md) before changing a registry.
+If the vocabulary reference is missing, inspect the exposed bootstrap schema.
+Use `bootstrap(profile="compact", section="vocabulary")`, or
+`bootstrap(profile="full")` when `section` is unavailable. Follow the returned
+inspect routes and `save` contract. Reuse or alias before proposing justified
+new meaning; save with the current hash and `why`. Report saved versus queued
+and the returned restore route. Use only exposed operations.
+
 ## Relation governance
 Resolve typed meaning with `resolve-relation` before authoring. Reuse a specific
 truthful match; otherwise choose honest `relates_to` or no edge. Durable recurring
@@ -64,10 +74,10 @@
 ## Mistakes to avoid
 Do not rewrite raw sources or evidence. Do not mass-edit without reading the relevant notes. Do not collapse distinct conclusions just because they share keywords. Do not reuse a forward approval for compensation, silently continue a partial or blocked run, or turn one confirmation into standing approval.
 
-<!-- exomem-semantic-authoring:v4 sha256:837b03b15c3d83f6c6eeb50771f4eaa04e4beaaae0f7d54be249be40ce7685f7 -->
+<!-- exomem-semantic-authoring:v8 sha256:4f1a876ac71d48ed55481e9083522afb38393521c8c64b37e73800bb3028ec7d -->
 ## Semantic authoring contract
 
-Every new, replaced, or activated active compiled note needs at least one valid, non-empty semantic unit. Either compact or rich form satisfies the minimum; compact is preferred, and a valid rich unit does not need a duplicate compact restatement.
+Every new, replaced, or activated compiled note in the live class needs at least one valid, non-empty semantic unit. Either compact or rich form satisfies the minimum; compact is preferred, and a valid rich unit does not need a duplicate compact restatement.
 
 Semantic roles:
 
@@ -83,13 +93,14 @@
 - Compact context: one optional authored qualifier for the observation. Write `(<context>)`. Use one balanced, unescaped parenthesized suffix preceded by whitespace.
 - Compact anchor: one optional stable authored unit identifier. Write `^anchor`. Use 1-64 ASCII letters, digits, or hyphens and begin and end alphanumeric. Place it at the end of the line.
 - Compact exclusions: observation-shaped rows inside fenced code blocks; task labels `[ ]`, `[x]`, `[X]`, and `[-]`; reserved or punctuation-bearing bracket labels outside category grammar. Compact units do not carry typed unit relations; use a canonical note-level relation or the rich form.
-- Rich: write `## <Governed Kind>` with optional leading metadata `- category: <open category>`, `- id: <stable-id>`, `- tags: <comma-separated tags>`, `- context: <context>`, `- relations: <relation-type>: [[Target]]`. Metadata rows are optional and leading; the canonical writer emits category, id, tags, context, then relations; category defaults to the governed kind when omitted. Accepted metadata order is flexible while rows remain leading. After optional leading metadata, add a blank line and a substantive Markdown body. Typed unit relations require the rich form.
+- Rich: write `## <Governed Kind>` with optional leading metadata `- category: <open category>`, `- id: <stable-id>`, `- tags: <comma-separated tags>`, `- context: <context>`, `- relations: <relation-type>: [[Target]]`, `- verdict: <epistemic outcome>`, `- check_by: <ISO revisit date>`. Metadata rows are optional and leading; the canonical writer emits category, id, tags, context, relations, verdict and check_by; category defaults to the governed kind when omitted. Accepted metadata order is flexible while rows remain leading. After optional leading metadata, add a blank line and a substantive Markdown body. Typed unit relations require the rich form. A `#anchor` target addresses a unit.
+- Epistemic corrections: Inspect affected claims and evidence. Distinguish attributed accounts from established facts. Correct suitable existing units with guarded writers, justified verdicts and exact links; verify current state. Refutation alone changes neither lifecycle nor rank. Writers retain prior interpretations; request bootstrap with profile=full for history guidance. Keep an anchored unit's identity when its wording changes. Preserve a false historical proposition and author its verdict; add a distinct corrective unit when useful. Refutation and contradiction do not imply supersession or reduce rank. The semantic writer retains prior interpretations atomically. Read revision_history with read_memory(include_history=true), optionally for unit_ref, using history_limit and history_continuation. Existing history remains the page's operation log. Entities and legacy pages use their existing edit owner; Records use guarded row corrections and history. Corrections need no dated child, special user nudge, or confirmation beyond the active engagement policy.
 - Rich boundary: A heading at level N owns content until the next non-fenced heading at level N or shallower; deeper headings remain in its body. `empty_rich_unit` means a recognized rich heading has no substantive body; Add substantive body content or remove the empty recognized heading.
-- Exact applicability: `compiled_intent(after_state) = canonical_compiled_destination(path) OR normalized_type in COMPILED_TYPES`. `COMPILED_TYPES` contains exactly `experiment`, `failure`, `insight`, `pattern`, `production-log`, `research-note`, with canonical destinations `experiment` → `Notes/Experiments`, `failure` → `Notes/Failures`, `insight` → `Notes/Insights`, `pattern` → `Notes/Patterns`, `production-log` → `Notes/Productions`, `research-note` → `Notes/Research`. Reject missing, invalid, or mismatched compiled frontmatter before evaluating the minimum-unit predicate. The minimum predicate applies when the path and normalized compiled type structurally match; the result is writable managed Markdown in the governed subtree; the result is outside Sources, Evidence, and trash; no activation exclusion applies; the resolved lifecycle is active. Inactive lifecycle values are `archived`, `draft`, `dropped`, `planned`, `superseded`. Check new active creates, replacements, and inactive-to-active transitions; inactive drafts may remain unit-free until activation.
+- Exact applicability: obtain `bootstrap(profile="compact", section="authoring")` and read `semantic_authoring.minimum_semantic_unit` for current structural applicability and the status-class rule. If the exposed bootstrap schema lacks `section`, use `bootstrap(profile="full")` instead; released profiles reject section arguments. Apply `compiled_intent(after_state) = canonical_compiled_destination(path) OR the normalized type's note-type role is compiled`. Shipped compiled types: `research-note` in `Notes/Research`, `insight` in `Notes/Insights`, `failure` in `Notes/Failures`, `pattern` in `Notes/Patterns`, `experiment` in `Notes/Experiments`, `production-log` in `Notes/Productions`. More may be registered; `schema_memory(subject="note-types", operation="inspect")` lists the live set. Reject missing, invalid, or mismatched compiled frontmatter before evaluating the minimum-unit predicate. The minimum predicate applies when the path and normalized compiled type structurally match; the result is writable managed Markdown in the governed subtree; the result is outside Sources, Evidence, and trash; no activation exclusion applies; the admitted effective status class is live. Check live creates, replacements and transitions to live; pending compiled notes may remain unit-free until activation.
 - Existing active pages: A post-activation compliant page cannot lose its final valid semantic unit.
 - Exempt content: arbitrary non-compiled Markdown, dataset cards, Evidence artifacts, hubs, indexes, logs, non-Markdown files, schema and admin artifacts, snapshots, Sources, templates, trash.
 - Routes: use `remember` for a new compiled note, `replace_memory` for a replacement, `observe_memory` for one unit, and `edit_memory` for a small edit or activation. Tier 2 manage_memory_file create, overwrite, and append receive the same semantic precommit contract on the complete resulting compiled Markdown; prefer remember or replace_memory when their typed route fits.
-- Findings: `missing_semantic_unit` means an applicable active compiled result has no valid non-empty unit; `empty_rich_unit` means a recognized rich heading has no substantive body. Add substantive body content or remove the empty recognized heading.
+- Findings: `missing_semantic_unit` means an applicable live-class compiled result has no valid non-empty unit; `empty_rich_unit` means a recognized rich heading has no substantive body. Add substantive body content or remove the empty recognized heading.
 - Compact remediation: Add `## Observations` and `- [operating constraint] Keep retries bounded #reliability`.
 - Rich remediation: Alternatively add `## Decision`, a blank line, and a substantive body.
 - Semantic-unit coverage and relation-review disposition are independent obligations.
Full technical diff · 2 changed fields

changed /included_files

BEFORE
[
  {
    "relative_path": "references/audit-checks.md",
    "size_in_bytes": 12725
  },
  {
    "relative_path": "references/before-writing.md",
    "size_in_bytes": 5978
  },
  {
    "relative_path": "references/engagement.md",
    "size_in_bytes": 19238
  },
  {
    "relative_path": "references/frontmatter.md",
    "size_in_bytes": 11865
  },
  {
    "relative_path": "references/governance.md",
    "size_in_bytes": 8806
  },
  {
    "relative_path": "references/mutation-results.md",
    "size_in_bytes": 7511
  },
  {
    "relative_path": "references/operation-routing.md",
    "size_in_bytes": 20852
  },
  {
    "relative_path": "references/operations.md",
    "size_in_bytes": 56077
  },
  {
    "relative_path": "references/page-types.md",
    "size_in_bytes": 20118
  },
  {
    "relative_path": "references/planning-records.md",
    "size_in_bytes": 14750
  },
  {
    "relative_path": "references/recall.md",
    "size_in_bytes": 11701
  },
  {
    "relative_path": "references/semantic-authoring.md",
    "size_in_bytes": 8608
  },
  {
    "relative_path": "references/supersession.md",
    "size_in_bytes": 5409
  },
  {
    "relative_path": "references/vault-care.md",
    "size_in_bytes": 11452
  },
  {
    "relative_path": "references/write-scope.md",
    "size_in_bytes": 10434
  },
  {
    "relative_path": "references/writing.md",
    "size_in_bytes": 27857
  }
]
AFTER
[
  {
    "relative_path": "references/audit-checks.md",
    "size_in_bytes": 13831
  },
  {
    "relative_path": "references/before-writing.md",
    "size_in_bytes": 5923
  },
  {
    "relative_path": "references/engagement.md",
    "size_in_bytes": 21333
  },
  {
    "relative_path": "references/frontmatter.md",
    "size_in_bytes": 12579
  },
  {
    "relative_path": "references/governance.md",
    "size_in_bytes": 8806
  },
  {
    "relative_path": "references/mutation-results.md",
    "size_in_bytes": 7511
  },
  {
    "relative_path": "references/operation-routing.md",
    "size_in_bytes": 21424
  },
  {
    "relative_path": "references/operations.md",
    "size_in_bytes": 56563
  },
  {
    "relative_path": "references/page-types.md",
    "size_in_bytes": 20100
  },
  {
    "relative_path": "references/planning-records.md",
    "size_in_bytes": 15811
  },
  {
    "relative_path": "references/recall.md",
    "size_in_bytes": 19357
  },
  {
    "relative_path": "references/semantic-authoring.md",
    "size_in_bytes": 10041
  },
  {
    "relative_path": "references/supersession.md",
    "size_in_bytes": 5440
  },
  {
    "relative_path": "references/vault-care.md",
    "size_in_bytes": 13050
  },
  {
    "relative_path": "references/vocabulary.md",
    "size_in_bytes": 5660
  },
  {
    "relative_path": "references/write-scope.md",
    "size_in_bytes": 10880
  },
  {
    "relative_path": "references/writing.md",
    "size_in_bytes": 29475
  }
]

changed /skill_md_contents

BEFORE
"---\nname: exomem-curate\ndescription: Improve Exomem note quality by adding links, clarifying compiled notes, and organizing safely without editing raw Sources or Evidence.\nmetadata:\n  skill_contract: 2217ceb2ba966d84a83e3d4083daf2277d2eab0ed70a3f91d829c26fde9721bc\n  version: \"0.2.0\"\n---\n\n# exomem-curate\n\n## Purpose\nImprove the KB graph and compiled-note quality without damaging provenance.\n\n## When to use\nUse when the user asks to clean up, organize, link, tidy, or improve a set of Exomem notes.\n\n## Portable operating rules\n\nBefore the first operation, inspect the exposed bootstrap schema. If it lacks `skill_contract`, obtain `bootstrap(profile=\"compact\")` directly. Otherwise obtain `bootstrap(profile=\"session\", skill_contract=<metadata.skill_contract>)` if current policy or capabilities are missing; honor `engagement.envelope` and `available_product_tools`. Reuse returned state until policy, connection, adapter, or returned vault configuration/registry state changes. If the server rejects the session profile or argument, obtain `bootstrap(profile=\"compact\")` once. Use the harness's supported discovery mechanism and load only the tools needed now. If the applicable local procedure cannot be read, obtain the portable compact contract; do not improvise a write.\n\nDo not invoke tools absent from `available_product_tools`; use the live capability list even when a bundled workflow mentions a withheld operation.\n\nUse `configure_memory` set/clear only for an explicit user request to change saved engagement.\nRecall, capture, installation and missing hooks use the existing preference;\nnone authorizes changing it. Inspect first when the user requests a change.\n\nSources/Evidence are immutable, and content outside the managed Knowledge Base\nis read-only. Before a compiled write: reuse current relevant search/read results,\ncheck for duplicates, and include known source references and reviewed connections\nin the first write. Use `connect_memory(operation=\"suggest-links\")` when useful\nconnections are still unknown, not to recheck links already established in context.\nHonor the live confirmation ceiling;\na workflow or standing capture preference does not grant restructure authority.\n\nInspect mutation results before reporting success. On `success: false`, follow\nthe structured error. For warming, busy, pending, or\n`MUTATION_COMMITTED_ACKNOWLEDGEMENT_UNCERTAIN`, preserve the same mutation identity\nand unchanged payload; wait/reconcile/retry only as instructed, never with a new\nidentity after an uncertain commit.\n\n## Workflow\n1. Search related notes with `ask_memory`; use `connect_memory(operation=\"suggest-links\")` for link candidates, `\"suggest-relations\"` when direction matters, and `\"graph-context\"` for graph shape or inbound links.\n2. Identify safe improvements — missing links, stale wording, weak titles, duplicate tags, or unlinked entities — starting from `review_memory(mode=\"relation-debt\")` for pages with no outbound edges and `mode=\"relation-queue\"` for already-reviewed candidates.\n3. For a bounded set of explicitly selected pages, call `maintain_memory(mode=\"curation\", curation_action=\"work-item\", refs=[...], paths=[...])`. This is `structural_suggestions`: it assembles recorded context and never chooses semantics or writes content.\n4. Author the typed plan yourself, then call `maintain_memory(mode=\"curation\", curation_action=\"propose\", plan={...})`. Inspect it with `maintain_memory(mode=\"curation\", curation_action=\"preview\", run_id=...)`; preview the immutable plan once and surface its exact actions, blockers, fingerprint, and compensation classes.\n5. Before any execution, treat the plan as `restructure_execution`: obtain one explicit confirmation for that exact plan fingerprint. Do not infer confirmation from the request to inspect or improve notes, and do not accept standing approval.\n6. On confirmation, call `maintain_memory(mode=\"curation\", curation_action=\"apply\", run_id=..., plan_id=..., expected_plan_fingerprint=..., why=...)`. If the phase remains `executing`, resume automatically one step per request with `maintain_memory(mode=\"curation\", curation_action=\"resume\", run_id=..., plan_id=...)` until terminal; stop on `partial` or `blocked` and report the durable evidence instead of improvising.\n7. Compensation is a new reviewed plan, never rollback. `curation_action=\"propose-compensation\"` is `structural_suggestions`: use it to derive the plan, then preview it and obtain a fresh exact-plan confirmation before `maintain_memory(mode=\"curation\", curation_action=\"apply-compensation\", run_id=..., plan_id=..., expected_plan_fingerprint=..., why=...)`. Continue the already-approved compensation plan only through the same one-step `resume` route; resume does not need a fresh confirmation for each step.\n8. Leave raw `Sources/` and `Evidence/` untouched except for metadata the core contract explicitly allows.\n9. Check `review_memory(mode=\"audit\", categories=[\"unregistered_relation\"])` for relation labels that recur but are not registered; promote the ones that have earned it with `schema_memory(subject=\"relations\")`, which turns them into real typed edges instead of standing review debt.\n\n## Relation governance\nResolve typed meaning with `resolve-relation` before authoring. Reuse a specific\ntruthful match; otherwise choose honest `relates_to` or no edge. Durable recurring\nmeaning is proposal-first through `propose-relation` and hash-guarded\n`save-relations`; corrections use a new canonical key and deprecate the old one.\n\n## Output contract\nSummarize changes made or proposed, citing affected paths. Flag risky changes instead of applying them silently.\n\n## Save rules\nPreserve history. Prefer supersession when meaning changes. Keep links useful, not decorative.\n\n## Mistakes to avoid\nDo not rewrite raw sources or evidence. Do not mass-edit without reading the relevant notes. Do not collapse distinct conclusions just because they share keywords. Do not reuse a forward approval for compensation, silently continue a partial or blocked run, or turn one confirmation into standing approval.\n\n<!-- exomem-semantic-authoring:v4 sha256:837b03b15c3d83f6c6eeb50771f4eaa04e4beaaae0f7d54be249be40ce7685f7 -->\n## Semantic authoring contract\n\nEvery new, replaced, or activated active compiled note needs at least one valid, non-empty semantic unit. Either compact or rich form satisfies the minimum; compact is preferred, and a valid rich unit does not need a duplicate compact restatement.\n\nSemantic roles:\n\n- Category: One primary open-vocabulary label describes what a unit is about; rich category defaults to its governed kind unless explicitly overridden.\n- Tag: Zero or more optional secondary retrieval labels refine lookup and never replace category or determine kind.\n- Kind: The governed semantic form: compact units always use `observation`; rich units use their recognized heading kind.\n\nCompact grammar: `- [category] content #tags (context) ^anchor`. Parse valid compact observations anywhere outside fenced code blocks. Exomem writers use `-` under the canonical `## Observations` section. Parser bullet markers are `-`, `*`, `+`; the canonical marker is `-`. Parse from the end by taking anchor, then context, then trailing tags; the authored display order remains tags, context, anchor. Category uses open vocabulary.\n\n- Compact category: the unit's one primary open-vocabulary subject or domain label. After trimming, use 1-64 Unicode code points; begin with a Unicode letter; then use only Unicode letters or digits, spaces, `_`, or `-`. Apply Unicode NFKC and casefold, then collapse runs of spaces, `_`, and `-` to one `_`. Registry alias resolution is separate from authored canonicalization; an unseen valid category needs no registry write.\n- Compact content: the unit's substantive observation. Use non-empty content that remains on one Markdown line. Escaped parentheses, embedded hashes, and non-trailing tag-like text remain content.\n- Compact tags: zero or more optional secondary retrieval labels; tags do not replace the primary category or governed kind. Write `#slug`. Use 1-64 Unicode letters or digits, `_`, `-`, or `/`; begin with a letter or digit; do not use empty path segments or a trailing `/`. Use one contiguous trailing run after content and before optional context and anchor.\n- Compact context: one optional authored qualifier for the observation. Write `(<context>)`. Use one balanced, unescaped parenthesized suffix preceded by whitespace.\n- Compact anchor: one optional stable authored unit identifier. Write `^anchor`. Use 1-64 ASCII letters, digits, or hyphens and begin and end alphanumeric. Place it at the end of the line.\n- Compact exclusions: observation-shaped rows inside fenced code blocks; task labels `[ ]`, `[x]`, `[X]`, and `[-]`; reserved or punctuation-bearing bracket labels outside category grammar. Compact units do not carry typed unit relations; use a canonical note-level relation or the rich form.\n- Rich: write `## <Governed Kind>` with optional leading metadata `- category: <open category>`, `- id: <stable-id>`, `- tags: <comma-separated tags>`, `- context: <context>`, `- relations: <relation-type>: [[Target]]`. Metadata rows are optional and leading; the canonical writer emits category, id, tags, context, then relations; category defaults to the governed kind when omitted. Accepted metadata order is flexible while rows remain leading. After optional leading metadata, add a blank line and a substantive Markdown body. Typed unit relations require the rich form.\n- Rich boundary: A heading at level N owns content until the next non-fenced heading at level N or shallower; deeper headings remain in its body. `empty_rich_unit` means a recognized rich heading has no substantive body; Add substantive body content or remove the empty recognized heading.\n- Exact applicability: `compiled_intent(after_state) = canonical_compiled_destination(path) OR normalized_type in COMPILED_TYPES`. `COMPILED_TYPES` contains exactly `experiment`, `failure`, `insight`, `pattern`, `production-log`, `research-note`, with canonical destinations `experiment` → `Notes/Experiments`, `failure` → `Notes/Failures`, `insight` → `Notes/Insights`, `pattern` → `Notes/Patterns`, `production-log` → `Notes/Productions`, `research-note` → `Notes/Research`. Reject missing, invalid, or mismatched compiled frontmatter before evaluating the minimum-unit predicate. The minimum predicate applies when the path and normalized compiled type structurally match; the result is writable managed Markdown in the governed subtree; the result is outside Sources, Evidence, and trash; no activation exclusion applies; the resolved lifecycle is active. Inactive lifecycle values are `archived`, `draft`, `dropped`, `planned`, `superseded`. Check new active creates, replacements, and inactive-to-active transitions; inactive drafts may remain unit-free until activation.\n- Existing active pages: A post-activation compliant page cannot lose its final valid semantic unit.\n- Exempt content: arbitrary non-compiled Markdown, dataset cards, Evidence artifacts, hubs, indexes, logs, non-Markdown files, schema and admin artifacts, snapshots, Sources, templates, trash.\n- Routes: use `remember` for a new compiled note, `replace_memory` for a replacement, `observe_memory` for one unit, and `edit_memory` for a small edit or activation. Tier 2 manage_memory_file create, overwrite, and append receive the same semantic precommit contract on the complete resulting compiled Markdown; prefer remember or replace_memory when their typed route fits.\n- Findings: `missing_semantic_unit` means an applicable active compiled result has no valid non-empty unit; `empty_rich_unit` means a recognized rich heading has no substantive body. Add substantive body content or remove the empty recognized heading.\n- Compact remediation: Add `## Observations` and `- [operating constraint] Keep retries bounded #reliability`.\n- Rich remediation: Alternatively add `## Decision`, a blank line, and a substantive body.\n- Semantic-unit coverage and relation-review disposition are independent obligations.\n- Portable categories: Choose exactly one primary category: prefer a meaningful epistemic or operational role and put the domain in tags, but if the role would only be a generic fact, finding, or observation and the domain is the durable lens, use a domain category instead. The category vocabulary is open: these core keys are a shared starting point, not a closed list. When no core key is a good primary fit, author a new meaningful category rather than forcing an ill-fitting one. Use exactly one primary category; kind is the governed form, tags are secondary facets, and relations are typed edges. The rich form's category defaults to its kind, so `category: decision` is redundant when the kind is Decision. Create multiple distinct semantic observations and typed relations when the source genuinely supports them, but never multiply units or relations to satisfy a quota and never duplicate the same fact. Core keys are `action`, `assumption`, `code`, `config`, `constraint`, `decision`, `design`, `fact`, `finding`, `insight`, `preference`, `problem`, `question`, `requirement`, `risk`, `technique`. Core aliases are `actions` → `action`, `assumptions` → `assumption`, `configs` → `config`, `configuration` → `config`, `configurations` → `config`, `constraints` → `constraint`, `decisions` → `decision`, `designs` → `design`, `facts` → `fact`, `findings` → `finding`, `insights` → `insight`, `open_question` → `question`, `open_questions` → `question`, `preferences` → `preference`, `problems` → `problem`, `questions` → `question`, `requirements` → `requirement`, `risks` → `risk`, `techniques` → `technique`. Role example: `- [decision] Relocate to a coastal city next spring #life ^relocation`. Domain example: `- [nutrition] Evening protein improves adherence #experiment ^evening-protein`. Breadth example (life, finance, legal/travel, and career alongside one retained code line):\n\n```markdown\n- [constraint] Keep retry windows bounded #code ^retry-windows\n- [risk] Variable-rate mortgage payments could spike #finance ^mortgage-rate-risk\n- [question] Does the destination require a visa before travel #legal #travel ^visa-requirement\n- [career] Weigh a sabbatical before the next promotion cycle #growth ^sabbatical-timing\n```\n\nRich example:\n\n```markdown\n## Decision\n- id: commit-to-morning-training\n- tags: health\n- relations: supports: [[Knowledge Base/Notes/Health/Morning training]]\n\nCommit to a fixed 6am training block on weekdays so consistency compounds and health stays the durable lens for this decision.\n```\n"
AFTER
"---\nname: exomem-curate\ndescription: Improve Exomem note quality by adding links, clarifying compiled notes, and organizing safely without editing raw Sources or Evidence.\nmetadata:\n  skill_contract: 0d23c50d8751e79c26e99bbe70bc7adfcdf460c8ba88dd7bde037f50d2190af0\n  version: \"0.2.0\"\n---\n\n# exomem-curate\n\n## Purpose\nImprove the KB graph and compiled-note quality without damaging provenance.\n\n## When to use\nUse when the user asks to clean up, organize, link, tidy, or improve a set of Exomem notes.\n\n## Portable operating rules\n\nBefore the first operation, inspect the exposed bootstrap schema. If it lacks `skill_contract`, obtain `bootstrap(profile=\"compact\")` directly. Otherwise obtain `bootstrap(profile=\"session\", skill_contract=<metadata.skill_contract>)` if current policy or capabilities are missing; honor `engagement.envelope` and `available_product_tools`. Reuse returned state until policy, connection, adapter, or returned vault configuration/registry state changes. If the server rejects the session profile or argument, obtain `bootstrap(profile=\"compact\")` once. Use the harness's supported discovery mechanism and load only the tools needed now. If the applicable local procedure cannot be read, obtain the portable compact contract; do not improvise a write.\n\nDo not invoke tools absent from `available_product_tools`; use the live capability list even when a bundled workflow mentions a withheld operation.\n\nUse `configure_memory` set/clear only for an explicit user request to change saved engagement.\nRecall, capture, installation and missing hooks use the existing preference;\nnone authorizes changing it. Inspect first when the user requests a change.\n\nSources/Evidence are immutable, and content outside the managed Knowledge Base\nis read-only. Before a compiled write: reuse current relevant search/read results,\ncheck for duplicates, and include known source references and reviewed connections\nin the first write. Use `connect_memory(operation=\"suggest-links\")` when useful\nconnections are still unknown, not to recheck links already established in context.\nHonor the live confirmation ceiling;\na workflow or standing capture preference does not grant restructure authority.\n\nInspect mutation results before reporting success. On `success: false`, follow\nthe structured error. For warming, busy, pending, or\n`MUTATION_COMMITTED_ACKNOWLEDGEMENT_UNCERTAIN`, preserve the same mutation identity\nand unchanged payload; wait/reconcile/retry only as instructed, never with a new\nidentity after an uncertain commit.\n\n## Workflow\n1. Search related notes with `ask_memory`; use `connect_memory(operation=\"suggest-links\")` for link candidates, `\"suggest-relations\"` when direction matters, and `\"graph-context\"` for graph shape or inbound links.\n2. Identify safe improvements — missing links, stale wording, weak titles, duplicate tags, or unlinked entities — starting from `review_memory(mode=\"relation-debt\")` for pages with no outbound edges and `mode=\"relation-queue\"` for already-reviewed candidates.\n3. For a bounded set of explicitly selected pages, call `maintain_memory(mode=\"curation\", curation_action=\"work-item\", refs=[...], paths=[...])`. This is `structural_suggestions`: it assembles recorded context and never chooses semantics or writes content.\n4. Author the typed plan yourself, then call `maintain_memory(mode=\"curation\", curation_action=\"propose\", plan={...})`. Inspect it with `maintain_memory(mode=\"curation\", curation_action=\"preview\", run_id=...)`; preview the immutable plan once and surface its exact actions, blockers, fingerprint, and compensation classes.\n5. Before any execution, treat the plan as `restructure_execution`: obtain one explicit confirmation for that exact plan fingerprint. Do not infer confirmation from the request to inspect or improve notes, and do not accept standing approval.\n6. On confirmation, call `maintain_memory(mode=\"curation\", curation_action=\"apply\", run_id=..., plan_id=..., expected_plan_fingerprint=..., why=...)`. If the phase remains `executing`, resume automatically one step per request with `maintain_memory(mode=\"curation\", curation_action=\"resume\", run_id=..., plan_id=...)` until terminal; stop on `partial` or `blocked` and report the durable evidence instead of improvising.\n7. Compensation is a new reviewed plan, never rollback. `curation_action=\"propose-compensation\"` is `structural_suggestions`: use it to derive the plan, then preview it and obtain a fresh exact-plan confirmation before `maintain_memory(mode=\"curation\", curation_action=\"apply-compensation\", run_id=..., plan_id=..., expected_plan_fingerprint=..., why=...)`. Continue the already-approved compensation plan only through the same one-step `resume` route; resume does not need a fresh confirmation for each step.\n8. Leave raw `Sources/` and `Evidence/` untouched except for metadata the core contract explicitly allows.\n9. Check `review_memory(mode=\"audit\", categories=[\"unregistered_relation\"])` for relation labels that recur but are not registered; promote the ones that have earned it with `schema_memory(subject=\"relations\")`, which turns them into real typed edges instead of standing review debt.\n\n## Vocabulary\n\nRead [vocabulary](references/vocabulary.md) before changing a registry.\nIf the vocabulary reference is missing, inspect the exposed bootstrap schema.\nUse `bootstrap(profile=\"compact\", section=\"vocabulary\")`, or\n`bootstrap(profile=\"full\")` when `section` is unavailable. Follow the returned\ninspect routes and `save` contract. Reuse or alias before proposing justified\nnew meaning; save with the current hash and `why`. Report saved versus queued\nand the returned restore route. Use only exposed operations.\n\n## Relation governance\nResolve typed meaning with `resolve-relation` before authoring. Reuse a specific\ntruthful match; otherwise choose honest `relates_to` or no edge. Durable recurring\nmeaning is proposal-first through `propose-relation` and hash-guarded\n`save-relations`; corrections use a new canonical key and deprecate the old one.\n\n## Output contract\nSummarize changes made or proposed, citing affected paths. Flag risky changes instead of applying them silently.\n\n## Save rules\nPreserve history. Prefer supersession when meaning changes. Keep links useful, not decorative.\n\n## Mistakes to avoid\nDo not rewrite raw sources or evidence. Do not mass-edit without reading the relevant notes. Do not collapse distinct conclusions just because they share keywords. Do not reuse a forward approval for compensation, silently continue a partial or blocked run, or turn one confirmation into standing approval.\n\n<!-- exomem-semantic-authoring:v8 sha256:4f1a876ac71d48ed55481e9083522afb38393521c8c64b37e73800bb3028ec7d -->\n## Semantic authoring contract\n\nEvery new, replaced, or activated compiled note in the live class needs at least one valid, non-empty semantic unit. Either compact or rich form satisfies the minimum; compact is preferred, and a valid rich unit does not need a duplicate compact restatement.\n\nSemantic roles:\n\n- Category: One primary open-vocabulary label describes what a unit is about; rich category defaults to its governed kind unless explicitly overridden.\n- Tag: Zero or more optional secondary retrieval labels refine lookup and never replace category or determine kind.\n- Kind: The governed semantic form: compact units always use `observation`; rich units use their recognized heading kind.\n\nCompact grammar: `- [category] content #tags (context) ^anchor`. Parse valid compact observations anywhere outside fenced code blocks. Exomem writers use `-` under the canonical `## Observations` section. Parser bullet markers are `-`, `*`, `+`; the canonical marker is `-`. Parse from the end by taking anchor, then context, then trailing tags; the authored display order remains tags, context, anchor. Category uses open vocabulary.\n\n- Compact category: the unit's one primary open-vocabulary subject or domain label. After trimming, use 1-64 Unicode code points; begin with a Unicode letter; then use only Unicode letters or digits, spaces, `_`, or `-`. Apply Unicode NFKC and casefold, then collapse runs of spaces, `_`, and `-` to one `_`. Registry alias resolution is separate from authored canonicalization; an unseen valid category needs no registry write.\n- Compact content: the unit's substantive observation. Use non-empty content that remains on one Markdown line. Escaped parentheses, embedded hashes, and non-trailing tag-like text remain content.\n- Compact tags: zero or more optional secondary retrieval labels; tags do not replace the primary category or governed kind. Write `#slug`. Use 1-64 Unicode letters or digits, `_`, `-`, or `/`; begin with a letter or digit; do not use empty path segments or a trailing `/`. Use one contiguous trailing run after content and before optional context and anchor.\n- Compact context: one optional authored qualifier for the observation. Write `(<context>)`. Use one balanced, unescaped parenthesized suffix preceded by whitespace.\n- Compact anchor: one optional stable authored unit identifier. Write `^anchor`. Use 1-64 ASCII letters, digits, or hyphens and begin and end alphanumeric. Place it at the end of the line.\n- Compact exclusions: observation-shaped rows inside fenced code blocks; task labels `[ ]`, `[x]`, `[X]`, and `[-]`; reserved or punctuation-bearing bracket labels outside category grammar. Compact units do not carry typed unit relations; use a canonical note-level relation or the rich form.\n- Rich: write `## <Governed Kind>` with optional leading metadata `- category: <open category>`, `- id: <stable-id>`, `- tags: <comma-separated tags>`, `- context: <context>`, `- relations: <relation-type>: [[Target]]`, `- verdict: <epistemic outcome>`, `- check_by: <ISO revisit date>`. Metadata rows are optional and leading; the canonical writer emits category, id, tags, context, relations, verdict and check_by; category defaults to the governed kind when omitted. Accepted metadata order is flexible while rows remain leading. After optional leading metadata, add a blank line and a substantive Markdown body. Typed unit relations require the rich form. A `#anchor` target addresses a unit.\n- Epistemic corrections: Inspect affected claims and evidence. Distinguish attributed accounts from established facts. Correct suitable existing units with guarded writers, justified verdicts and exact links; verify current state. Refutation alone changes neither lifecycle nor rank. Writers retain prior interpretations; request bootstrap with profile=full for history guidance. Keep an anchored unit's identity when its wording changes. Preserve a false historical proposition and author its verdict; add a distinct corrective unit when useful. Refutation and contradiction do not imply supersession or reduce rank. The semantic writer retains prior interpretations atomically. Read revision_history with read_memory(include_history=true), optionally for unit_ref, using history_limit and history_continuation. Existing history remains the page's operation log. Entities and legacy pages use their existing edit owner; Records use guarded row corrections and history. Corrections need no dated child, special user nudge, or confirmation beyond the active engagement policy.\n- Rich boundary: A heading at level N owns content until the next non-fenced heading at level N or shallower; deeper headings remain in its body. `empty_rich_unit` means a recognized rich heading has no substantive body; Add substantive body content or remove the empty recognized heading.\n- Exact applicability: obtain `bootstrap(profile=\"compact\", section=\"authoring\")` and read `semantic_authoring.minimum_semantic_unit` for current structural applicability and the status-class rule. If the exposed bootstrap schema lacks `section`, use `bootstrap(profile=\"full\")` instead; released profiles reject section arguments. Apply `compiled_intent(after_state) = canonical_compiled_destination(path) OR the normalized type's note-type role is compiled`. Shipped compiled types: `research-note` in `Notes/Research`, `insight` in `Notes/Insights`, `failure` in `Notes/Failures`, `pattern` in `Notes/Patterns`, `experiment` in `Notes/Experiments`, `production-log` in `Notes/Productions`. More may be registered; `schema_memory(subject=\"note-types\", operation=\"inspect\")` lists the live set. Reject missing, invalid, or mismatched compiled frontmatter before evaluating the minimum-unit predicate. The minimum predicate applies when the path and normalized compiled type structurally match; the result is writable managed Markdown in the governed subtree; the result is outside Sources, Evidence, and trash; no activation exclusion applies; the admitted effective status class is live. Check live creates, replacements and transitions to live; pending compiled notes may remain unit-free until activation.\n- Existing active pages: A post-activation compliant page cannot lose its final valid semantic unit.\n- Exempt content: arbitrary non-compiled Markdown, dataset cards, Evidence artifacts, hubs, indexes, logs, non-Markdown files, schema and admin artifacts, snapshots, Sources, templates, trash.\n- Routes: use `remember` for a new compiled note, `replace_memory` for a replacement, `observe_memory` for one unit, and `edit_memory` for a small edit or activation. Tier 2 manage_memory_file create, overwrite, and append receive the same semantic precommit contract on the complete resulting compiled Markdown; prefer remember or replace_memory when their typed route fits.\n- Findings: `missing_semantic_unit` means an applicable live-class compiled result has no valid non-empty unit; `empty_rich_unit` means a recognized rich heading has no substantive body. Add substantive body content or remove the empty recognized heading.\n- Compact remediation: Add `## Observations` and `- [operating constraint] Keep retries bounded #reliability`.\n- Rich remediation: Alternatively add `## Decision`, a blank line, and a substantive body.\n- Semantic-unit coverage and relation-review disposition are independent obligations.\n- Portable categories: Choose exactly one primary category: prefer a meaningful epistemic or operational role and put the domain in tags, but if the role would only be a generic fact, finding, or observation and the domain is the durable lens, use a domain category instead. The category vocabulary is open: these core keys are a shared starting point, not a closed list. When no core key is a good primary fit, author a new meaningful category rather than forcing an ill-fitting one. Use exactly one primary category; kind is the governed form, tags are secondary facets, and relations are typed edges. The rich form's category defaults to its kind, so `category: decision` is redundant when the kind is Decision. Create multiple distinct semantic observations and typed relations when the source genuinely supports them, but never multiply units or relations to satisfy a quota and never duplicate the same fact. Core keys are `action`, `assumption`, `code`, `config`, `constraint`, `decision`, `design`, `fact`, `finding`, `insight`, `preference`, `problem`, `question`, `requirement`, `risk`, `technique`. Core aliases are `actions` → `action`, `assumptions` → `assumption`, `configs` → `config`, `configuration` → `config`, `configurations` → `config`, `constraints` → `constraint`, `decisions` → `decision`, `designs` → `design`, `facts` → `fact`, `findings` → `finding`, `insights` → `insight`, `open_question` → `question`, `open_questions` → `question`, `preferences` → `preference`, `problems` → `problem`, `questions` → `question`, `requirements` → `requirement`, `risks` → `risk`, `techniques` → `technique`. Role example: `- [decision] Relocate to a coastal city next spring #life ^relocation`. Domain example: `- [nutrition] Evening protein improves adherence #experiment ^evening-protein`. Breadth example (life, finance, legal/travel, and career alongside one retained code line):\n\n```markdown\n- [constraint] Keep retry windows bounded #code ^retry-windows\n- [risk] Variable-rate mortgage payments could spike #finance ^mortgage-rate-risk\n- [question] Does the destination require a visa before travel #legal #travel ^visa-requirement\n- [career] Weigh a sabbatical before the next promotion cycle #growth ^sabbatical-timing\n```\n\nRich example:\n\n```markdown\n## Decision\n- id: commit-to-morning-training\n- tags: health\n- relations: supports: [[Knowledge Base/Notes/Health/Morning training]]\n\nCommit to a fixed 6am training block on weekdays so consistency compounds and health stays the durable lens for this decision.\n```\n"
Full snapshot data
{
  "description": "Improve Exomem note quality by adding links, clarifying compiled notes, and organizing safely without editing raw Sources or Evidence.",
  "included_files": [
    {
      "relative_path": "references/audit-checks.md",
      "size_in_bytes": 13831
    },
    {
      "relative_path": "references/before-writing.md",
      "size_in_bytes": 5923
    },
    {
      "relative_path": "references/engagement.md",
      "size_in_bytes": 21333
    },
    {
      "relative_path": "references/frontmatter.md",
      "size_in_bytes": 12579
    },
    {
      "relative_path": "references/governance.md",
      "size_in_bytes": 8806
    },
    {
      "relative_path": "references/mutation-results.md",
      "size_in_bytes": 7511
    },
    {
      "relative_path": "references/operation-routing.md",
      "size_in_bytes": 21424
    },
    {
      "relative_path": "references/operations.md",
      "size_in_bytes": 56563
    },
    {
      "relative_path": "references/page-types.md",
      "size_in_bytes": 20100
    },
    {
      "relative_path": "references/planning-records.md",
      "size_in_bytes": 15811
    },
    {
      "relative_path": "references/recall.md",
      "size_in_bytes": 19357
    },
    {
      "relative_path": "references/semantic-authoring.md",
      "size_in_bytes": 10041
    },
    {
      "relative_path": "references/supersession.md",
      "size_in_bytes": 5440
    },
    {
      "relative_path": "references/vault-care.md",
      "size_in_bytes": 13050
    },
    {
      "relative_path": "references/vocabulary.md",
      "size_in_bytes": 5660
    },
    {
      "relative_path": "references/write-scope.md",
      "size_in_bytes": 10880
    },
    {
      "relative_path": "references/writing.md",
      "size_in_bytes": 29475
    }
  ],
  "name": "exomem-curate",
  "skill_md_contents": "---\nname: exomem-curate\ndescription: Improve Exomem note quality by adding links, clarifying compiled notes, and organizing safely without editing raw Sources or Evidence.\nmetadata:\n  skill_contract: 0d23c50d8751e79c26e99bbe70bc7adfcdf460c8ba88dd7bde037f50d2190af0\n  version: \"0.2.0\"\n---\n\n# exomem-curate\n\n## Purpose\nImprove the KB graph and compiled-note quality without damaging provenance.\n\n## When to use\nUse when the user asks to clean up, organize, link, tidy, or improve a set of Exomem notes.\n\n## Portable operating rules\n\nBefore the first operation, inspect the exposed bootstrap schema. If it lacks `skill_contract`, obtain `bootstrap(profile=\"compact\")` directly. Otherwise obtain `bootstrap(profile=\"session\", skill_contract=<metadata.skill_contract>)` if current policy or capabilities are missing; honor `engagement.envelope` and `available_product_tools`. Reuse returned state until policy, connection, adapter, or returned vault configuration/registry state changes. If the server rejects the session profile or argument, obtain `bootstrap(profile=\"compact\")` once. Use the harness's supported discovery mechanism and load only the tools needed now. If the applicable local procedure cannot be read, obtain the portable compact contract; do not improvise a write.\n\nDo not invoke tools absent from `available_product_tools`; use the live capability list even when a bundled workflow mentions a withheld operation.\n\nUse `configure_memory` set/clear only for an explicit user request to change saved engagement.\nRecall, capture, installation and missing hooks use the existing preference;\nnone authorizes changing it. Inspect first when the user requests a change.\n\nSources/Evidence are immutable, and content outside the managed Knowledge Base\nis read-only. Before a compiled write: reuse current relevant search/read results,\ncheck for duplicates, and include known source references and reviewed connections\nin the first write. Use `connect_memory(operation=\"suggest-links\")` when useful\nconnections are still unknown, not to recheck links already established in context.\nHonor the live confirmation ceiling;\na workflow or standing capture preference does not grant restructure authority.\n\nInspect mutation results before reporting success. On `success: false`, follow\nthe structured error. For warming, busy, pending, or\n`MUTATION_COMMITTED_ACKNOWLEDGEMENT_UNCERTAIN`, preserve the same mutation identity\nand unchanged payload; wait/reconcile/retry only as instructed, never with a new\nidentity after an uncertain commit.\n\n## Workflow\n1. Search related notes with `ask_memory`; use `connect_memory(operation=\"suggest-links\")` for link candidates, `\"suggest-relations\"` when direction matters, and `\"graph-context\"` for graph shape or inbound links.\n2. Identify safe improvements — missing links, stale wording, weak titles, duplicate tags, or unlinked entities — starting from `review_memory(mode=\"relation-debt\")` for pages with no outbound edges and `mode=\"relation-queue\"` for already-reviewed candidates.\n3. For a bounded set of explicitly selected pages, call `maintain_memory(mode=\"curation\", curation_action=\"work-item\", refs=[...], paths=[...])`. This is `structural_suggestions`: it assembles recorded context and never chooses semantics or writes content.\n4. Author the typed plan yourself, then call `maintain_memory(mode=\"curation\", curation_action=\"propose\", plan={...})`. Inspect it with `maintain_memory(mode=\"curation\", curation_action=\"preview\", run_id=...)`; preview the immutable plan once and surface its exact actions, blockers, fingerprint, and compensation classes.\n5. Before any execution, treat the plan as `restructure_execution`: obtain one explicit confirmation for that exact plan fingerprint. Do not infer confirmation from the request to inspect or improve notes, and do not accept standing approval.\n6. On confirmation, call `maintain_memory(mode=\"curation\", curation_action=\"apply\", run_id=..., plan_id=..., expected_plan_fingerprint=..., why=...)`. If the phase remains `executing`, resume automatically one step per request with `maintain_memory(mode=\"curation\", curation_action=\"resume\", run_id=..., plan_id=...)` until terminal; stop on `partial` or `blocked` and report the durable evidence instead of improvising.\n7. Compensation is a new reviewed plan, never rollback. `curation_action=\"propose-compensation\"` is `structural_suggestions`: use it to derive the plan, then preview it and obtain a fresh exact-plan confirmation before `maintain_memory(mode=\"curation\", curation_action=\"apply-compensation\", run_id=..., plan_id=..., expected_plan_fingerprint=..., why=...)`. Continue the already-approved compensation plan only through the same one-step `resume` route; resume does not need a fresh confirmation for each step.\n8. Leave raw `Sources/` and `Evidence/` untouched except for metadata the core contract explicitly allows.\n9. Check `review_memory(mode=\"audit\", categories=[\"unregistered_relation\"])` for relation labels that recur but are not registered; promote the ones that have earned it with `schema_memory(subject=\"relations\")`, which turns them into real typed edges instead of standing review debt.\n\n## Vocabulary\n\nRead [vocabulary](references/vocabulary.md) before changing a registry.\nIf the vocabulary reference is missing, inspect the exposed bootstrap schema.\nUse `bootstrap(profile=\"compact\", section=\"vocabulary\")`, or\n`bootstrap(profile=\"full\")` when `section` is unavailable. Follow the returned\ninspect routes and `save` contract. Reuse or alias before proposing justified\nnew meaning; save with the current hash and `why`. Report saved versus queued\nand the returned restore route. Use only exposed operations.\n\n## Relation governance\nResolve typed meaning with `resolve-relation` before authoring. Reuse a specific\ntruthful match; otherwise choose honest `relates_to` or no edge. Durable recurring\nmeaning is proposal-first through `propose-relation` and hash-guarded\n`save-relations`; corrections use a new canonical key and deprecate the old one.\n\n## Output contract\nSummarize changes made or proposed, citing affected paths. Flag risky changes instead of applying them silently.\n\n## Save rules\nPreserve history. Prefer supersession when meaning changes. Keep links useful, not decorative.\n\n## Mistakes to avoid\nDo not rewrite raw sources or evidence. Do not mass-edit without reading the relevant notes. Do not collapse distinct conclusions just because they share keywords. Do not reuse a forward approval for compensation, silently continue a partial or blocked run, or turn one confirmation into standing approval.\n\n<!-- exomem-semantic-authoring:v8 sha256:4f1a876ac71d48ed55481e9083522afb38393521c8c64b37e73800bb3028ec7d -->\n## Semantic authoring contract\n\nEvery new, replaced, or activated compiled note in the live class needs at least one valid, non-empty semantic unit. Either compact or rich form satisfies the minimum; compact is preferred, and a valid rich unit does not need a duplicate compact restatement.\n\nSemantic roles:\n\n- Category: One primary open-vocabulary label describes what a unit is about; rich category defaults to its governed kind unless explicitly overridden.\n- Tag: Zero or more optional secondary retrieval labels refine lookup and never replace category or determine kind.\n- Kind: The governed semantic form: compact units always use `observation`; rich units use their recognized heading kind.\n\nCompact grammar: `- [category] content #tags (context) ^anchor`. Parse valid compact observations anywhere outside fenced code blocks. Exomem writers use `-` under the canonical `## Observations` section. Parser bullet markers are `-`, `*`, `+`; the canonical marker is `-`. Parse from the end by taking anchor, then context, then trailing tags; the authored display order remains tags, context, anchor. Category uses open vocabulary.\n\n- Compact category: the unit's one primary open-vocabulary subject or domain label. After trimming, use 1-64 Unicode code points; begin with a Unicode letter; then use only Unicode letters or digits, spaces, `_`, or `-`. Apply Unicode NFKC and casefold, then collapse runs of spaces, `_`, and `-` to one `_`. Registry alias resolution is separate from authored canonicalization; an unseen valid category needs no registry write.\n- Compact content: the unit's substantive observation. Use non-empty content that remains on one Markdown line. Escaped parentheses, embedded hashes, and non-trailing tag-like text remain content.\n- Compact tags: zero or more optional secondary retrieval labels; tags do not replace the primary category or governed kind. Write `#slug`. Use 1-64 Unicode letters or digits, `_`, `-`, or `/`; begin with a letter or digit; do not use empty path segments or a trailing `/`. Use one contiguous trailing run after content and before optional context and anchor.\n- Compact context: one optional authored qualifier for the observation. Write `(<context>)`. Use one balanced, unescaped parenthesized suffix preceded by whitespace.\n- Compact anchor: one optional stable authored unit identifier. Write `^anchor`. Use 1-64 ASCII letters, digits, or hyphens and begin and end alphanumeric. Place it at the end of the line.\n- Compact exclusions: observation-shaped rows inside fenced code blocks; task labels `[ ]`, `[x]`, `[X]`, and `[-]`; reserved or punctuation-bearing bracket labels outside category grammar. Compact units do not carry typed unit relations; use a canonical note-level relation or the rich form.\n- Rich: write `## <Governed Kind>` with optional leading metadata `- category: <open category>`, `- id: <stable-id>`, `- tags: <comma-separated tags>`, `- context: <context>`, `- relations: <relation-type>: [[Target]]`, `- verdict: <epistemic outcome>`, `- check_by: <ISO revisit date>`. Metadata rows are optional and leading; the canonical writer emits category, id, tags, context, relations, verdict and check_by; category defaults to the governed kind when omitted. Accepted metadata order is flexible while rows remain leading. After optional leading metadata, add a blank line and a substantive Markdown body. Typed unit relations require the rich form. A `#anchor` target addresses a unit.\n- Epistemic corrections: Inspect affected claims and evidence. Distinguish attributed accounts from established facts. Correct suitable existing units with guarded writers, justified verdicts and exact links; verify current state. Refutation alone changes neither lifecycle nor rank. Writers retain prior interpretations; request bootstrap with profile=full for history guidance. Keep an anchored unit's identity when its wording changes. Preserve a false historical proposition and author its verdict; add a distinct corrective unit when useful. Refutation and contradiction do not imply supersession or reduce rank. The semantic writer retains prior interpretations atomically. Read revision_history with read_memory(include_history=true), optionally for unit_ref, using history_limit and history_continuation. Existing history remains the page's operation log. Entities and legacy pages use their existing edit owner; Records use guarded row corrections and history. Corrections need no dated child, special user nudge, or confirmation beyond the active engagement policy.\n- Rich boundary: A heading at level N owns content until the next non-fenced heading at level N or shallower; deeper headings remain in its body. `empty_rich_unit` means a recognized rich heading has no substantive body; Add substantive body content or remove the empty recognized heading.\n- Exact applicability: obtain `bootstrap(profile=\"compact\", section=\"authoring\")` and read `semantic_authoring.minimum_semantic_unit` for current structural applicability and the status-class rule. If the exposed bootstrap schema lacks `section`, use `bootstrap(profile=\"full\")` instead; released profiles reject section arguments. Apply `compiled_intent(after_state) = canonical_compiled_destination(path) OR the normalized type's note-type role is compiled`. Shipped compiled types: `research-note` in `Notes/Research`, `insight` in `Notes/Insights`, `failure` in `Notes/Failures`, `pattern` in `Notes/Patterns`, `experiment` in `Notes/Experiments`, `production-log` in `Notes/Productions`. More may be registered; `schema_memory(subject=\"note-types\", operation=\"inspect\")` lists the live set. Reject missing, invalid, or mismatched compiled frontmatter before evaluating the minimum-unit predicate. The minimum predicate applies when the path and normalized compiled type structurally match; the result is writable managed Markdown in the governed subtree; the result is outside Sources, Evidence, and trash; no activation exclusion applies; the admitted effective status class is live. Check live creates, replacements and transitions to live; pending compiled notes may remain unit-free until activation.\n- Existing active pages: A post-activation compliant page cannot lose its final valid semantic unit.\n- Exempt content: arbitrary non-compiled Markdown, dataset cards, Evidence artifacts, hubs, indexes, logs, non-Markdown files, schema and admin artifacts, snapshots, Sources, templates, trash.\n- Routes: use `remember` for a new compiled note, `replace_memory` for a replacement, `observe_memory` for one unit, and `edit_memory` for a small edit or activation. Tier 2 manage_memory_file create, overwrite, and append receive the same semantic precommit contract on the complete resulting compiled Markdown; prefer remember or replace_memory when their typed route fits.\n- Findings: `missing_semantic_unit` means an applicable live-class compiled result has no valid non-empty unit; `empty_rich_unit` means a recognized rich heading has no substantive body. Add substantive body content or remove the empty recognized heading.\n- Compact remediation: Add `## Observations` and `- [operating constraint] Keep retries bounded #reliability`.\n- Rich remediation: Alternatively add `## Decision`, a blank line, and a substantive body.\n- Semantic-unit coverage and relation-review disposition are independent obligations.\n- Portable categories: Choose exactly one primary category: prefer a meaningful epistemic or operational role and put the domain in tags, but if the role would only be a generic fact, finding, or observation and the domain is the durable lens, use a domain category instead. The category vocabulary is open: these core keys are a shared starting point, not a closed list. When no core key is a good primary fit, author a new meaningful category rather than forcing an ill-fitting one. Use exactly one primary category; kind is the governed form, tags are secondary facets, and relations are typed edges. The rich form's category defaults to its kind, so `category: decision` is redundant when the kind is Decision. Create multiple distinct semantic observations and typed relations when the source genuinely supports them, but never multiply units or relations to satisfy a quota and never duplicate the same fact. Core keys are `action`, `assumption`, `code`, `config`, `constraint`, `decision`, `design`, `fact`, `finding`, `insight`, `preference`, `problem`, `question`, `requirement`, `risk`, `technique`. Core aliases are `actions` → `action`, `assumptions` → `assumption`, `configs` → `config`, `configuration` → `config`, `configurations` → `config`, `constraints` → `constraint`, `decisions` → `decision`, `designs` → `design`, `facts` → `fact`, `findings` → `finding`, `insights` → `insight`, `open_question` → `question`, `open_questions` → `question`, `preferences` → `preference`, `problems` → `problem`, `questions` → `question`, `requirements` → `requirement`, `risks` → `risk`, `techniques` → `technique`. Role example: `- [decision] Relocate to a coastal city next spring #life ^relocation`. Domain example: `- [nutrition] Evening protein improves adherence #experiment ^evening-protein`. Breadth example (life, finance, legal/travel, and career alongside one retained code line):\n\n```markdown\n- [constraint] Keep retry windows bounded #code ^retry-windows\n- [risk] Variable-rate mortgage payments could spike #finance ^mortgage-rate-risk\n- [question] Does the destination require a visa before travel #legal #travel ^visa-requirement\n- [career] Weigh a sabbatical before the next promotion cycle #growth ^sabbatical-timing\n```\n\nRich example:\n\n```markdown\n## Decision\n- id: commit-to-morning-training\n- tags: health\n- relations: supports: [[Knowledge Base/Notes/Health/Morning training]]\n\nCommit to a fixed 6am training block on weekdays so consistency compounds and health stays the durable lens for this decision.\n```\n"
}

SHA-256 of public snapshot: 04d217e2f46ce0a5b1ba058f169eac1c45936d296c68ae3dbe38eb3f504c946b