[2026-05-31] htpc-bazzite proton notes, personal-os wiki

This commit is contained in:
Alexey Martemyanov
2026-05-31 23:01:40 +06:00
parent 67bd0ef601
commit c9930f2273
5 changed files with 492 additions and 14 deletions
+4 -14
View File
@@ -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 DOSBoxX |
| 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]]
+144
View File
@@ -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/<gid>-<slug>` 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 19 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]]
+118
View File
@@ -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]]
+125
View File
@@ -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, 721 workdays),
morning-brief (08:30), eod-summary (18:00), inbox-check (every 30 min,
919 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 4a4e 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]]
+101
View File
@@ -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 <path> | awk '{print $1}'`.
2. Search `~/obsidian/wiki/` for any `.md` with frontmatter
`source: raw/<filename>`.
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/<filename>
content_hash: <sha256>
namespace: work
last_synced: <YYYY-MM-DD>
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 — <date>
Processed: N files
Created: N new pages
Updated: N pages
Skipped: N (unchanged)
Pages updated:
- wiki/<filename> (source: raw/<source>)
```
## 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]]