Files
obsidian-vault/wiki/personal-os-catchup-plan-2026-04-27.md
T

142 lines
6.6 KiB
Markdown
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.
---
source: raw/personal-os-catchup-plan-2026-04-27.md
content_hash: 5081ceb719104e1b7c6b5edd642c1daf38b3fd7cf1a96442a00516e7cdb15379
namespace: work
last_synced: 2026-05-30
confidence: 0.9
tags: [personal-os, plan, executor, catchup, 2026-04-27]
---
# Personal OS — Catch-Up Plan (2026-04-27)
Handoff document for the executor agent: what to build next, in what
order, and why. Companion to [[personal-os-state-2026-04-27]] which
tracks live state. By 2026-04-28 every item below shipped except the
partial MS365 MCP wiring (item 1.7).
## Context
Alex is a macOS Browser DRI at DuckDuckGo with an ADHD profile and a
fully-async workflow (Asana + Slack). The Personal OS holds work context
outside Alex's head — preventing lost comments, runaway projects, and
silent collapse of the career quadrant. Original four-agent design from
`personal-os-design-1.md`:
1. **Стратег** — scheduled Claude reads Asana, writes `status.md`.
2. **Тактик** — reactive layer over `status.md` + ActivityWatch +
Calendar; protects focus.
3. **Ретроспектор** — Friday-only, multi-week patterns.
4. **Исполнитель** — on-demand worker that drafts diffs and comments.
Pre-plan status: Стратег ✅, Тактик 🟡 (no focus gating, no Calendar),
Ретроспектор ✅, Исполнитель 🟡 (v1 only, manual STOP gates).
**Architectural principle (re-confirmed):** no new YAML, no new shell
scripts, no new launchd plists. Everything extends what already exists —
Postgres tables, `generate-status.js` queries, prompt files in
`agent/prompts/`, Eagle's SOUL.md rules.
## Deliverables (dependency-ordered)
### 1.1 Schema migration (single SQL file)
Adds `corrections_log` (date, week_number, source, original_plan,
correction, deferred_gids[], reason_tag), `executor_runs` (state machine
for autonomous executor: `analyzing → awaiting_analysis_approval → fixing
→ pr_open → ci_running → ci_failed → awaiting_user → complete`), and a
`quadrant TEXT` column on `activity_daily`
(`project|aor|career|strategy|other`). Tables over markdown because
Retrospector needs aggregates, not narrative. See [[personal-os-schema]].
### 1.2 `generate-status.js` — three new query blocks
Career advisor pipeline (open tasks where notes mention "Project
Advisor: Set the custom field"), visibility gaps (Assessments / O-N /
O-L tasks where Alex hasn't commented in 7+ days), and quadrant
classification at AW write time (project→quadrant map; top-priority
project is dynamic via config). Empty sections are omitted, not labelled
"No opportunities" — noise discipline.
### 1.3 `inbox-triage.md` STEP 0 — focus gating + scope filter
Prompt-level gate (not a wrapper script) so the agent retains override
judgment. Reads latest `activity_daily` focus_score / current_app, plus
MS365 calendar for active meetings. Skips when in a meeting, or when
focus_score > 60 in Xcode/Cursor/VSCode for 20+ minutes (unless
`status.md` has 🔴 sections older than 3h). Scope filter: inbox = NEW
signal only; overdue stays in daily-brief.
### 1.4 `retrospector.md` — three SQL blocks
Correction patterns (`reason_tag` counts over 4 weeks ≥ 3),
quadrant drift (4-week × 4-quadrant pivot; flag career under 5% for 3+
weeks), and visibility-this-week (count of comments in
Assessment/Objective tasks vs prior 4 weeks).
### 1.5 Eagle SOUL.md — `corrections_log` writeback
On any pushback in any channel: Eagle identifies pushback type and a
hyphen-tagged `reason_tag`, then silently `INSERT`s into
`corrections_log` before responding. Capture happens at the moment of
correction; no separate hook needed.
### 1.6 Executor v2 — draft-PR autonomous flow
Replaces v1 (STOP gates everywhere) with a **single** STOP gate after
the Analysis phase, then autonomous through build → test → branch →
push → `gh pr create --draft --assignee @me` (no reviewers) →
self-review → CI loop. Hard prohibitions: never push to
main/develop/release/*, never open a non-draft PR, never `--reviewer`,
never `gh pr merge`, never touch `.github/` or CI configs without
explicit thread confirmation. CI loop polls every 10 min; max 3 fix
attempts before state→`awaiting_user`.
### 1.7 MS365 MCP in Hermes
Wire `outlook_calendar_search` into Hermes for `inbox-triage`,
`weekly-plan`, and `daily-brief`. STEP 0 query: events with start ≤ now ≤
end + 1h. By 04-28 this was still 🟡 — cloud connector works in Claude
Code, no local npm package yet.
### 1.8 Vault consolidation
Process docs + UI testing skill + `apple-browsers/.cursor/*.mdc` files
all moved into `~/obsidian/work/wiki/`. Rule of thumb: process docs →
vault, runtime configs → original location. `.mdc` files are **copied**
(not moved) so Cursor IDE still finds them at the expected path. Each
moved file is verified by re-running the agent prompt or skill that
references it.
### 1.9 Executor-specific PR template (Option B inline)
Team's `.cursor/*.mdc` template requires manual confirmation of task /
reviewer / description — all known by definition in the autonomous flow.
Executor generates the PR body inline: Task (Asana link from
`executor_runs.task_gid`), Root Cause (from analysis), Fix Summary,
Testing block (build + unit + UI), Self-review checklist, Notes for
review. Draft state IS the "needs polish" signal.
## Order of execution
1, 2 → 3 → 4, 5 → 6, 7 → 8 → 9 → 10. Items 1-9 are independent in
practice; 10 (Executor v2 prompt) needs the schema (1), vault
consolidation (8), and PR template (9). **No new Discord channels
required** — existing seven channels cover every surface.
## Why these choices
- **Postgres over markdown / YAML / shell**: extends existing components,
aggregable, recoverable after crashes.
- **STEP 0 in the prompt, not a wrapper**: ADHD-aware override at the
edge cases ("focus is high but Dominik is tagging you directly").
- **Career as a forcing function**: when not surfaced every week, the
career quadrant predictably collapses to 0%.
- **Draft PR > Discord thread**: durable surface that doesn't scroll away.
- **Single STOP gate**: root-cause identification is the consequential
decision; mechanical CI re-pushes don't need human approval.
- **`executor_runs` table**: enables crash recovery, brief surfacing,
and Retrospector throughput counts.
## Definition of done
Six observable signals: targeted Retrospector callouts, signal-dense
inbox channel, populated Career section in `status.md`, single-row
`corrections_log` writes on pushback, autonomous draft PRs from
`#executor` within 30 min, and vault-resident process docs reachable
via obsidian-mcp.
## Related
[[personal-os-state-2026-04-27]] [[personal-os-schema]]
[[wiki-ingest-process]] [[ddg-asana-workflow]]