[2026-10-03] eagle: personal/plans/personal-os-operating-plan-2026-10-03.md
This commit is contained in:
1 parent
a89aac51b4
commit
6852275d40
1 file changed
+64
@@ -0,0 +1,64 @@
|
||||
---
|
||||
namespace: personal
|
||||
tags: [personal-os, execution-plan, proposal]
|
||||
date: 2026-10-03
|
||||
status: proposed
|
||||
---
|
||||
|
||||
# Personal OS — порядок запуска и конкретный P0
|
||||
|
||||
**Статус:** план для согласования. Код, внешний доступ и автозапуск этим документом не меняются. Этот документ заменяет выводы черновика `planning/agent-system-priority-plan-2026-10-03.md` о якобы запущенном расписании и готовом безопасном iPad-фиде.
|
||||
|
||||
## Что нужно Алексу сейчас
|
||||
|
||||
Один короткий, достоверный список **новых обязательств и блокеров** с причиной, ссылкой и временем проверки источника. Система сама собирает и проверяет данные, запоминает вклад для карьеры и улучшает себя через ограниченные агентные циклы. Алекс видит только решение, требующее его участия; ежедневное планирование за него не навязывается. Основание: [[personal-os-purpose]] — пропущенные комментарии, отложенные карьерные задачи и потеря контекста после переключений.
|
||||
|
||||
## Порядок работ
|
||||
|
||||
1. **P0 — надёжный рабочий сигнал.** Довести существующие Asana/GitHub → локальное зеркало → `attention` до состояния, где каждый срочный пункт подтверждён источником, сбои видны, повторения и исторический шум убраны. После согласования конкретных правок ниже включить ограниченный автоматический запуск. Результат для Алекса: меньше ручных проверок Asana/GitHub и меньше пропущенных ответов.
|
||||
2. **Параллельно — автономная разработка.** Codex/Claude берут небольшую согласованную задачу, работают в отдельном worktree, собирают/проверяют, исправляют ошибки, возвращают diff, результат проверки и точный блокер. Первый пакет — качество `attention` и импорт Zoom. Balda/Broker/Virfield уже развиваются отдельно и не являются условием запуска P0.
|
||||
3. **Параллельно — существующие Zoom-записи.** Найти фактический источник записей в доступном Zoom-аккаунте (пустой `~/Documents/Zoom` ничего не доказывает), импортировать **одну существующую беседу**: обязательства и решения в рабочий профиль, подтверждённый вклад в карьерный. Каждый факт со ссылкой на встречу и фрагмент; затем идемпотентный импорт новых записей. Результат: обещания и доказательства вклада не приходится вспоминать вручную.
|
||||
4. **Параллельно — iPad Desk.** Агент берёт тот же ограниченный feed, показывает пункты, свежесть источников и отсутствие связи. Физическая установка приложения на iPad **уже подтверждена Алекcом**; задача — реализовать и доставить полезный экран через имеющийся Mac Monterey/Xcode 13 и подтверждённый путь установки. При необходимости Codex CLI на Mac или управление сборкой по SSH. Результат: рабочий интерфейс без новой ручной процедуры для Алекса.
|
||||
|
||||
## P0: факты текущего состояния
|
||||
|
||||
| Факт | Подтверждение | Последствие |
|
||||
|---|---|---|
|
||||
| Однократная синхронизация и генерация `attention.md/json` прошли 3 октября: 4 комментария, 4 запроса на ревью, 2 блокера PR, 5 текущих задач. | [`generate-attention.js`](file:///Users/admin/Developer/personal-os/generate-attention.js#L111), локальный `~/context/attention.md` | Данные доступны; это один успешный прогон, а не доказательство надёжного фонового режима. |
|
||||
| Новый `com.personalos.readonly` **не загружен** в `launchd`; установленный plist переименован в `.disabled` после требования остановить изменения. | Проверка `launchctl print gui/501/com.personalos.readonly` 3 октября: service not found; [`run-readonly.sh`](file:///Users/admin/Developer/personal-os/scripts/run-readonly.sh#L1) | Автономного обновления сейчас нет. Запуск — отдельный согласуемый шаг после исправлений. |
|
||||
| Старый `status.md` маркирует 20 самых старых просрочек как красные сигналы; комментарии берёт из всех активных задач за 7 дней, даже если не доказано, что ответ нужен. | [`getOverdueTasks`](file:///Users/admin/Developer/personal-os/generate-status.js#L178), [`getUnreadComments`](file:///Users/admin/Developer/personal-os/generate-status.js#L205), [`renderSignals`](file:///Users/admin/Developer/personal-os/generate-status.js#L437) | Красная очередь содержит исторический шум и чужие обсуждения. |
|
||||
| Пробный `attention` сужает задачи до моих, но объявляет комментарии «Ответить» по признаку «после него нет моего ответа». Отсутствие ответа не доказывает потребность отвечать; один и тот же объект может попасть в две секции. | [`buildAttention`](file:///Users/admin/Developer/personal-os/generate-attention.js#L32), [`renderMarkdown`](file:///Users/admin/Developer/personal-os/generate-attention.js#L79) | Алекс снова вынужден вручную проверять достоверность очереди. |
|
||||
| GitHub review requests выбираются из непрочитанных participating notifications; ошибки запросов превращаются в пустые массивы. Общая метка свежести берётся только из Asana. | [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js#L100), [`getGithubSnapshot`](file:///Users/admin/Developer/personal-os/gh-snapshot.js#L138), [`buildAttention`](file:///Users/admin/Developer/personal-os/generate-attention.js#L32) | Прочитанный запрос или сбой GitHub может исчезнуть из очереди без предупреждения. |
|
||||
| «Защита» iPad-фида сейчас — regex только по `title/detail`, а выдача ограничена пятью элементами на секцию без числа скрытых. | [`safeItem`](file:///Users/admin/Developer/personal-os/generate-attention.js#L13), [`MAX_ITEMS`](file:///Users/admin/Developer/personal-os/generate-attention.js#L15) | Фид ещё нельзя считать безопасным для iPad или полным. |
|
||||
|
||||
## P0: точные изменения — что на что
|
||||
|
||||
| № | Было → станет | Конкретная правка | Как это улучшит день |
|
||||
|---|---|---|---|
|
||||
| 1 | Общая дата Asana и тихая пустота GitHub → статус каждого источника: `ok/failed/stale`, `fetched_at`, ошибка без секретов. | В `sync.js` и `gh-snapshot.js` сохранять результат каждого источника; в `generate-attention.js` добавлять `sources`. При сбое оставить последний успешный снимок с пометкой «устарел», **не** писать «нет сигналов». Файлы обновлять атомарно. | Пустой экран больше не означает ложное «всё спокойно». |
|
||||
| 2 | «Любой чужой комментарий без моего ответа = ответить» → `нужен ответ / нужна проверка / FYI` с явным правилом. | Считать кандидатом прямое назначение, явное упоминание или комментарий на собственной активной задаче; исключать ботов/широкие AOR-потоки. Для `нужен ответ` требовать конкретный запрос/вопрос, отсутствие более позднего ответа и ссылку на комментарий. Неуверенный текст — в «проверить», без срочного пуша. Реализовать в запросах `generate-status.js`/`generate-attention.js` и общем классификаторе. | Реально ожидающие люди видны; шум не вынуждает открывать каждую задачу. |
|
||||
| 3 | Древние просрочки первыми, фиксированные `slice(0,5)`, дубли → ранжированная очередь событий. | Срок сам по себе не делает пункт срочным. Поднимать свежие обращения и блокеры, затем ближайшие сроки активных приоритетов; старые просрочки — отдельная уборка. Дедупликация по `source+object_id`, устойчивый `signal_id`, `new_since`, `acknowledged`, `dismissed`, счётчик остальных. `ack/dismiss` только в локальной БД. | В коротком списке видно, что изменилось с прошлого просмотра; один пункт не занимает два места. |
|
||||
| 4 | GitHub только через unread notifications → текущие назначения и реальные блокеры PR. | Запрашивать открытые PR с `review-requested:@me` и проверять текущего reviewer; отдельно `CHANGES_REQUESTED`, failing CI и неразрешённые review threads у моих PR. Исторические Executor PR исключать по идентификатору/происхождению, а не только по префиксу заголовка. Ошибку API показывать в статусе источника. | Прочитанный запрос на ревью не исчезает, а старый PR не выглядит новой проблемой. |
|
||||
| 5 | Один raw `attention.json` с regex → два явных выхода: локальный полный и минимальный iPad. | Типизированный feed: `signal_id`, `source`, `source_updated_at`, `detected_at`, `kind`, `urgency`, `reason`, `evidence_url`, `state`; iPad получает только разрешённые поля после allowlist и проверки чувствительности **до** передачи. Локальный feed не уходит в облачную модель/Mattermost по умолчанию. Агент разработки не получает Asana PAT. | iPad показывает полезный контекст, а рабочие детали остаются в разрешённой границе. |
|
||||
|
||||
### Как это работает после P0
|
||||
|
||||
1. Локальный сборщик читает Asana/GitHub, сохраняет последний успешный снимок и отдельный статус каждого источника. Внешних записей нет.
|
||||
2. Детерминированный классификатор сравнивает новый снимок с предыдущим, выдаёт сигналы с причиной и ссылкой; отделяет «требует действия» от «проверить».
|
||||
3. Локальная очередь убирает дубли, помнит просмотренное/отклонённое и показывает первые пять **по важности** плюс число остальных; устаревший источник помечается.
|
||||
4. Obsidian/локальный экран читают полный feed; iPad получает только проверенный минимальный feed. Агент анализирует разрешённый снимок и приносит конкретные улучшения, не пишет в Asana/GitHub без отдельного решения Алекса.
|
||||
|
||||
### Порядок внедрения и критерий приёмки P0
|
||||
|
||||
1. **Сначала исправить статус источников и границу данных.** Проверка: отключённый GitHub отображается как `failed/stale`; в iPad feed нет запрещённых полей; Asana PAT доступен только процессу синхронизации.
|
||||
2. **Затем исправить правила комментариев, просрочек и GitHub.** Проверка на сохранённых случаях от 3 октября: чужой AOR-комментарий не «срочный ответ»; комментарий с последующим ответом не появляется; прямой неотвеченный запрос появляется со ссылкой; старая просрочка не вытесняет новый блокер; прочитанный review request остаётся до снятия назначения.
|
||||
3. **Затем включить локальную очередь и короткий экран.** Проверка: одна задача — один сигнал; видны новые пункты и число скрытых; `ack/dismiss` переживает обновление; файлы никогда не бывают частично записаны.
|
||||
4. **После согласования включить ограниченный фоновой запуск** в рабочее время и наблюдать пять рабочих дней. Приёмка: источник обновляется не реже чем раз в 40 минут, пока Mac бодрствует и сеть доступна; каждый срочный пункт имеет актуальное подтверждение; сбой виден; Алекс один раз отмечает ложные срочные сигналы, чтобы внести их в правила.
|
||||
|
||||
**От Алекса сейчас:** согласовать состав P0 и границу данных. Дальше агенты делают изменения, проверяют и показывают результат с diff; к Алексу возвращаются только при смене границ или необходимости внешнего действия. Старый Executor, Hermes и новая запись во внешние рабочие системы этим планом не запускаются.
|
||||
|
||||
## Связанные материалы
|
||||
|
||||
- [[personal-os-purpose]] — зачем существует система.
|
||||
- [[personal-os-v2-plan]] — прежний широкий проектный черновик.
|
||||
- [`generate-status.js`](file:///Users/admin/Developer/personal-os/generate-status.js), [`generate-attention.js`](file:///Users/admin/Developer/personal-os/generate-attention.js), [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js) — текущая реализация.
|
||||
Reference in new issue
Block a user