Files
tolaria/docs/adr/0012-underscore-system-properties.md
Test 4eca4cb545 docs: backfill ADRs 0011–0015 (historical decisions)
0011: Keyword search only (remove QMD semantic indexing)
0012: Underscore convention for system properties
0013: BlockNote as the rich text editor
0014: Wikilink-based relationship model
0015: Note type system (types as files)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 10:55:14 +01:00

1.8 KiB

type, id, title, status, date
type id title status date
ADR 0012 Underscore convention for system properties active 2026-03-24

Context

As Laputa added more internal configuration stored in note frontmatter (type icons, colors, pinned properties, sidebar labels), these system fields cluttered the user-facing Properties panel alongside user-defined fields. There was no convention to distinguish system-internal fields from user-visible ones.

Decision

Any frontmatter field whose name starts with _ is a system property: hidden from the Properties panel, not exposed in search or filters, but editable in the raw editor. All future system-level frontmatter fields must use the _field_name convention.

Options considered

  • Option A (chosen): Underscore prefix convention (_icon, _color, _order) — pros: simple, familiar (Unix hidden files), no schema needed, parsers just filter on prefix / cons: relies on naming discipline, no enforcement beyond convention
  • Option B: Separate YAML block or nested key (e.g., system: namespace) — pros: clean separation / cons: breaks flat key-value assumption, complicates frontmatter parsing
  • Option C: Store system config in separate sidecar files — pros: clean frontmatter / cons: doubles file count for type notes, harder to keep in sync

Consequences

  • Frontmatter parsers (Rust and TypeScript) filter _* fields before passing properties to the UI
  • System properties are still plain YAML — readable and editable by humans and external tools
  • Power users can modify system properties via the raw editor
  • Examples: _icon, _color, _order, _sidebar_label, _pinned_properties
  • All new features that need per-note or per-type configuration must use this convention
  • Re-evaluate if the number of system properties grows large enough to warrant a nested namespace