[2026-10-03] eagle: personal/index.md personal/plans/personal-os-v2-plan.md personal/projects/personal-os/personal-os-status-2026-10.md
This commit is contained in:
1 parent
d204037419
commit
a323f50eea
3 files changed
+187
No files matched your search
@@ -37,6 +37,7 @@ tags:
|
||||
|
||||
Hub: [[personal/projects/personal-os/personal-os-status-2026-10|Personal OS — статус (окт 2026)]]
|
||||
|
||||
- [[personal/plans/personal-os-v2-plan|План v2]] — перезапуск (iPad Desk, AW++, PR, фокус, Swift)
|
||||
- [[personal/projects/personal-os/personal-os-failed-approaches|Несработавшие подходы]] — сводка уроков
|
||||
- [[personal/projects/personal-os/personal-os-architecture|Architecture (историческая)]]
|
||||
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
---
|
||||
title: Personal OS v2 — план перезапуска
|
||||
tags:
|
||||
- personal-os
|
||||
- plan
|
||||
- v2
|
||||
created: '2026-10-03'
|
||||
updated: '2026-10-03'
|
||||
status: draft
|
||||
---
|
||||
# Personal OS v2 — план перезапуска
|
||||
|
||||
> Черновик 2026-10-03. Вход: [[personal/projects/personal-os/personal-os-status-2026-10]] ·
|
||||
> уроки: [[personal/projects/personal-os/personal-os-failed-approaches]].
|
||||
> Пометка **⚠️ проверить** = моё допущение, не подтверждено фактом.
|
||||
|
||||
## 0. Цель и рамки
|
||||
|
||||
Быстро вернуть работающий контур «что происходит / что дальше / как я на самом деле работаю»,
|
||||
**без автономных действий**. v2 = наблюдение + отображение + ревью. Никакого Executor, пока не
|
||||
закрыты контроли из [[personal/projects/personal-os/executor-security-analysis]].
|
||||
|
||||
Состав v2:
|
||||
1. Data-слой: Asana + GitHub + ActivityWatch → локальная БД (как было, read-only).
|
||||
2. **Desk** — дашборд на старом iPad (iOS 9.3.5).
|
||||
3. Иконки для задач Asana (уникальные, ночная генерация).
|
||||
4. ActivityWatch++: точная привязка активности к worktree → задаче Asana / личному проекту.
|
||||
5. Трекинг GitHub PR.
|
||||
6. Трекинг фокуса + Ретроспектор.
|
||||
7. Переезд с Node.js на натив.
|
||||
8. Постоянные AI-сессии ревью (что работает, что нет).
|
||||
|
||||
## 1. Guidelines (обязательны для всех компонентов)
|
||||
|
||||
1. **Read-only во внешние системы.** Asana/GitHub — только GET. Обёртка API в коде разрешает только чтение
|
||||
(Asana PAT не скоупится на read-only — ⚠️ проверить, значит контроль в коде).
|
||||
2. **Рабочие данные не покидают Mac/LAN.** Никаких чатов/облачных сервисов как транспорта для данных задач.
|
||||
iPad получает данные только по LAN.
|
||||
3. **Redaction до любой модели и до iPad:** стоп-слова SILO, ACP, attorney-client, PIP, termination,
|
||||
M&A, audit, performance, compensation → задача показывается как «🔒 скрыто», в LLM не уходит.
|
||||
4. **Защита фокуса:** дашборд пассивный — без звуков, без всплывающих алертов во время focus-блока.
|
||||
5. **Человек решает:** AI-сессии пишут только в Obsidian (отчёты/предложения), ничего не применяют сами.
|
||||
6. **Детерминизм по умолчанию, LLM — для суждений** (классификация, выбор иконки, ревью).
|
||||
7. **Один статус-документ** обновляется при каждом повороте.
|
||||
|
||||
## 2. Целевая архитектура
|
||||
|
||||
```
|
||||
Asana API (GET) ─┐
|
||||
GitHub (gh/GraphQL, GET) ─┤
|
||||
ActivityWatch + новые watchers ─┼─► posd (macOS daemon, launchd) ─► PostgreSQL (как сейчас)
|
||||
Claude/Codex session logs ─┤ │ reducer + redaction
|
||||
Calendar (EventKit, позже) ─┘ ├─► dashboard.json + icons/*.png ─► HTTP (LAN) ─► iPad Desk
|
||||
├─► status.md / Obsidian daily note
|
||||
└─► AI-сессии (claude -p, read-only) ─► Obsidian reviews/
|
||||
```
|
||||
|
||||
- БД остаётся **PostgreSQL** — схема и данные уже есть, менять незачем.
|
||||
|
||||
## 3. Desk — дашборд на iPad (iOS 9.3.5)
|
||||
|
||||
Лёгкое приложение, следует guidelines §1: пассивный экран, только чтение, данные по LAN, redaction на стороне Mac.
|
||||
|
||||
### Экран (4 зоны из исходного Desk-дизайна + PR)
|
||||
1. **Сейчас** — текущий проект/задача (из AW) vs план дня; таймер focus-блока.
|
||||
2. **Сегодня** — 3–7 задач дня с иконками, статус, дедлайны.
|
||||
3. **Ждут меня** — комментарии без ответа, review requests, CI failures моих PR.
|
||||
4. **День** — полоса времени по проектам, focus-score, переключения.
|
||||
Тап по задаче = только просмотр деталей (без действий во внешних системах).
|
||||
|
||||
## 4. Иконки для задач Asana
|
||||
|
||||
**Задача:** у каждой активной задачи — узнаваемая иконка, **уникальная среди видимых на дашборде**,
|
||||
стабильная во времени (не меняется, пока задача жива).
|
||||
|
||||
Пайплайн (ночная задача планера дня):
|
||||
1. Новые/изменённые активные задачи → LLM извлекает 3–5 концептов (на redacted-тексте).
|
||||
2. Поиск по каталогу иконок (keyword + embedding по тегам/категориям).
|
||||
3. Выбор первой иконки, **не занятой** другой видимой задачей; в рамках проекта — общий цветовой акцент.
|
||||
4. Нет подходящей → генерация (LLM → SVG по стилю набора, 24×24 stroke) → валидация (рендер, размер, контраст) → в библиотеку как переиспользуемую.
|
||||
5. Рендер SVG → PNG @1x/@2x на Mac; кэш по `task_gid` в Postgres (`task_icons`: gid, icon_id, source, created_at).
|
||||
|
||||
**Каталоги — исследовать (не проверено, web в этой сессии не использовался):**
|
||||
- [ ] **Lucide** — metadata JSON на иконку (tags, categories); лицензия ISC — основной кандидат.
|
||||
- [ ] **Grida icons** — заявлен как icons database — проверить формат метаданных и лицензии.
|
||||
- [ ] **NeedIcons** — проверить, что это и есть ли API/датасет.
|
||||
- [ ] **Damask** — проверить, что это (набор/генератор?).
|
||||
- Критерии: машиночитаемые теги, SVG, единый стиль, лицензия для личного использования, размер каталога.
|
||||
|
||||
## 5. ActivityWatch++ — привязка активности к задачам
|
||||
|
||||
**Сейчас есть:** aw-watcher-ddg (URL), aw-watcher-xcode (worktree), aw-watcher-vscode (Cursor: файл/проект), window.
|
||||
|
||||
**Добавить:**
|
||||
| Источник | Как получить worktree | ⚠️ |
|
||||
|---|---|---|
|
||||
| **Claude Code CLI / Claude desktop (Code-сессии)** | транскрипты `~/.claude/projects/<cwd>/*.jsonl` — `cwd`, `gitBranch` у сообщений; активность = mtime + последние записи | проверить поля |
|
||||
| **Codex CLI/desktop** | `~/.codex/sessions/**/rollout-*.jsonl` — `cwd` в session meta | проверить формат |
|
||||
| **Claude desktop (чат/Cowork)** | только заголовок окна + проект Cowork-сессии; нет cwd → AI-классификация | |
|
||||
| **VS Code / Cursor** | файл из aw-watcher-vscode → `git rev-parse --show-toplevel` + ветка | |
|
||||
| **Terminal** | zsh `precmd` hook → heartbeat в AW-бакет (`cwd`, branch) | |
|
||||
| **Браузер** | URL GitHub PR → ветка; URL Asana → GID напрямую | |
|
||||
|
||||
**Цепочка привязки (детерминированно → AI):**
|
||||
1. GID в имени ветки (`fix-1234567890-...`, executor-конвенция).
|
||||
2. Ссылка на Asana в теле PR этой ветки.
|
||||
3. Ручное правило (`aw-projects.json` / таблица `bindings`).
|
||||
4. **AI-классификатор** (фоллбек): окно активности + коммиты + заголовки → кандидаты из активных задач
|
||||
Asana **или личных проектов** (список из Obsidian `personal/projects/`) с confidence.
|
||||
< порога → «не привязано», вопрос в вечернем ревью; подтверждение → правило (не спрашивать дважды).
|
||||
|
||||
## 6. Трекинг GitHub PR
|
||||
|
||||
База уже есть: `gh-snapshot.js` (мои PR + CI через `statusCheckRollup`, review requests через notifications).
|
||||
Доработать:
|
||||
- [ ] Мои открытые PR: draft/ready, CI (какой job упал + ссылка), **неразрешённые review threads** (GraphQL `reviewThreads.isResolved`), возраст, ждёт ли меня ответ.
|
||||
- [ ] **Для меня на ревью:** `search: is:open review-requested:@me` (надёжнее notifications) + возраст запроса.
|
||||
- [ ] Связь PR ↔ задача Asana (§5) → в «Ждут меня» и в дневной картине.
|
||||
- [ ] Метрики для ретро: cycle time PR, время до первого ответа на review, число CI-перезапусков.
|
||||
|
||||
## 7. Фокус и Ретроспектор
|
||||
|
||||
**Фокус (детерминированно из AW):**
|
||||
- focus-блок = непрерывная работа над одним проектом ≥ 25 мин, переключения < N, AFK < 3 мин.
|
||||
- метрики дня: deep-work минуты, число блоков, переключения/час, фрагментация, доля «план vs факт».
|
||||
- источники прерываний: открытия чатов/Asana/почты во время блока.
|
||||
- Отображение: пассивно на iPad. **Никаких интервенций** во время блока (урок ADHD-профиля); подсказки — только в паузах/вечером.
|
||||
|
||||
**Ретроспектор (еженедельно, AI-сессия, §9):**
|
||||
- план недели vs факт по проектам; переносы задач; latency ответов на комментарии; PR cycle time;
|
||||
тренды фокуса; повторяющиеся коррекции.
|
||||
- Формат: факты с цифрами → 3 паттерна → **один вопрос-решение**. Пишет в Obsidian.
|
||||
|
||||
## 8. Переезд с Node.js на натив
|
||||
|
||||
**Рекомендация: Swift** (SwiftPM, `posd` как launchd-демон).
|
||||
- Нужны macOS-API: AX (URL браузера), NSWorkspace, EventKit (календарь) — нативно в Swift.
|
||||
- aw-watcher-ddg уже на Swift; watchers можно влить в один процесс.
|
||||
- Общие модели с iPad-клиентом.
|
||||
- Альтернатива **Go** (как Balda: один бинарь, проще сервер) — хуже по macOS-API. Python — только для прототипов.
|
||||
|
||||
**Стратегия «strangler», не big-bang** (иначе «кратчайшие сроки» не выполнимы):
|
||||
1. Запускаем v2 на **существующем Node-пайплайне** (работал стабильно).
|
||||
2. Swift-модули пишутся по одному и идут в **shadow-режиме** (тот же вход → сравнение выхода с Node).
|
||||
3. Порядок: HTTP/dashboard-сервер → AW-агрегатор + watchers → GitHub → Asana sync → отключение Node.
|
||||
|
||||
## 9. Постоянные AI-сессии (ревью, паттерны, что работает)
|
||||
|
||||
Запуск: launchd + `claude -p` (подписка, официальный путь, без прокси) или scheduled tasks; **без
|
||||
сетевых инструментов записи**, вход — redacted-снимки из БД/файлов, выход — заметки в Obsidian.
|
||||
|
||||
| Сессия | Когда | Что делает | Выход |
|
||||
|---|---|---|---|
|
||||
| **Утро / планер дня** | 07:30 будни | план дня из Asana + PR + вчерашнего факта; **генерация иконок** (§4) | `dashboard.json`, daily note |
|
||||
| **Вечернее ревью** | 18:30 будни | план vs факт, непривязанная активность (вопросы), фокус | `work/reviews/YYYY-MM-DD.md` |
|
||||
| **Ретроспектор** | Пт 17:30 | недельные паттерны (§7) | `work/reviews/week-YYYY-WW.md` |
|
||||
| **Мета-ревью системы** | раз в 2 недели | здоровье пайплайна (падения, задержки), какие сигналы я реально использовал/игнорировал, ложные срабатывания; гипотеза → метрика → вердикт | `personal/projects/personal-os/experiments.md` + предложения изменений (не применяются сами) |
|
||||
|
||||
Health-check: каждый запуск пишет heartbeat в БД; дашборд показывает «данные устарели», если > 2 ч.
|
||||
|
||||
## 10. Кратчайший путь к работающей системе
|
||||
|
||||
| Шаг | Срок | Готово, когда |
|
||||
|---|---|---|
|
||||
| **S0. Data-слой оживить** — sync.js + generate-status.js через launchd (не Hermes), read-only, проверить status.md | 1 день | свежий status.md каждые 30 мин в рабочие часы |
|
||||
| **S1. `dashboard.json` + мини HTTP-сервер** (сначала любой: Node/Python, потом Swift) | 1 день | JSON отдаётся по LAN, redaction применён |
|
||||
| **S2. iPad-приложение: каркас** | 1–2 дня | приложение запускается на iPad и тянет `dashboard.json` |
|
||||
| **S3. Desk MVP** — 4 зоны, polling, иконки = детерминированный матч по Lucide-тегам | 3 дня | дашборд живёт весь день без ручных действий |
|
||||
| **S4. PR-трекинг** (§6) + «Ждут меня» | 2 дня | review requests / CI failures видны на iPad |
|
||||
| **S5. AW++** (Claude/Codex/terminal watchers, цепочка привязки шаги 1–3) | 3–4 дня | ≥ 80% рабочего времени привязано к задаче/проекту |
|
||||
| **S6. Вечернее ревью + Ретроспектор** (§9) | 2 дня | две недели отчётов в Obsidian |
|
||||
| **S7. Иконки v2** (уникальность, генерация, ночной прогон) + AI-классификатор (§5 шаг 4) | 1 нед | новые задачи утром уже с иконками |
|
||||
| **S8. Swift-порт в shadow** (§8) | параллельно, 3–4 нед | Node выключен |
|
||||
| **S9. Мета-ревью** каждые 2 недели | постоянно | решения о том, что выкинуть/усилить |
|
||||
|
||||
MVP (S0–S3) ≈ **1 неделя**.
|
||||
|
||||
## 11. Открытые решения
|
||||
|
||||
- [ ] Swift vs Go для `posd` (рекомендация — Swift).
|
||||
- [ ] Где хостить AI-сессии: launchd `claude -p` vs Balda (Balda пока NO-GO → старт с launchd).
|
||||
- [ ] Calendar-источник для режима MEETING (EventKit локально?).
|
||||
- [ ] Иконки: результаты проверки Lucide/Grida/NeedIcons/Damask.
|
||||
@@ -46,6 +46,9 @@ confidence: 1
|
||||
|
||||
## Что нужно для перезапуска (вход в перепланирование)
|
||||
|
||||
> 📋 **План v2:** [[personal/plans/personal-os-v2-plan]] — iPad Desk, иконки задач, ActivityWatch++,
|
||||
> PR-трекинг, фокус/ретро, переезд на Swift, постоянные AI-ревью; MVP ≈ 1 неделя.
|
||||
|
||||
1. Пересобрать цели: какие из исходных болей (комментарии без ответа, приоритеты дня,
|
||||
Asana vs реальность, карьерные сигналы) актуальны сейчас — см. [[personal/projects/personal-os/personal-os-purpose]].
|
||||
2. Учесть уроки — [[personal/projects/personal-os/personal-os-failed-approaches]].
|
||||
|
||||
Reference in new issue
Block a user