Skip to content

Releases: SI-GMT/SecondBrain

v0.5.4 — Zero-orphan-atom invariant + cross-links

26 Apr 18:30

Choose a tag to compare

Highlights

Zero-orphan-atom invariant. Every file persisted in the vault now carries at least one link (inbound or outbound). No more isolated nodes in Obsidian's graph view.

What's new

Doctrine bloc — core/procedures/_linking.md

A new shared bloc, included by mem-archive, mem-promote-domain and _router. It specifies:

  • The link contract per file kind (index, context.md, history.md, archives, transverse atoms).
  • The standard intro line format for context.md and history.md, sourced from core/i18n/strings.yaml ({language}.context.intro_with_links, {language}.history.intro_with_links).
  • The rule for transverse atoms (40-principles/, 20-knowledge/, 50-goals/, 60-people/): mandatory project: or domain: frontmatter, mandatory context_origin: "[[founding-archive]]", and append to the founding archive's derived_atoms array. Otherwise → write to 00-inbox/ with tag unlinked-atom and report to user.

i18n strings.yaml extended

Added context.intro_with_links and history.intro_with_links keys for all 5 bundled languages (en/fr/es/de/ru).

Example for fr:

  • > Snapshot mutable du projet. Voir aussi : [historique](history.md) · [archives/](archives/)
  • > Fil chronologique des sessions du projet. Voir aussi : [contexte](context.md)

scripts/enforce-linking.py

Idempotent retroactive utility for vaults pre-dating this rule. Detects the user's language from memory-kit.json, loads the localized intro lines from strings.yaml, and inserts or rewrites the intro right after the frontmatter of every context.md and history.md across all projects and domains.

Migration path

For an existing vault upgrading from v0.5.3 to v0.5.4:

python scripts/enforce-linking.py --vault ~/vault --dry-run  # inspect
python scripts/enforce-linking.py --vault ~/vault            # apply

No structural changes; only intro lines added. Safe to re-run (idempotent).

Why it matters

Without this, context.md files were orphans in Obsidian's graph view: not listed in index.md (by doctrine — mutable snapshots), not referenced in history.md, no outbound links of their own. The graph showed them as isolated nodes, invisible to graph navigation.

With v0.5.4, every project's context.mdhistory.md are mutually linked, both rooted in the index via the project's history.md entry. The graph is now connected, and mem-recall can traverse the lineage cleanly.

Full Changelog: v0.5.3...v0.5.4