142 lines
6.6 KiB
Markdown
142 lines
6.6 KiB
Markdown
---
|
||
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]]
|