diff --git a/.obsidian/graph.json b/.obsidian/graph.json index 35ff4016..0e24aaef 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -17,6 +17,6 @@ "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, - "scale": 0.4474580608569524, + "scale": 0.29629629629629894, "close": false } \ No newline at end of file diff --git a/Untitled.md b/Untitled.md deleted file mode 100644 index e69de29b..00000000 diff --git a/family/how-to/htpc-bazzite-proton.md b/family/how-to/htpc-bazzite-proton.md index be8d848f..2d1f942e 100644 --- a/family/how-to/htpc-bazzite-proton.md +++ b/family/how-to/htpc-bazzite-proton.md @@ -303,6 +303,8 @@ Systemd user service (`/etc/systemd/user/saves-backup.service`): - XNA 4.0: `/run/media/bazzite/Windows/Program Files (x86)/Microsoft XNA/` - .NET 4.0: `/run/media/bazzite/Windows/Microsoft.NET/Framework64/v4.0.30319/` - Discworld Noir source: `/run/media/bazzite/Data/downloads/zatmenie v2 [torrents.ru]/` +- **Discworld Noir (скачан 2026-05-29):** `/run/media/bazzite/Data/downloads/Discworld Noir.isz` (ISZ, 1.1GB, Alcohol 120%) +- **Discworld (оригинал, скопирован 2026-05-29):** `/run/media/bazzite/Data/downloads/DISCWORLD.iso` (ISO, 434MB) — с TrueNAS `/mnt/RED_2TB/backup/Downloads/Distr/games/DISCWORLD.iso` - FFX settings: `/run/media/bazzite/Windows/Users/mallexxx/documents/square enix/...` ## Open Questions diff --git a/family/how-to/htpc-system.md b/family/how-to/htpc-system.md index cfc962d4..fa75ed33 100644 --- a/family/how-to/htpc-system.md +++ b/family/how-to/htpc-system.md @@ -229,6 +229,20 @@ Imported 185 torrents from Windows Transmission-daemon into HTPC Transmission. 10 torrents had no data (X:\Movies\ — lost disk, permanently gone). +## Sudo / Пароль + +Пароль пользователя `bazzite`: **`bazzite`** + +Для удалённых команд через SSH: +```bash +ssh bazzite@192.168.1.86 'echo bazzite | sudo -S mount ...' +``` + +Также настроен sudo без пароля для systemctl (см. [[htpc-magic4pc#Деплой и sudoers]]): +``` +bazzite ALL=(ALL) NOPASSWD: /usr/bin/systemctl +``` + ## OSTree / Обновления - `/usr/local/bin` слетает при `rpm-ostree` upgrade (новый `/usr` overlay) - Бинари держать в `/home/bazzite/` или пересобирать после обновлений diff --git a/wiki/concepts/watchlist-automation.md b/wiki/concepts/watchlist-automation.md deleted file mode 100644 index e63cc202..00000000 --- a/wiki/concepts/watchlist-automation.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Watchlist Automation — Полный Flow -namespace: personal -created: '2026-05-20' -updated: '2026-05-27' -last_synced: '2026-05-27' -type: concept -tags: - - kraken - - watchlist - - automation - - synthesis -confidence: 0.9 ---- -# Watchlist Automation — Полный Flow - -Синтез: как `family/documents/movies-watchlist.md` превращается в скачанный контент. Объединяет [[tech/arr-stack-kraken]], [[concepts/kraken-media-stack]], [[tech/hermes-docker-kraken]]. - -## Полная цепочка - -``` -[вс 09:00] watchlist-discover ← KP API топ фильмов 2024-2025 - ↓ добавляет в секцию "Новинки 👍/👎" - movies-watchlist.md - Alex ставит 👍 / 👎 - ↓ -[ежедн 09:00] watchlist-resolve ← SSH Кракен → resolve → commit -[ежедн 10:00] watchlist-sync-down - → process-thumbs (перемещает 👍 → начало списка) - → sync-down (добавляет батч в Radarr/Sonarr) - ↓ -Radarr (7878) / Sonarr (8989) - → Prowlarr (9696) → RuTracker / Kinozal(M) / NoNaMe / etc. - → Transmission (9091) - → /media/movies-radarr или /media/series-sonarr - ↓ -router.py (Custom Script) → читает жанры из NFO/TMDb - → symlink в /media/{movies,cartoons,documentaries,...}/ - ↓ -Jellyfin (8096) → rescan → виден контент -``` - -## Статусы в movies-watchlist.md - -| Символ | Значение | Действие | -|--------|---------|---------| -| `[ ]` | не смотрел, в очереди | sync-down добавляет в Radarr/Sonarr | -| `[x]` | просмотрено | sync-up из Jellyfin watched history | -| `⬇️` | добавлено в Radarr/Sonarr | ждёт скачки | -| `👍` | нравится (новинка) | process-thumbs переносит в начало → попадёт в sync-down | -| `👎` | не хочу (новинка) | process-thumbs перемещает в `## Новинки👎` | -| `🗓️` | upcoming (ещё не вышел) | discover помечает, не скачивается | -| `❓` | не найдено / ambiguous | ждёт ручного уточнения | -| `🧟‍♀️` | horror (genre_id=27) | информационный маркер | - -## Структура секций movies-watchlist.md - -``` -## Новинки - 👍/👎 ← discover добавляет сюда -## Фильмы ← основной список, отступ 2 пробела ( - [ ]) -## Мультфильмы -## Аниме -## Новинки👎 ← ← без пробела перед 👎 -## Связанные заметки -``` - -**Важно:** `process_thumbs` автоматически определяет отступ из `## Фильмы` и сохраняет при переносе. `SECTION_THUMBDN = "## Новинки👎"` (без пробела) — должно точно совпадать с заголовком. - -## Cron Jobs (2026-05-27: migrated to Kraken) - -Watchlist pipeline runs entirely on Kraken (migrated from Eagle 2026-05-27). -Eagle previously ran `watchlist-nightly` via SSH; now Kraken runs it locally. - -| Job | Расписание | Хост | Скрипт | -|-----|-----------|------|--------| -| `watchlist-nightly` | ежедн. 01:00 | Kraken | `~/.hermes/scripts/watchlist-nightly.sh` | -| `watchlist-discover` | вс 09:00 | Kraken | `~/.hermes/scripts/watchlist-discover.sh` | - -**watchlist-nightly.sh** (на Kraken): -1. `sync-vault.sh` (pull) → `process-thumbs --apply` → `sync-vault.sh` (push) -2. `resolve --recheck --apply` → `sync-down --apply --batch 5` → `sync-up --apply` → `sync-vault.sh` (push) - -**Paths on Kraken HDD (UUID 49e8f586-3839-4c5d-a1e1-58bfc3579ade):** -- `/home/kraken/obsidian` → symlink to `/srv/dev-disk-by-uuid-.../obsidian` -- watchlist-sync: `/srv/dev-disk-by-uuid-.../Developer/watchlist-sync` - -## Discover — Фильтрация - -| Тип | Порог | -|-----|-------| -| Мировые | IMDb ≥ 7.0 или KP ≥ 7.0 | -| Российские | KP ≥ 8.5 (защита от накрутки) | -| Upcoming | год ≥ текущий−1 | -| Минимум голосов | IMDb ≥ 1000 или KP ≥ 500 | - -KP API endpoint: `https://api.poiskkino.dev/v1.4/movie` (redirect с api.kinopoisk.dev). - -## *arr Stack — Индексеры (Prowlarr) - -| ID | Имя | Тип | Примечание | -|----|-----|-----|-----------| -| 1 | RuTracker | semi-private | блокирует при rate limit на сутки | -| 2 | RuTor | public | поиск по imdbid | -| 3 | Byrutor | public | | -| 4 | NoNaMe Club | semi-private | анонимный | -| 5 | Kinozal | semi-private | резерв | -| 6 | Kinozal (M) | semi-private | магнет ✅ — без grab limit, **предпочтительный** | - -**Pi-hole pitfall:** блокирует `skyhook.sonarr.tv` → Sonarr/Radarr поиск молча не запускается. Фикс: `dns: [8.8.8.8]` в docker-compose.yml. - -## Router Script — Маршрутизация по жанру - -После импорта Sonarr/Radarr: `router.py --apply` создаёт symlinks: -- Animation (не R/18+) → `/media/cartoons/` или `/media/cartoons-series/` -- Documentary → `/media/documentaries/` или `/media/documentaries-series/` -- Прочее → `/media/movies/` или `/media/series/` - -Kopirует NFO + постер рядом с symlink (Jellyfin не видит метадату через symlink напрямую). - -## Open Tasks (2026-05-20) - -- 🟡 Передавать Transmission locations через router script при каждом импорте (сейчас вручную) -- 🔴 rsync невыполненных фильмов с HTPC на Кракен (`Фильмы не перенесенные с htpc на кракен.md`) -- 🟡 Watchlist sync-up: добавить перенесённые фильмы в нужные разделы - -## Pitfalls - -### KP Markdown Link Parsing Bug -Items added from Kinopoisk with full markdown link syntax -`[Title](https://kinopoisk.ru/film/12345/) (2025)` were passed raw to TMDB -search → not found → marked `❓` permanently (`not i.ambiguous` skips on -next run). Fix: commit `2db1ed9` — extract plain title from markdown links -before passing to TMDB. Items incorrectly marked ❓ require manual `--recheck`. - -### KP API Endpoint -`api.kinopoisk.dev` redirects to `api.poiskkino.dev/v1.4/movie`. Use the -redirect destination directly to avoid DNS issues. - -## watchlist-sync — Python CLI - -Репо: `~/Developer/watchlist-sync` (GitHub: `mallexxx/watchlist-sync`). - -``` -watchlist-sync resolve — TMDB + KP API → ID, тип (movie/tv) -watchlist-sync sync-down — добавить батч (max 5) в Radarr/Sonarr, поставить ⬇️ -watchlist-sync sync-up — Jellyfin watched → [x] в .md -``` - -**Резолвер:** TMDB `/search/multi` + KP fallback. Пороги: `min_rating: 6.0`, `min_score: 0.75`. При 2+ кандидатах → `❓` (LLM разрешает в cron каждые 6ч, нерешённые → уточнение в Zulip). - -**Stage 2 (после ≥50 просмотров):** AI-curated recommendations — три списка (с женой / один / семья) на основе TMDB профиля, добавляются в конец watchlist как `## 🤖 Рекомендации (YYYY-WNN)`. - -Jellyfin library mapping: Movies → `movies`, Cartoons → `mixed` (movies + episodes). - -## See Also - -- [[tech/arr-stack-kraken]] — детальные питфоллы *arr стека -- [[tech/arr-stack-taiga]] — *arr stack на Тайге (аналогичная архитектура) -- [[concepts/kraken-media-stack]] — полная архитектура медиасервера -- [[tech/hermes-docker-kraken]] — Hermes на Кракене -- [[tech/jellyfin-transcode-rpi5]] — Jellyfin PGS/ASS питфоллы diff --git a/wiki/tech/htpc-magic4pc.md b/wiki/tech/htpc-magic4pc.md deleted file mode 100644 index cc4c7d89..00000000 --- a/wiki/tech/htpc-magic4pc.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: HTPC — magic4pc (LG Magic Remote) -created: '2026-05-28' -updated: '2026-05-29' -type: tech -namespace: family -tags: [htpc, how-to, pitfalls] -sources: - - family/how-to/htpc-magic4pc.md - - family/how-to/magic4pc-webos.md -confidence: medium -related: - - "[[htpc-bazzite-proton]]" - - "[[tech/htpc-steam-emulators]]" - - "[[tech/tv-luna-send]]" ---- - -# HTPC — magic4pc (LG Magic Remote) - -Go-client for using the LG Magic Remote (webOS TV app) as HTPC -mouse/keyboard input. Fork: `mallexxx/magic4pc_altclient` branch -`bazzite-linux`. - -LG TV: `192.168.1.75`, HTPC: `192.168.1.86`. - -## Architecture - -- **TV server**: webOS app on LG TV → sends UDP to fixed source - port **9106** -- **HTPC client**: `/usr/local/bin/magic4pc`, UDP listener -- **xdotool**: single persistent process via stdin pipe (mouse + - keyboard) -- **ydotool**: gamescope-specific keys (Ctrl+1, Ctrl+2) via - `/run/user/1000/.ydotool_socket` - -Session detection: -- `isGamescopeSession()` — scans `/proc/*/cmdline` for `kwin_wayland`; - if absent → gamescope (Steam Big Picture mode) -- `activeDisplay()` — KDE uses Xwayland display from kwin args; gamescope - uses `:1` (game) if visible windows present, else `:0` (Steam BP) - -## Button Mapping - -| Button | Keycode | Gamescope | KDE Desktop | -|--------|---------|-----------|-------------| -| Red | 403 | Ctrl+1 (Steam menu) | Super | -| Green | 404 | Escape | Escape | -| Yellow | 405 | Ctrl+2 (Steam QAM) | Middle click | -| Blue | 406 | Right click | Right click | -| Back | 461 | Mouse X1 | Mouse X1 | -| D-pad | 37-40 | Arrow keys | Arrow keys | -| Ch+/Ch- | 33/34 | PageUp/Down | PageUp/Down | -| Play/Stop/Pause | 415/413/19 | XF86Audio* | XF86Audio* | -| Touch (swipe) | — | mousemove (scaled) | mousemove | -| Tap | — | Left click | Left click | - -## Mouse Coordinate Mapping - -TV sends coordinates in 0–1920 × 0–1080 space. - -**In gamescope:** uses letterbox algorithm. -1. Find active window: (a) under cursor via `getmouselocation`, or - (b) largest bounding-box window (non-popup, highest ID) -2. Compute 16:9 letterbox viewport from window width: - `lb_h = win_w * 9/16` -3. Compute offset: `off_y = -(lb_h - win_h) / 2` -4. Map: `x11_x = tv_x * scale + off_x`; clip negatives to 0 - -**In KDE:** `getdisplaygeometry` → scale = display / 1920×1080. - -## Key Pitfalls - -| Problem | Fix | -|---------|-----| -| TV "service error" / won't reconnect | Fixed source UDP port 9106 | -| TV stuck "waiting for client" | Server keepalive timeout 10s | -| KDE XTest prompt on every click | Single persistent xdotool process | -| KDE XTest prompt after xdotool restart | `XwaylandEisNoPrompt=true` in kwinrc | -| Wrong mouse coordinates | Dynamic scale via `xdotool getdisplaygeometry` | -| Binary lost after `rpm-ostree upgrade` | Rebuild and redeploy | - -## Deploy - -```bash -# Build on Mac -cd ~/Developer/magic4pc_altclient -GOOS=linux GOARCH=amd64 go build -o magic4pc . - -# Copy + restart on HTPC -scp magic4pc htpc:/home/bazzite/magic4pc/magic4pc -echo bazzite | sudo -S systemctl stop magic4pc.service -echo bazzite | sudo -S cp /home/bazzite/magic4pc/magic4pc \ - /usr/local/bin/magic4pc -echo bazzite | sudo -S systemctl start magic4pc.service -``` - -Sudoers rule (no-password systemctl): -``` -bazzite ALL=(ALL) NOPASSWD: /usr/bin/systemctl -``` - -## WebOS TV App — Build & Deploy - -The TV-side is a React/Enact WebOS app + Node.js service bundled into -an IPK. Sources: `~/Developer/magic4pc/webos/`. - -### Build - -```bash -cd ~/Developer/magic4pc/webos -NODE_OPTIONS=--openssl-legacy-provider npm run build -``` - -**Pitfall:** `--openssl-legacy-provider` is required — the old webpack -is incompatible with Node.js 25+. - -### Package IPK - -```bash -/Users/admin/webOS_TV_SDK/CLI/bin/ares-package dist/ service/ --outdir . -``` - -**Pitfall:** both `dist/` and `service/` arguments are required — -omitting `service/` excludes the Node.js service from the IPK. -**Pitfall:** `npm run package` = `ares-package -n` (unsigned) — TV -rejects unsigned packages. Use the SDK command directly. - -### Deploy (deploy.sh) - -```bash -cd ~/Developer/magic4pc/webos && ./deploy.sh -``` - -Script flow: build → package → scp → close → remove → install → launch. -Uses [[tech/tv-luna-send]] wrapper for close/remove/launch. -For install (subscribe mode) — direct `ssh+script` with polling on -`"state":"installed"`. - -**Pitfall:** `ares-install` / `ares-launch` are unreliable — they don't -wait for completion. Use `luna-send dev/install` via `script` wrapper. - -### Version in UI - -Displayed as `1.1.0 (YYYY-MM-DD HH:MM)` — injected by webpack at -build time via `process.env.BUILD_DATE`. - -## Auto-launch on Boot/Wake - -Magic4pc launches a configured app when the TV boots or wakes. - -| File | Location | Purpose | -|------|----------|---------| -| `magic4pc-settings` | PERSISTENT_DIR | Selected app ID | -| `magic4pc-last-app` | PERSISTENT_DIR | Last foreground app | -| `magic4pc-run-state` | `/tmp/` | `running` after first launch | - -`PERSISTENT_DIR = /media/developer/apps/usr/palm/services/me.wouterdek.magic4pc.service` - -Logic: -- **Boot/wake:** `/tmp` is cleared → no `run-state` → `freshStart=true` - → launches configured app -- **Manual launch:** `run-state=running` already present → skips auto-launch - -The `init.d` script on TV (`/var/lib/webosbrew/init.d/magic4pc`) removes -`run-state` on suspend so wake triggers fresh launch. Always edit in -repo (`tv-scripts/init.d-magic4pc.sh`), never directly on TV. - -## WebOS Back Key + System Keyboard - -When the system keyboard is open, **Back #1** is consumed by the OS -(closes keyboard) — the `keydown` DOM event and `onButtonDown` are -**not** fired. **Back #2** arrives normally. - -Fix used in `MainPanel.js` (`_kbWasOpen` flag): - -```js -// Input.onActivate: -this._kbWasOpen = true; - -// onButtonDown on Back: -if (this.state.wolMacActive || this._kbWasOpen) { - this._kbWasOpen = false; - return; // suppress panel close -} -``` - -Approaches that don't work: `Popup.noAutoDismiss`, timeout heuristic, -polling `document.activeElement` (keyboard is a system overlay, focus -never moves to INPUT). - -## See Also - -- [[htpc-bazzite-proton]] — Proton game compatibility on this HTPC -- [[tech/htpc-steam-emulators]] — Steam, emulators, gamepad config -- [[tech/tv-luna-send]] — luna-send SSH wrapper for WebOS TV commands diff --git a/wiki/tech/tv-luna-send.md b/wiki/tech/tv-luna-send.md deleted file mode 100644 index ce26aa27..00000000 --- a/wiki/tech/tv-luna-send.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: WebOS TV — luna-send via SSH -created: '2026-05-29' -updated: '2026-05-29' -type: tech -namespace: family -tags: [htpc, how-to, pitfalls] -sources: - - family/how-to/tv-luna-send.md - - family/how-to/htpc-webos-luna.md -confidence: medium -related: - - "[[tech/htpc-magic4pc]]" - - "[[tech/htpc-kodi-layout]]" ---- - -# WebOS TV — luna-send via SSH - -`luna-send` on WebOS writes output to the TTY, not stdout. SSH without a -PTY produces no output. The `script(1)` workaround captures output via a -pseudo-TTY. - -TV IP: `192.168.1.75` (aliases: `root@LGwebOSTV`, `root@tv`). - -## The Problem - -```bash -ssh root@192.168.1.75 "luna-send -n 1 -f luna://..." # → silent -ssh -t root@192.168.1.75 "luna-send -n 1 -f luna://..." # → still silent -``` - -Root cause: `luna-send` detects whether its stdout is a TTY and refuses to -write to a pipe. - -## The Fix: script(1) - -```bash -ssh root@192.168.1.75 \ - "script -q -c \"luna-send -n 1 -f luna://com.webos.applicationManager/running '{}'\" \ - /tmp/o.txt; cat /tmp/o.txt" -``` - -`script(1)` allocates a pseudo-TTY and records output to `/tmp/o.txt`. -The wrapper then reads the file, filters the Script header/footer lines, -and removes the temp file. - -## Wrapper: tv-luna-send.sh - -Location: `~/Automation/tv-luna-send.sh` on Eagle. - -```bash -# Usage (same flags as luna-send) -~/Automation/tv-luna-send.sh [luna-send flags] luna://service/method 'json' - -# List running apps -~/Automation/tv-luna-send.sh \ - -n 1 -f luna://com.webos.service.applicationmanager/running '{}' - -# Close an app -~/Automation/tv-luna-send.sh \ - -n 1 -f luna://com.webos.service.applicationmanager/closeByAppId \ - '{"id":"me.wouterdek.magic4pc"}' - -# Launch an app -~/Automation/tv-luna-send.sh \ - -n 1 -f luna://com.webos.applicationManager/launch \ - '{"id":"me.wouterdek.magic4pc"}' - -# Query magic4pc service status -~/Automation/tv-luna-send.sh \ - -n 1 -f luna://me.wouterdek.magic4pc.service/query '{}' -``` - -Set `TV_HOST` env to override the default target (`root@LGwebOSTV`). -DNS resolves via home router at `192.168.1.1`. - -## Common Luna URIs - -| URI | Purpose | -|-----|---------| -| `.../applicationmanager/running` | List running apps | -| `.../applicationmanager/closeByAppId` | Close app by ID | -| `.../appInstallService/dev/install` | Install IPK (subscribe) | -| `.../appInstallService/dev/remove` | Remove app | -| `.../applicationManager/launch` | Launch app | -| `.../applicationManager/getForegroundAppInfo` | Get active app | -| `...magic4pc.service/query` | Magic4pc service status | - -Full service prefix: `com.webos.service.applicationmanager`, -`com.webos.appInstallService`, `com.webos.applicationManager`. - -## Limitation: Subscribe Mode (-i) - -`luna-send -i` (infinite subscribe, used for `dev/install`) does **not** -work through the wrapper — it never terminates normally. The -`magic4pc/webos/deploy.sh` handles install directly via `ssh+script` with -inline polling for `"state":"installed"`. - -## Where Used - -`magic4pc/webos/deploy.sh` — close, remove, and launch steps in the deploy -pipeline. See [[tech/htpc-magic4pc]] for the full magic4pc build and deploy -workflow. diff --git a/wiki/tech/wireguard-vpn.md b/wiki/tech/wireguard-vpn.md deleted file mode 100644 index f0efa07c..00000000 --- a/wiki/tech/wireguard-vpn.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: WireGuard VPN — Eagle to Kraken -created: '2026-05-23' -updated: '2026-05-23' -type: tech -namespace: personal -tags: [infra, kraken] -sources: [family/how-to/wireguard-vpn.md] -confidence: high ---- - -# WireGuard VPN — Eagle to Kraken - -Split-tunnel VPN connecting Eagle (Mac M4, home) to Kraken (RPi5, home) via -a VPS relay. Enables SSH to Kraken from anywhere and routes Time Machine -backups over the tunnel. Two VPS interfaces avoid hairpin forwarding. - -## Topology - -``` -Eagle (10.99.0.2) ←→ wg0 VPS (10.99.0.1) ←→ wg1 VPS (10.99.1.1) ←→ Kraken (10.99.1.2) - :51820 :51821 -``` - -SNAT rewrites source address: Eagle packets arrive at Kraken with src -`10.99.1.1` (VPS wg1), not Eagle's `10.99.0.2`. FORWARD runs wg0→wg1 -on the VPS with nftables. - -## VPN Addresses - -| Node | VPN IP | -|------|--------| -| VPS wg0 | 10.99.0.1 | -| VPS wg1 | 10.99.1.1 | -| Eagle | 10.99.0.2 | -| Kraken | 10.99.1.2 | - -`kraken` hostname resolves via dnsmasq on VPS (`DNS = 10.99.0.1` in Eagle's -wg0.conf). DNS is scoped to the `kraken` domain only (see DNS section). - -## Persistence - -| Component | Node | How it survives reboot | -|-----------|------|------------------------| -| wg-quick@wg0 + wg-quick@wg1 | VPS | systemd enabled | -| PostUp FORWARD + SNAT rules | VPS | embedded in `/etc/wireguard/wg0.conf` | -| nftables (10.99.0.0/16 forward) | VPS | `/etc/nftables.conf`, systemd enabled | -| dnsmasq (`kraken` → 10.99.1.2) | VPS | `/etc/dnsmasq.d/vpn-hosts.conf`, systemd enabled | -| wg-quick@wg0 | Kraken | systemd enabled | -| wg-auto LaunchDaemon | Eagle | `/Library/LaunchDaemons/top.eagle.wg-auto.plist` | - -## Auto-Connect on Eagle - -`/usr/local/bin/wg-auto.sh` polls every 30 seconds via launchd -(`StartInterval`, **not** WatchPaths): - -- At home (router MAC `f0:79:59:77:9b:70` visible on ARP) → `wg-quick down` -- Off home network → `wg-quick up` - -**Why StartInterval and not WatchPaths:** WatchPaths triggered a race — -`wg-quick down` changes DNS via `networksetup`, which writes to -`/Library/Preferences/SystemConfiguration/`, which re-fires launchd, -tearing the tunnel down immediately after connecting. - -## DNS (Scoped Resolver) - -wg0.conf uses **no global `DNS =`**. PostUp/PostDown manage a -macOS scoped resolver for the `kraken` domain only: - -``` -PostUp = mkdir -p /etc/resolver && \ - echo "nameserver 10.99.0.1" > /etc/resolver/kraken && \ - killall -HUP mDNSResponder -PostDown = rm -f /etc/resolver/kraken && killall -HUP mDNSResponder -``` - -Result: only `kraken` resolves via VPS dnsmasq. Global DNS and Wi-Fi IP -are untouched — prevents address-bar breakage during tunnel transitions. - -## Time Machine - -| Setting | Value | -|---------|-------| -| Old destination (broken) | `smb://timemachine@kraken._smb._tcp.local./TimeMachine` | -| New destination (working) | `smb://timemachine@kraken/TimeMachine` | - -mDNS (`_smb._tcp.local`) doesn't work off the local LAN. VPN DNS (`kraken` -→ 10.99.1.2 via dnsmasq) works from anywhere. Container on Kraken: -`mbentley/timemachine:smb`, `restart: unless-stopped`. - -## Public Keys - -| Node | Public Key | -|------|------------| -| VPS wg0 | `6W6hSw0JFLm0BbyeNp1g7wF7dKKTZmGvPRdir68mz0w=` | -| VPS wg1 | `ssRV2497NQ3Lfzvx/FLO0jDlcCXdK/RReJQ36i0yuR8=` | -| Eagle | `dDgIjBUNguodOHWoz7iFsImvKhteodHcFWM8mMe4UiE=` | -| Kraken | `8kIdCKMIoMsW09/aQX6+pU0SS/rN4PysJL59w17eGRg=` | - -## Diagnostics - -```bash -# Eagle — check tunnel state -sudo wg show -ping kraken - -# VPS -ssh root@91.207.28.205 "wg show all" - -# Kraken -ssh kraken "sudo wg show" - -# Eagle auto-connect log -cat /var/log/wg-auto.log -``` - -## Related - -- [[tech/kraken-network]] — Kraken SSH access, media volume paths -- [[personal-os-architecture]] — Eagle hardware, home infra overview diff --git a/work/briefs/inbox/2026-05-29.md b/work/briefs/inbox/2026-05-29.md index c447652c..5b74a655 100644 --- a/work/briefs/inbox/2026-05-29.md +++ b/work/briefs/inbox/2026-05-29.md @@ -1,24 +1,19 @@ -## Inbox Triage — 2026-05-29 (since 2026-05-29 00:00) +## Inbox Triage — 2026-05-29 (since 14:39) ### New / Changed — Action Required - -**[Ship blocker]** — [Ship AI onboarding winner (Treatment B) [0.5d]](https://app.asana.com/0/0/1215009192158955) — Alessandro at 06:11, Costas at 05:12 -Alessandro flagged that shipping Treatment B *while the tracker-blocker demo experiment is still running* would change the onboarding control flow mid-experiment and compromise data. He laid out two options (1) wait until min sample size then flip remote config to assign new enrollees to New Treatment B; (2) [comment was cut off in snapshot — read the rest in Asana]. Separately Costas confirmed sticking with iPhone-only for now and proposed an iPad-specific project next week. -**Action:** Read full Alessandro comment, pick option 1 vs 2 (or counter-propose), reply by EOD. Ack Costas on iPhone-only + add iPad spin-up as agenda item for O-N weekly. This is on your top-priority list and was due May 28 — already 1d overdue. - -**[Close-out check]** — [Disable back button during duck.ai onboarding [1d]](https://app.asana.com/0/0/1215009192158960) — Costas at 06:13 -Costas says the back button doesn't display in your build and is disabled in Mariia's — proposes closing the task. Your own May 28 comment already asked whether this was still actual. -**Action:** Confirm Costas's read, close the task, or reply if you want to keep it open for the debug-menu corner case you raised yesterday. Due today. +_None._ ### New / Changed — Monitoring +_None._ -- **[NA Analysis: iOS Duck.ai Onboarding Tracker Demo Experiment](https://app.asana.com/0/0/1215186850972358)** — Dax posted enrollment numbers May 28 09:46 (control 7034 / a 7191 / b 7126). No d5-7 app_use conversions yet — flagged as possibly a metric-name issue. Worth checking the metric name when you next look at the experiment, no immediate action. -- **[iOS Address onboarding conflicts with unified input…](https://app.asana.com/0/0/1214592943696234)** — Dax auto-applied "Discovery" 3Ds tag (May 28 20:44). Automated, no action. -- **[DRI <> Project Advisor async for Demo tracker blocking…](https://app.asana.com/0/0/1213551072611261)** — Alessandro created this for you while OOO (May 28 23:30). FYI; pick it up when you start the async. -- **[What is your 1 Must today?](https://app.asana.com/0/0/1215228074847031)** — daily template auto-assigned (due today). Fill when you set priorities. -- **Delegated — [Pinned tab activates in other window unpinning](https://app.asana.com/0/0/1210705465887828)** → Juan Pereira pushed due to "Tomorrow" overnight. No action — keep watching. +### Nothing new +Inbox quiet — nothing new. -### Notes +- 0 @mentions of Alex since 14:39 +- 0 new assignments to Alex +- 0 new human comments on Alex's open tasks or their subtasks +- 131 total story events workspace-wide in the window, all on other people's tasks (Tom Strba project-routing, Diego / Federico / Andris on tab-broken bug, Brindy on iOS Maestro update, Dax bot noise) — none touch Alex's scope -- **STEP 1b/1c skipped**: postgres / envdir not available on this machine, so the cross-scope @mention DB sweep didn't run. Any @mentions on tasks outside `my_tasks` (e.g. tasks where you're a follower-only @mention recipient) are not captured here. The two snapshot comments above (Alessandro, Costas) both @-mention you and are covered. -- **Reminder**: Treatment-B Ship Review (gid 1215009192158961) is still open in your delegated list with no movement since May 22 — once you decide on Alessandro's option 1 vs 2, that review will probably need a new request. +### Carry-over from prior brief (still open) +- **[Ship AI onboarding winner (Treatment B)](https://app.asana.com/0/0/1215009192158955)** — Alessandro's option-1-vs-2 question still awaiting reply (EOD). +- **[Disable back button during duck.ai onboarding](https://app.asana.com/0/0/1215009192158960)** — Costas asked to close; awaiting Alex's confirm. diff --git a/work/briefs/weekly/2026-05-29.md b/work/briefs/weekly/2026-05-29.md new file mode 100644 index 00000000..8f0f34ee --- /dev/null +++ b/work/briefs/weekly/2026-05-29.md @@ -0,0 +1,77 @@ +# Weekly Review — Week of 2026-05-25 + +> Window: Fri 2026-05-22 → Fri 2026-05-29. Shortened week (AFK Wed 2026-05-27 holiday). TP: [iOS Address onboarding conflicts with unified input and ship AI onboarding winner](https://app.asana.com/0/0/1214592943696234). + +### ✅ Moved Forward + +**Closed out last TP — Demo tracker (iOS Duck.ai onboarding)** +- Project [iOS: Introduce a new screen that allows usage of the toggle with Search or Duck.ai as default](https://app.asana.com/0/0/1213320237636425) marked complete Tue 2026-05-26 with full Project Wrap-Up writeup. ~127K users in experiment. +- [Postmortem: [iOS] Introduce a new screen...](https://app.asana.com/0/0/1213320327587346) completed Tue 2026-05-26. +- [Ship Review: iOS: Demo tracker blocking after chat in onboarding](https://app.asana.com/0/0/1214147157456478) moved PR → Waiting for Release on Tue 2026-05-26. +- [Kick-off: iOS Address onboarding conflicts...](https://app.asana.com/0/0/1214592851898713) for next TP completed Tue 2026-05-26 (async, per plan). + +**Discord security postmortem — driven to close** +- [Postmortem: Security Triage: AI Agent use via likely external Discord service](https://app.asana.com/0/0/1214996544314182) closed Thu 2026-05-28 with explicit action items captured (GDPR follow-up scheduled, environment setup tracked via O-T project). Praise from Jeanna ("thorough work"). 22 stories on the thread this week — Alex drove the discussion. + +**New TP scoped & kicked off** +- [iOS Address onboarding conflicts with unified input and ship AI onboarding winner](https://app.asana.com/0/0/1214592943696234) added to iOS + macOS Release Boards on 2026-05-29; subtasks scoped (Animated Assets, Try Visiting a Site Background, Persist 'You've got this', Hide Free plan, Hide stop chat button, Disable back button, Ship Treatment B). +- Async kickoff post landed Mon 2026-05-26 ("scope is set, 2-week window fits"). + +**PRs merged (3)** +- [PR: Simplify tab access in TabBarViewController](https://app.asana.com/0/0/1215059168411571) — Thu 2026-05-28. +- [PR: iOS AI onboarding — Transition to Contextual + Resume Linear Flow](https://app.asana.com/0/0/1214928613949181) — Fri 2026-05-22. +- [PR: iOS AI onboarding — New Tab Page Dialogs Refactor](https://app.asana.com/0/0/1214998530536204) — Fri 2026-05-22. + +**Tech Designs approved (observer / Apple-team perspective)** +- [TD: [iOS] Improve support for Wallet Pass links](https://app.asana.com/0/0/1215154761492862) — approved by Brindy, closed Fri 2026-05-29. +- [TD: Monthly pixels for iOS and macOS](https://app.asana.com/0/0/1214950124367781) — moved Draft → Approved Thu 2026-05-28 (Jonathan Jackson + Elle). +- [TD: PIR: Apple: Skip subscription-gated brokers on freemium scans](https://app.asana.com/0/0/1215041670216182) — approved Tue 2026-05-26. + +**Rotations completed** +- None active this week. + +--- + +### 🔄 Didn't Move + +- [PR Check is failing on main](https://app.asana.com/0/0/1214797526093576) — last activity 2026-05-18, due 2026-05-15 (14d overdue). Flagged in last week's Must-Not-Forget; never picked up. Crowded out by demo-tracker close-out + new-TP kickoff. **Next:** triage Mon, time-box 30 min before TP work. +- [PR Check failing on main — testWhenTabWithConnectionLostError...](https://app.asana.com/0/0/1213975496167929) — last 2026-05-13. Likely same underlying flake as above. +- [security Full Analysis](https://app.asana.com/0/0/1214962161931389) — last 2026-05-20. Ambiguous title; got crowded out by Discord postmortem. +- [Postmortem: Security Triage AI: edit link](https://app.asana.com/0/0/1214996544314187) — last 2026-05-21. Confirm if separate from the closed Discord PM or rolls under it. +- [Xcode build speedup skill](https://app.asana.com/0/0/1214996544314193) — no progress; defer to post-WWDC AFK per last plan. +- [Alex Shurgin – HR](https://app.asana.com/0/0/1215056211788084) — surfaced 2026-05-22, no activity. Open privately Mon. + +--- + +### 🔗 Open Loops Carrying Forward + +- **Ship Review (new project)**: [Ship Review: iOS Address onboarding...](https://app.asana.com/0/0/1215009192158961) — created 2026-05-22, zero approvals (waiting on implementation to land). +- **Treatment B blocked**: [Ship AI onboarding winner (Treatment B)](https://app.asana.com/0/0/1215009192158955) — Alessandro raised 2026-05-29 that releasing Treatment B may conflict with active tracker-blocker demo experiment. Scope decision needed Mon. +- **Delegated overdue**: [Privacy Triage → Jake Abel](https://app.asana.com/0/0/1214965405681675) (8d overdue, not nudged); [Dependabot check → Tom](https://app.asana.com/0/0/1215057989642782) (4d overdue); [DRI <> Project Advisor async](https://app.asana.com/0/0/1213551072611261) — verify sign-off & close. +- **Discord GDPR follow-up**: [scheduled for ~2026-06-15](https://app.asana.com/0/0/1215193471130270). Monitoring. +- **No incidents missing postmortem.** No PFRs in flight. + +--- + +### 📅 Next Week Setup + +**TP Suggestion**: [iOS Address onboarding conflicts with unified input and ship AI onboarding winner](https://app.asana.com/0/0/1214592943696234) — **carry forward.** Due 2026-06-05; subtasks in flight; Treatment B is the wildcard — if blocked all week, descope and ship the rest. + +**Rotation**: None. + +**OOO watch**: +- Self: [AFK Jun/8-12 WWDC'26](https://app.asana.com/0/0/1212684797790491) — land most of TP next week before WWDC. +- Dominik (career advisor): LDX3 Jun 1–3; next 1:1 likely Jun 15+ (Jun 8–12 conflicts with own AFK). + +**1:1 prep**: Treatment B / tracker-blocker decision; Discord postmortem outcome (praise + actions captured); WWDC AFK handoff plan; carry-overs — Project Advisor Part 1 (not started), Christie EP2/3 calibration status. + +--- + +### 🏆 Wins + +1. **Closed the Demo tracker O-N project end-to-end** — [project complete](https://app.asana.com/0/0/1213320237636425), [postmortem](https://app.asana.com/0/0/1213320327587346), [Ship Review → Waiting for Release](https://app.asana.com/0/0/1214147157456478). Multi-month effort wrapped with ~127K-user experiment-impact writeup. +2. **Drove the Discord security postmortem to closure** — [postmortem](https://app.asana.com/0/0/1214996544314182). Explicit praise from Jeanna; reactions from Jonathan Jackson, Dominik, Keagan, Steve Englehardt, Isabel, Brindy. Strong cross-org visibility. +3. **Pivoted cleanly into next TP in a 4-day week** — [Kick-off](https://app.asana.com/0/0/1214592851898713) done async Mon, [scope](https://app.asana.com/0/0/1214592943696234) fully laid out by Tue, project on both release boards. No dead air between TPs despite Wed holiday. + +--- +*Saved to `/Users/admin/obsidian/work/briefs/weekly/2026-05-29.md`.*