Focus — Lessons
Section titled “Focus — Lessons”Gotchas, failed approaches, process decisions.
- Windows
.lnkshortcuts no separate “Arguments” field — Properties dialog: target + arguments one string, Target box. Chromium browser already running singleton (e.g. Comet, autostart own shortcut): launchingcomet.exe --app=<url>from second shortcut opens new window, not retarget existing pinned tab. No shortcut-level way switch tabs in running instance. Browser autostarts own shortcut → don’t add second shortcut retarget it — fix inside browser (pin right tab), not Windows Startup. - Chromium “On startup → Open a specific page” replaces whole session — discards every previously-open tab, not just adds one. Goal “always show page X and keep other tabs” → answer: “Continue where you left off” + pin page X — pinned tabs restore part of session-restore, both needs met, no startup-page override.
- Obsidian embeds (
!Note) for SSOT transclusion — uselinkvs!embeddeliberately. Plain wikilink still leaves referencing note duplicate text — SSOT violation persists, just link bolted on. Embed transcludes actual content — one place edit. Standing convention:Core/Processes/Projects/KB-OS/KB-OS-Usage.md→ Conventions table. - Heading-scoped section extraction must treat “next heading equal-or-higher level” correctly — nested headings silently leak through. Resolving
!Notebuild time (sites/{mbr,sdc}/src/utils/load-focus-content.ts), section boundary = “stop at next heading level ≤ target heading’s level.” Subsection nested one level deeper (e.g.### Foounder## Statement) NOT boundary — still inside section, gets pulled in.SDC/Strategy/Identity/Mission.mdhad stale### Mission Remindersright after## Statement’s content, no intervening##— nested deeper not sibling, leaked into embed first pass. Fix: promote to## Mission Reminders(explicit sibling) so boundary regex correctly stopped. Adding new heading-scoped embed target: check actual heading levels source note, not visual position file — also strip stray markdown horizontal-rule (---) lines landed inside extracted section, not heading boundaries either. Discovered: Mission-SSOT task, 2026-07-30. - Ecco-style per-item columns and notepad views in Obsidian — which query form does what. Fields live on the list item as inline
[key:: value]; read back viaTABLE ... FLATTEN file.lists AS item. Item text echoes its own fields in the cell — strip withregexreplace(item.text, "\s*\[\w+::[^\]]*\]", ""). Then, by query form:TABLEfilters correctly, flat, but one level of ancestry can be computed back as aParentcolumn (roots render-).LISTfilters correctly, flattens — matches render flush left, tree gone.TASKnests but does NOT filter — it matches top-level items only, drags every descendant along regardless of their fields (threethisWeekitems rendered inside atodayview), and ignores fields on subtasks entirely, so a query matching only a deep item returns “No results to show”. Filtered AND nested =dataviewjsonly — walk the outline, keep matches plus their ancestor chain, italicise the ancestors. Bases is one row per file, never per bullet (Obsidian docs: “each row is a file, and each column is a property of that file”) — its cells ARE editable and write back to frontmatter, but file-per-item flattens hierarchy to aparent:property, so it is not an outline route. Verify tree logic in a Node/Python harness first — Obsidian has no headless render. Discovered:ecco-replacement-research, 2026-08-20; proofs atFocus/proofs/.