[2026-05-29] remove processed wiki/ files (content patched into vault)

This commit is contained in:
Alexey Martemyanov
2026-05-29 15:43:02 +06:00
parent 9ba2688a13
commit d10a723888
10 changed files with 106 additions and 597 deletions
+1 -1
View File
@@ -17,6 +17,6 @@
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.4474580608569524,
"scale": 0.29629629629629894,
"close": false
}
View File
+2
View File
@@ -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
+14
View File
@@ -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/` или пересобирать после обновлений
-161
View File
@@ -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 питфоллы
-195
View File
@@ -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 01920 × 01080 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
-103
View File
@@ -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.
-120
View File
@@ -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
+12 -17
View File
@@ -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.
+77
View File
@@ -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 13; next 1:1 likely Jun 15+ (Jun 812 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`.*