Files
obsidian-vault/personal/plans/personal-os-source-audit-2026-10-03.md
T

52 lines
14 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
namespace: personal
tags:
- personal-os
- source-audit
- focus
date: '2026-10-03T00:00:00.000Z'
status: read-only-audit
plan: '[[personal/plans/personal-os-operating-plan-2026-10-03]]'
updated: '2026-10-04'
---
# Personal OS — аудит источников для P0
**Вывод:** технические факты уже собираются частично, но текущий feed не может надёжно ответить на два вопроса: **чем Алекс занят как рабочей темой** и **какого действия от него действительно ждут**. Это граница P0.1, а не повод включать старые briefs/Executor. Аудит выполнен чтением кода, локальной БД, ActivityWatch и проверкой доступа GitHub 3 октября; полнота каждого рабочего обязательства ещё не проверена по эталонной выборке.
## Обновление 2026-10-04
Таблица ниже сохраняет исходные выводы аудита 3 октября. Текущий проверенный статус находится в [[personal/projects/personal-os/personal-os-status-2026-10]]; изменение по источникам:
| Источник | Что работает сейчас | Оставшаяся граница |
|---|---|---|
| Asana/GitHub | Полный shadow-снимок `fresh`; 27 моих PR, 5 review requests; прямые запросы Asana отделены от FYI. | Семантические привязки ещё ждут проверки 20 интервалов. |
| ActivityWatch/DDG | Window, AFK и DDG URL `fresh`; URL watcher работает. Xcode/VS Code buckets `stale` при отсутствии недавних событий. | Свежесть специализированных bucket проверять при реальной активности приложения. |
| Git worktrees | 78 проверены; 40 с незавершёнными изменениями, 2157 изменённых путей, 64 коммита за 30 дней. Размеры изменений учитываются без diff. | Worktree без PR/Asana связи остаётся `unknown`. |
| Codex/Claude | 65/24 сессии по metadata без текста бесед. | `needs_human` нельзя выводить из mtime/idle. |
| Выгрузки транскриптов агентов | Алекс уточнил 4 октября: явная грубость в его сообщениях другим агентам — предварительный сигнал раздражения. Personal OS не должен становиться собеседником. | Сейчас читаются только metadata сессий. Нужен локальный импорт выгруженных транскриптов, разделение сообщений Алекса и агента, производная метка с временем/источником и проверка ложных срабатываний. |
| Mattermost | Отдельный авторизованный read-only клиент: корпоративный сервер собирается каждые 15 минут (первый сбор 21 сообщение / 202 канала); Qentra проверена (265 / 9). | Qentra была тестом; корпоративные сообщения пока хранятся отдельным локальным потоком. |
| iTerm | 18 из 53 окон привязаны к worktree по точному пути prompt в заголовке. | Остальные окна не имеют доказанной темы. |
| Outlook | Активность окна классифицируется как mail/calendar browsing. | Письма и события не читаются: доступные коннекторы отключены администратором, нужен разрешённый Graph app с `Mail.Read`/`Calendars.Read`. |
| Календарь/Balda | `unknown`. | Подтверждённого read-only контракта нет. |
| Источник | Есть сейчас | Пробел, который влияет на P0 | Конкретная следующая правка и проверка |
|---|---|---|---|
| Asana | [`sync.js`](file:///Users/admin/Developer/personal-os/sync.js) читает мои, отслеживаемые, делегированные и проектные задачи, stories и часть зависимостей. `sync_state` для `my_tasks`, `following`, `delegated` обновлён 3 октября около 19:15 +06. В [`schema.sql`](file:///Users/admin/Developer/personal-os/schema.sql#L15) есть assignee, creator, due date, stories, edges и raw JSON. | [`generate-attention.js`](file:///Users/admin/Developer/personal-os/generate-attention.js#L125) считает любой чужой комментарий без моего ответа кандидатом «ответить»; это может быть FYI. [`asana.js`](file:///Users/admin/Developer/personal-os/asana.js#L57) сохраняет только первую project membership в нормализованных полях; источник обнаружения сводится к одному `source`. Нет структурированного `owner/reviewer/advisor/observer`, прямого запроса, ожидающего человека, последствий ожидания и confidence. | Добавить `work_demand` с `role`, `requested_action`, `requester`, `due_evidence`, `evidence_gid/story_gid`, `confidence`, `observed_at`; классифицировать assignment, mention, вопрос, dependency и FYI отдельно. Проверить 20 разных Asana событий по исходным stories: ложное «ответь» не проходит приёмку. |
| GitHub | [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js#L74) читает до 20 моих open PR с агрегированным CI/review decision. CLI авторизован; проверка 3 октября нашла 19 открытых PR в `duckduckgo/apple-browsers`. | Review requests берутся из `notifications?all=false&participating=true` и потому зависят от unread; team requests отбрасываются. `reviewDecision` и `ci` — агрегаты, нет модели новых review comments, конкретного required action, approval после последнего push, timestamps и независимого refresh state. Ограничение 20 PR близко к текущим 19. | Заменить notification-only review queue на запрос текущих reviewer assignments; отдельно получать reviews, unresolved threads, CI checks и head SHA для моих PR. Хранить `fetched_at` и ошибку по каждому потоку. Сверить set PR на ревью с GitHub UI/API, затем fixture: новый push после approval, failed CI, resolved/unresolved comment. |
| ActivityWatch, браузер и VS Code | Локальный AW отвечает. Buckets `window/afk_Mac` обновлены 3 октября около 21:08 +06; Xcode — 1 октября, VS Code — 2 октября, DDG URL — 8 июня. [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js#L269) совмещает foreground window с editor/browser событиями для агрегатов. | [`currentFocus`](file:///Users/admin/Developer/personal-os/aw-query.js#L319) выбирает Xcode→VS Code→DDG→window из последних 20 минут, а не последнее активное окно; app у VS Code обозначен `Cursor`. DDG URL сегодня недоступен, поэтому Asana/PR/статью в браузере нельзя надёжно привязать. [`aw-projects.json`](file:///Users/admin/Developer/personal-os/aw-projects.json) классифицирует проекты по regex, не конкретные задачи и намерение. | Исправить `Now` по свежему foreground window + AFK, строго проверить перекрытие и freshness специализированных buckets; восстановить URL watcher либо пометить `browser_url_unknown`. Разбирать точные Asana task ID/PR number из URL; article URL связывать с задачей только при доказательстве. Проверить 20 интервалов, включая browser→Asana, lock, VS Code, статью и личный проект. |
| Git worktrees ↔ рабочая тема | Xcode watcher сообщает имя worktree/repo; [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js#L262) агрегирует время. У старого Executor `executor_runs` хранит `task_gid`, `worktree_path`, `branch_name`, `pr_url`. | Нет общего индекса актуальных локальных worktrees, связей `repo/worktree/branch/head SHA ↔ PR ↔ Asana task`. Regex проекта не объясняет, что именно ревьюится или решается. Executor охватывает только собственные runs. | `context-links.js`: read-only `git worktree list --porcelain` по зарегистрированным репозиториям, branch/head SHA и явные PR/Asana ссылки; сохранять origin каждой связи и confidence. Проверить один PR с двумя worktrees и один worktree без PR; последний оставить `unknown`. |
| Codex/Claude/Balda и окна | Локальные Codex/Claude session JSONL существуют; metadata содержит `cwd/git` или `cwd/gitBranch` (без чтения бесед). Codex desktop даёт список задач со статусами `active/idle/notLoaded`. Старый Executor имеет отдельные run states и PR links. | Список задач не означает `needs_human`; desktop approval/request, завершённый результат и ответ нельзя вывести из mtime или `idle`. В Personal OS нет адаптера окон/сессий и единой review queue. Balda/Broker развивается отдельно, стабильный контракт пока не подтверждён. | `session-observer.js` читает только metadata и времена; `agent-run-adapters.js` принимает подтверждённые события `running/blocked/needs_human/done`, artifact URL, estimate review minutes и usage. Неизвестный approval = `unknown`. На двух одновременно активных агентах проверить отдельный agent time и один ограниченный human review slot. |
| Личный контекст | В [`aw-projects.json`](file:///Users/admin/Developer/personal-os/aw-projects.json) есть несколько `namespace: personal` проектов и общий класс Documentation/Research. | Статья может быть рабочим исследованием, отдыхом или незапланированным переключением; приложение/домен не доказывают намерение или самочувствие. | `context_type=work_task|work_research|personal_project|leisure_or_break|unknown`; источник/уверенность отдельно. Попросить уточнение лишь когда оно меняет рекомендацию, не более одного в день в пилоте. |
## Состояние запуска на момент аудита 3 октября, до нового shadow-сбора
[`com.personalos.readonly.plist`](file:///Users/admin/Developer/personal-os/com.personalos.readonly.plist) описывает 30-минутный `sync → status → attention`, но 3 октября `launchctl` не нашёл загруженный `com.personalos.readonly`. Следовательно, свежие данные Asana были результатом разового запуска; регулярный refresh сейчас не подтверждён. GitHub и ActivityWatch доступны в read-only проверке, но это не означает, что Personal OS регулярно объединяет их в рабочую тему.
## Минимальный сквозной пилот P0.1
**Один реальный рабочий поток:** Asana task с явным запросом к Алексу → связанный browser PR → локальный worktree → Codex/Claude run → итог, ожидающий его ревью. Система показывает текущую тему, источник запроса, свежесть, confidence и отдельно время человека/агента. Вторая ветка: статья или личный проект остаётся `unknown/personal`, пока нет доказательства намерения. Приёмка — 20 вручную проверенных интервалов из двух дней: ни одной ложной high-confidence связи и ни одного выдуманного `needs_human`.
**Следующий шаг по состоянию на 4 октября:** тихий сбор уже запущен. Проверить 20 интервалов на двух рабочих днях и исправить ложные связи; Outlook ждёт разрешённый Microsoft Graph app. Исполняемые пакеты и условия пилота — [[personal/plans/personal-os-operating-plan-2026-10-03]].