diff --git a/family/how-to/htpc-bazzite-proton.md b/family/how-to/htpc-bazzite-proton.md index afcf9f3b..fc8add49 100644 --- a/family/how-to/htpc-bazzite-proton.md +++ b/family/how-to/htpc-bazzite-proton.md @@ -33,13 +33,8 @@ on Proton 8.0. - **Rayman Origins** (fixed 2026-05-23 — GE-Proton10-34 + `WINEDLLOVERRIDES=\"d3d9=b\" %command%`) - Samurai Gunn (works but **gamepad not detected**) - GTA V, Cuphead (assumed; not retested) -<<<<<<< HEAD -- **VK GameCenter** (GE-Proton10-34, shared prefix c Lutris, авторизация через Lutris + `vk-login-helper`) -- **Atomic Heart VK** (через VK GameCenter, 97GB, `Data/gamecenter/atomic heart/`, URL-схема `vkplay://play/0.2015959`) -======= - **VK GameCenter** (GE-Proton10-34, `Data/gamecenter/GameCenter/`) -- **Atomic Heart VK** (через VK GameCenter, 97GB, `Data/gamecenter/atomic heart/`) ->>>>>>> nas/main +- **Discworld Noir (NQ)** — работает, сейвы грузятся ✅ - **Doom 3 BFG** (через flatpak Classic-RBDOOM-3-BFG) ## Removed from Steam shortcuts ✅ @@ -56,9 +51,6 @@ on Proton 8.0. | Worms World Party | 2401592779 | Doesn't start | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` | | Duck Game | 2926094216 | Won't launch | `WINEDLLOVERRIDES=\"msvcp140,vcruntime140=n,b\"` | -- **Doom 3 BFG** (flatpak, appid `-2113091226`) — работает ✅ -- **Atomic Heart VK / VK GameCenter** — VK GameCenter запускается через Steam (GE-Proton10-34). Atomic Heart (97GB) установлен через GameCenter на Data. Exe GameCenter скопирован на Data (не на Windows/ — read-only). Symlink `d:` в dosdevices ведёт на `/run/media/bazzite/Data`. - ## Target: ## Still broken — fundamental issues @@ -66,7 +58,7 @@ on Proton 8.0. | Game | AppID | Symptom | What's known | What might help | |------|-------|---------|--------------|-----------------| | Atomic Bomberman / BM95 | 2875360586 | Crash "instruction at 0x0 referenced 0x7" | Win3.1-era PE32. Tried: `proton_8`, registry `Version=win98`, virtual desktop 640×480, WineBus controllers off | Dedicated 32-bit `WINEARCH=win32`; or DOSBox‑X | -| Discworld Noir | 2361018632 | "Please insert disk III" | Russian 2-CD "Zatmenie v2". 69 missing files copied ✅. Drive D: → cd2 as CD-ROM | Try cd1; or mount `.nrg` images | +| Atomic Heart VK | — | Требует VK Play авторизацию через Lutris | 97GB, GameCenter, shared prefix | Логин через Lutris на десктопе HTPC | | Final Fantasy X HD | 2642741094 | Was Japanese, no saves | `GameSetting.ini` replaced (en+HD) from Windows | Test pending | | Metal Slug X | 2938712902 | Speed wrong, controls dead | Neo-Geo emulator config issue, not Wine | — | | Metro Exodus | 3594910936 | "Unable to create interface isteamuser" | VC++ runtime copied | Needs Goldberg `steam_api64.dll` + `steam_appid.txt` | @@ -358,10 +350,8 @@ udisks2 давал неверные права для Proton I/O. После fst ## Open Questions 1. Delete `pfx/` folders for still-broken GE-Proton games (Brawlhalla, Castle Crashers, Worms WMD/WP, Duck Game) 2. Atomic Bomberman: 32-bit Wineprefix outside Proton -3. Discworld Noir: try cd1 or mount `.nrg` images -4. Metro Exodus: Goldberg Steam emulator? -5. **Atomic Heart VK:** test VK Play авторизацию, при необходимости `protontricks vcrun2019` -6. **Doom 3 BFG:** test с Luxtorpeda → rbdoom-3-bfg +3. Metro Exodus: Goldberg Steam emulator? +4. **Atomic Heart VK:** test VK Play авторизацию, при необходимости `protontricks vcrun2019` ## See Also [[personal-os-architecture]] [[obsidian-mcp-wrapper]] [[family/how-to/htpc-steam-nonsteam-shortcuts]] diff --git a/wiki/personal-os-catchup-plan-2026-04-27.md b/wiki/personal-os-catchup-plan-2026-04-27.md new file mode 100644 index 00000000..c8306b46 --- /dev/null +++ b/wiki/personal-os-catchup-plan-2026-04-27.md @@ -0,0 +1,144 @@ +--- +source: raw/personal-os-catchup-plan-2026-04-27.md +content_hash: 5081ceb719104e1b7c6b5edd642c1daf38b3fd7cf1a96442a00516e7cdb15379 +namespace: work +last_synced: 2026-05-31 +confidence: 0.9 +tags: [personal-os, planning, executor, catch-up-plan] +--- + +# Personal OS — Catch-Up Plan (2026-04-27) + +Handoff plan to the executor agent — what to build next and why. +Companion to [[personal-os-state-2026-04-27]] (current state). + +## Context + +Alex is a macOS Browser DRI at DuckDuckGo, ADHD profile, fully async +work. The Personal OS holds work context outside Alex's head so +comments don't get lost, the day doesn't drift, and career goals +don't get crushed by the current project. + +Four-agent design: **Стратег** (Strategist, ✅), **Тактик** (Tactician, +🟡 partial), **Ретроспектор** (Retrospector, ✅), **Исполнитель** +(Executor, 🟡 v1 only). + +## Architectural Principle + +**No new YAML files, shell scripts, or launchd plists.** Everything +extends what's there: Postgres tables, `generate-status.js` queries, +prompts in `agent/prompts/`, and Eagle's `SOUL.md`. The system has +enough moving parts. + +## Nine Deliverables (dependency-ordered) + +### 1.1 Schema migration +Three changes (see [[personal-os-schema]]): +- `corrections_log` table — Tactic records pushback, Retrospector + aggregates patterns by `reason_tag` / `week_number`. +- `executor_runs` table — state machine for autonomous Executor work + (states: `analyzing → awaiting_analysis_approval → fixing → pr_open + → ci_running → ci_failed → awaiting_user → complete | abandoned`). +- `activity_daily.quadrant` column — + `project | aor | career | strategy | other`. + +### 1.2 generate-status.js — three new query blocks +- **Career: Advisor Opportunities** — ILIKE `%Project Advisor%` notes, + modified ≤14d. Empty → omit section. +- **Visibility: Active Assessments** without Alex's input in 7+ days. +- **Quadrant classification** at AW write time, dynamic top-priority + project read from config (iOS toggle today won't be the TP in June). + +### 1.3 inbox-triage.md — STEP 0 gating +- **0a Focus check** — read latest `activity_daily`, check MS365 + calendar for active meeting. Active meeting OR + `focus_score>60 AND current_app IN (Xcode,Cursor,VSCode) AND >20m + no switch` → exit silently unless `status.md` has 🔴 sections >3h. +- **0b Scope filter** — `#inbox` is NEW SIGNAL ONLY. Exclude overdue + (lives in daily-brief), system events, already-responded tasks. + Include only new human comments, new assignments, ship/TD status + changes, mentions in untracked tasks. + +Gating in the prompt (not a wrapper) so the agent can override on +edge cases (e.g. Dominik directly tagging Alex during deep focus). + +### 1.4 retrospector.md — three SQL blocks +Replaces the markdown `corrections_log.md`. Surfaces correction +patterns (≥3 in 4 weeks by `reason_tag`), quadrant drift (4-week × +4-quadrant pivot, flag <5% for 3+ weeks), and visibility this week +(strategic comment count). + +### 1.5 Eagle SOUL.md — corrections_log writeback +On pushback in any channel, Eagle classifies (`discord_pushback | +morning_brief_correction | manual`), tags the reason +(`ship-review-crunch | urgent-bug | meeting-day | ...`), INSERTs a +row via psql, then responds normally without announcing the insert. + +### 1.6 Executor v2 — draft-PR autonomous flow +Single human gate: **Analysis approval.** After that, autonomous. + +Pipeline: Analysis → STOP → Fix → Build (`xcodebuild`) → Test → +`executor/-` branch → push → `gh pr create --draft +--assignee @me --title "[executor] ..."` (NO `--reviewer`) → +self-review → CI poll every 10 min (max 3 auto-fix attempts). + +Hard prohibitions: no push to main/develop/release, no non-draft PRs, +no `--reviewer`, no `gh pr merge`, no force-push, no `.github/` or +CI config edits. + +Draft + assignee=@me + no reviewers because the goal is **durable +surface, not interruption.** Discord scrolls; GitHub doesn't. + +### 1.7 MS365 MCP wired into Hermes +Calendar access for `inbox-triage`, `weekly-plan`, `daily-brief`. Only +needs `outlook_calendar_search` between now and now+1h. Wire once at +Hermes config layer, not per-prompt. + +### 1.8 Vault consolidation +Move process docs into `~/obsidian/work/wiki/`. Decision rule: +**process/conventions/workflows → vault; runtime configs read by +agents → leave in place.** `.cursor/*.mdc` files are **copied** (not +moved) because Cursor IDE still reads them from `apple-browsers/.cursor/`. +Frontmatter notes the original path. Verification after every move +is non-negotiable (silent skill breakage is the failure mode). + +### 1.9 Executor PR template (Option B inline) +Adapted variant — team template requires manual confirmation of +task/reviewer/description; Executor knows all three deterministically. +Inline the template in the prompt rather than checking a file into +`.github/`. The draft state IS the safety net. + +## Order of Execution + +Items 1–9 in any order. Item 10 (Executor v2 prompt) needs schema +(1.1) + vault consolidation (1.8) + PR template (1.9) done first. + +**No new Discord channels needed.** Existing seven cover everything. + +## Open Questions — All Resolved + +- macOS repo: `~/DuckDuckGo/apple-browsers/main`, sibling executor + worktrees. +- Xcode scheme: one-time discovery during Executor v2 setup, hardcoded + into config. +- GitHub remote: `gh` CLI auto-detects from worktree. +- No CODEOWNERS file → no auto-assigned reviewers. +- Team OK with `[executor]` drafts on Alex only. + +Postponed: NAS, personal, Phase 2-family. + +## Definition of Done + +1. Friday retrospector says specific things ("deferred bug work 4× + for ship-review-crunch", "career quadrant <5% three weeks"). +2. `#inbox` shows only new human signal; silent during meetings. +3. `status.md` has `## ⚡ Career` section, empty when nothing. +4. Pushing back on Discord adds one `corrections_log` row, no + ceremony. +5. `fix [task]` in `#executor` → analysis post → approval → draft + PR in GitHub within 30 min for trivial bugs. +6. Vault contains UI skill, all `.cursor/*.mdc`, and process docs, + all reachable via `obsidian-mcp`. + +## Related +[[personal-os-state-2026-04-27]] [[personal-os-schema]] [[wiki-ingest-process]] [[ddg-asana-workflow]] diff --git a/wiki/personal-os-schema.md b/wiki/personal-os-schema.md new file mode 100644 index 00000000..740afe5c --- /dev/null +++ b/wiki/personal-os-schema.md @@ -0,0 +1,118 @@ +--- +source: raw/schema.sql +content_hash: 71b47e47b483834c887de14c76d5b16506d90ad64198d76a92a7b3731132dab8 +namespace: work +last_synced: 2026-05-31 +confidence: 0.9 +tags: [personal-os, postgres, schema, database] +--- + +# Personal OS — Postgres Schema + +The `personal_os` Postgres database is the system of record for Asana sync, +agent annotations, wiki sources, and semantic memory. Extensions: `vector` +(pgvector) and `pg_trgm`. + +## Core Asana Tables + +### `tasks` +One row per Asana task GID, upserted on every sync. Tracks name, notes +(plain + HTML), due/start dates, completion, assignee, creator, project +membership, and a `source` enum: + +- `my_tasks` — assigned to me, in My Tasks sections +- `following` — I'm a follower (CC'd, commented) +- `delegated` — I created it, someone else is assignee +- `project` — member of a project, not otherwise classified + +Sync bookkeeping: `fetched_at`, `stories_fetched_before` (cursor for +incremental story pulls), `raw_json` (full Asana response). + +Later additions: `namespace` (default `work`), `possibly_deleted`, +`last_seen_in_full_sync`. + +Indexes cover modified time, due date (partial WHERE NOT completed), +section, assignee, source, completed, and trigram on `name` for fuzzy +search. + +### `stories` +Raw event log per task. `resource_subtype` is Asana's event type +(`comment_added`, `assigned`, `due_date_changed`, `section_changed`, +`dependency_added`, `attachment_added`, `marked_complete`, etc.). Stores +both plain text and HTML so embedded task GID refs can be parsed out. + +### `task_edges` +Directed graph between tasks. `relation_type`: + +- `subtask` — related is a subtask of task +- `dependency` — task is blocked by related +- `dependent` — task is blocking related +- `project_sibling` — same project + section +- `mention` — related was referenced in a story on task + +Composite PK `(task_gid, related_gid, relation_type)`. `related_gid` may +not yet exist in `tasks`. + +### `task_annotations` +Agent-written (or user-written) tags. `annotation_type`: `irrelevant`, +`watching`, `needs_action`, `snoozed`. Includes agent reasoning note and +`snoozed_until` date. `annotated_by` distinguishes agent vs user. + +### `sync_state` +One row per logical sync stream keyed by stream name (`my_tasks`, +`following`, `delegated`, `project:{gid}`, `workspace_events`). Stores +`cursor` (ISO timestamp or events sync_token) and `full_sync_at` for +when the last full pull happened. + +## Vector / Wiki / Memory Tables + +### `task_embeddings` +Voyage AI 1024-dim vectors with HNSW cosine index for semantic task +search. + +### `file_references` +Tracks files (macOS security-scoped bookmarks in `bookmark_data`) and +web URLs that should be ingested into the wiki. `content_hash` for +incremental sync, `wiki_stale=true` triggers reprocessing, +`modification_log` keeps before/after hash history. Namespace constrained +to `work | personal | family`. + +### `wiki_pages` +LLM-synthesised wiki entries (NOT raw copies). Carries `sources` JSONB, +`confidence` float, `superseded_by` self-ref for version chains, +`last_synced_hash`, and a 1536-dim embedding for semantic search. **Note: +the live system has moved off this table** — the wiki now lives in the +Obsidian vault (`~/obsidian/wiki/`) and uses file-frontmatter hashing +instead. See [[wiki-ingest-process]]. + +### `memory_store` +Semantic memory accumulated from Discord/Claude/manual sources. +`type`: `fact | preference | decision | person`. Carries entity refs in +JSONB, 1536-dim embedding, optional `expires_at` (null = permanent). + +## Views + +### `active_tasks` +Convenience view: non-completed, non-irrelevant, non-snoozed tasks +joined with their annotations. Ordered by source priority +(`my_tasks > delegated > following > project`), then due date, then +modified date. Used as the starting point for the agent's daily review. + +## Migration Tables (Catch-Up Plan 2026-04-27) + +Three additions land via the catch-up plan and are referenced by the +state doc as `✅` applied: + +- `corrections_log` — Tactic records pushback, Retrospector aggregates + patterns by `reason_tag` and `week_number`. +- `executor_runs` — state machine row per Executor task (states: + `analyzing → awaiting_analysis_approval → fixing → pr_open → + ci_running → ci_failed → awaiting_user → complete | abandoned`). +- `activity_daily.quadrant` — column added for weekly drift detection + (`project | aor | career | strategy | other`). + +See [[personal-os-catchup-plan-2026-04-27]] for the rationale (DB over +markdown/YAML, extend existing components). + +## Related +[[personal-os-state-2026-04-27]] [[personal-os-catchup-plan-2026-04-27]] [[wiki-ingest-process]] diff --git a/wiki/personal-os-state-2026-04-27.md b/wiki/personal-os-state-2026-04-27.md new file mode 100644 index 00000000..ed137e43 --- /dev/null +++ b/wiki/personal-os-state-2026-04-27.md @@ -0,0 +1,125 @@ +--- +source: raw/personal-os-state-2026-04-27.md +content_hash: 1640cb63145b49263b9476e2c39fe443ac561fdf6c27faccc50cfc8568552614 +namespace: work +last_synced: 2026-05-31 +confidence: 0.9 +tags: [personal-os, state-snapshot, architecture, executor] +--- + +# Personal OS — State Snapshot 2026-04-27 + +Current state of the Personal OS after the catch-up plan was executed. +Supersedes earlier `state-2026-04-27.md` and `personal-os-plan-v3.md`. + +## Infrastructure (✅ all live) + +- **PostgreSQL on Mac** — tasks, stories, task_edges, sync_state, + signal_queue, activity_daily. See [[personal-os-schema]]. +- **sync.js** — 4-source Asana fetch with incremental deltas and + `sweepRecentlyCompleted()`. +- **generate-status.js** — DB → `status.md` + `asana_context.md`. +- **ActivityWatch** — DDG browser watcher + Xcode watcher. +- **Hermes v0.11.x** — launchd daemon `ai.hermes.gateway`, Claude Code + OAuth, `claude-sonnet-4-6` backend. +- **Discord bot Орёл#0898** — no @-mention required. Channels: + `#daily-brief #inbox #focus #executor #projects #journal #retrospector`. + +## Automation Schedule + +Hermes crons handle data-pipeline (every 30 min, 7–21 workdays), +morning-brief (08:30), eod-summary (18:00), inbox-check (every 30 min, +9–19 workdays), weekly-plan (Mon 08:00), weekly-review (Fri 17:00), +retrospector (Fri 17:30 → `#retrospector`), commit-vault (23:00). + +Mac-level launchd agents (fire on wake after sleep): +- `personal.os.heartbeat` — `:05` hourly watchdog, triggers missed + one-per-day Hermes jobs. +- `personal.os.wiki-ingest` — 22:00 daily, `claude -p` writes + `~/obsidian/wiki/`. See [[wiki-ingest-process]]. + +## Obsidian Vault + +Git remote: `ssh://truenas_admin@mallexxx.duckdns.org/mnt/RED_2TB/storage/git/obsidian-vault.git` +(under `/mnt/` because TrueNAS wipes `/home/` on OS updates). + +``` +~/obsidian/ +├── wiki/ ← LLM-generated, except confidence: 1.0 hand-written notes +├── raw/ ← symlinks to source files +├── work/ ← Eagle writeable (projects/, decisions/, tech-design/) +├── personal/ ← Eagle writeable +└── family/ ← family namespace +``` + +## Catch-Up Plan Execution + +All 10 items applied. See [[personal-os-catchup-plan-2026-04-27]] for +the full plan. Notable status: + +- Schema migration (corrections_log, executor_runs, quadrant column) ✅ +- inbox-triage STEP 0 with focus + overdue exclusion ✅ +- generate-status.js: advisor + visibility + executor queue ✅ +- quadrant classification + `upsertActivityDaily()` ✅ +- Retrospector SQL-based patterns/quadrant drift/visibility ✅ +- SOUL.md corrections_log writeback via SQL INSERT ✅ +- Vault consolidation — 43 `.cursor/rules/*.mdc` in + `~/obsidian/work/wiki/apple-browsers/` ✅ +- Executor v2 prompt rewrite (single STOP gate, autonomous PR + CI + loop) ✅ +- **MS365 MCP in Hermes** — 🟡 cloud connector only, available in + Claude Code sessions; `claude -p` jobs will pick it up once exposed + to the CLI env. + +## Executor v2 Architecture + +On-demand autonomous worker that evaluates the macOS backlog, +prioritises, spawns a worker agent in a Discord thread under +`#executor`, streams progress, opens a draft PR, self-reviews, and +monitors CI. + +**Trigger modes:** user-initiated (`fix [task]` / `evaluate backlog`), +scheduled (Friday weekly-review surface), status-driven (`## ⚡ Executor +Queue` in `status.md`). + +**Task qualification:** assigned, not completed, no stories in 14+ days, +due in ≤30 days. Macos backlog filtered separately by project name. + +**Worker pipeline:** Analysis → STOP (approval gate) → Fix → Build → +Test → Branch → Push → `gh pr create --draft --assignee @me` +(no reviewer) → Self-review → CI poll every 10 min (max 3 auto-fix +attempts). + +**Hard prohibitions:** no push to main/develop/release, no `--reviewer` +flag, no `gh pr merge`, no modifying `.github/` or CI configs. + +Implementation phases 4a–4e cover evaluation engine, worker spawning, +PR/CI loop, feedback loop, scheduled evaluation. + +## Decisions Diverging from Plan v3 + +1. **wiki-ingest moved from Hermes cron → launchd subprocess** — Hermes + has no local filesystem; `claude -p` does. +2. **`personal-wiki` MCP replaced by `obsidian-mcp`** — DB tables + dropped, vault is canonical. +3. **Single heartbeat watchdog** instead of per-job launchd plists — + simpler, covers wake-from-sleep. +4. **Retrospector extracted** to standalone prompt + `#retrospector` + channel — separate signal from weekly-review. +5. **NAS git path** moved to `/mnt/RED_2TB/storage/git/` (boot pool + wipes on update; `backup/` was wrong directory). +6. **Phase 2-family deferred** until after Executor v2. +7. **Executor v1 prompts are manual-only** — STOP gates everywhere + until v2 proves itself. +8. **wiki-ingest rewritten file-based**, no more `file_references` / + `wiki_pages` DB tables. + +## Known Tech Debt + +- Morning brief was untested (first real run scheduled 08:30 next day). +- `work/projects/` empty — Eagle fills on first use. +- `executor-bug-fix.md` v1 still in place — replace with v2. +- Hermes memory not backed up to vault or NAS. + +## Related +[[personal-os-catchup-plan-2026-04-27]] [[personal-os-schema]] [[wiki-ingest-process]] [[ddg-asana-workflow]] diff --git a/wiki/wiki-ingest-process.md b/wiki/wiki-ingest-process.md new file mode 100644 index 00000000..1ce66402 --- /dev/null +++ b/wiki/wiki-ingest-process.md @@ -0,0 +1,101 @@ +--- +source: raw/wiki-ingest-prompt.md +content_hash: 29f6a0914d428cf62eeb2a832d6b3048edf3e1d16aa7714c09f686377394d128 +namespace: work +last_synced: 2026-05-31 +confidence: 0.9 +tags: [personal-os, wiki, obsidian, agent-prompts] +--- + +# Wiki Ingest — Process & Prompt + +The wiki-ingest agent keeps `~/obsidian/wiki/` synchronised with external +source files exposed as symlinks in `~/obsidian/raw/`. It runs daily at +22:00 via the `personal.os.wiki-ingest` launchd agent, which invokes +`claude -p` as a local subprocess (Hermes can't reach the local +filesystem). See [[personal-os-state-2026-04-27]] Decision 1. + +## How sync works + +1. For every file in `~/obsidian/raw/`, compute SHA256 via + `shasum -a 256 | awk '{print $1}'`. +2. Search `~/obsidian/wiki/` for any `.md` with frontmatter + `source: raw/`. +3. If a page exists AND `content_hash` in frontmatter matches → skip. +4. Otherwise → queue for synthesis. +5. Broken symlinks → skip silently, do not create a page. + +If the queue is empty after the scan, output +"Wiki is up to date. Nothing to ingest." and stop. + +## Synthesis rules + +- **Never copy source files verbatim.** Extract key facts, decisions, + and structure. Keep each page under 800 words. +- Name the wiki file **by topic, not by source filename** + (e.g. `personal-os-schema.md`, not `schema.md`). +- If a topic is large, split into multiple linked pages. +- Cross-reference related pages with `[[double brackets]]`. +- Existing page found → update in place (preserving the file path). + +## Frontmatter format + +```markdown +--- +source: raw/ +content_hash: +namespace: work +last_synced: +confidence: 0.8 +tags: [tag1, tag2] +--- +``` + +`last_synced` and `content_hash` MUST be updated after every successful +write. + +## Confidence scale + +| Value | Meaning | +|-------|---------| +| 1.0 | Human-written notes in `work/`, `personal/`, `family/`. **Never edit these.** | +| 0.9 | Highly structured, authoritative source (e.g. schema files) | +| 0.8 | Clear single source (default) | +| 0.6 | Inferred or partial content | + +## Hard rules + +- Do not edit any wiki page with `confidence: 1.0` — those are + human-authored. +- Do not process `namespace: family` files unless explicitly instructed. +- Broken `raw/` symlinks are skipped, not removed. +- Always update `content_hash` and `last_synced` after writing. + +## Output format + +At the end of a run, print: + +``` +Wiki Ingest — + +Processed: N files +Created: N new pages +Updated: N pages +Skipped: N (unchanged) + +Pages updated: +- wiki/ (source: raw/) +``` + +## Why file-based, not DB-based + +Original design (v3) used `file_references` + `wiki_pages` Postgres +tables with embeddings. That was dropped in favour of file-frontmatter +hashing once Obsidian became the canonical vault. The vault is now +self-contained, portable, and version-controlled via the NAS git remote +without any DB dependency. See [[personal-os-state-2026-04-27]] +Decision 8 and Decision 2 (`obsidian-mcp` replaced `personal-wiki` +MCP). + +## Related +[[personal-os-schema]] [[personal-os-state-2026-04-27]] [[personal-os-catchup-plan-2026-04-27]]