diff --git a/.claude/commands/memo.md b/.claude/commands/memo.md deleted file mode 100644 index c002258c..00000000 --- a/.claude/commands/memo.md +++ /dev/null @@ -1,23 +0,0 @@ -# Memory Update - -Purpose: Update branch memory files after completing work this session. - -## Execution - -1. Read `.trinity/passport.json` first — re-absorb your identity, role, and principles before writing memories -2. Review what was done this session (context, recent changes, key decisions) -3. Update each file below as needed -4. Confirm completion — list files updated - -## What to Update - -### Always - -- **.trinity/local.json** — Add new session entry to `sessions` if significant work was done. Add new `key_learnings` for facts you'd need next time. Trim oldest sessions if over 20. -- **.trinity/observations.json** — Add notable collaboration insights: breakthrough moments, pattern corrections, flow states, friction points, preference discoveries. Skip if nothing notable this session. - -### If Relevant - -- **.trinity/passport.json** — Evolve identity when the branch's role, capabilities, or principles have genuinely changed. Don't update just to update — but don't leave placeholders forever either. -- **README.md** — Does it reflect current state? Update if stale. -- **STATUS.local.md** — Drop quick notes on issues, todos, or ideas in the Notepad section. diff --git a/.claude/commands/prep.md b/.claude/commands/prep.md deleted file mode 100644 index 6514b96b..00000000 --- a/.claude/commands/prep.md +++ /dev/null @@ -1,53 +0,0 @@ -# Session Wrap-Up - -Purpose: Button up everything at the end of a session — or before a /compact. Memories, plans, git — all tidy. Works for both closing out a chat and preparing for compaction. - -**Workflow:** `/prep` → review output → close chat or `/compact` - -## Execution - -1. Read `.trinity/passport.json` first — re-absorb your identity before writing anything -2. Do ALL of the following, then confirm what was updated - -## 1. Memories (same as /memo) - -- **.trinity/local.json** — Add/update session entry with summary of work done. Add new key_learnings for anything learned this session. Trim oldest sessions if over 20. -- **.trinity/observations.json** — Add collaboration insights if anything notable happened. Skip if nothing new. -- **.trinity/passport.json** — Only update if role/purpose/principles genuinely changed this session. - -## 2. Active Plans - -- Check any DPLANs or FPLANs referenced in this session -- Update their execution logs, status, decision logs with current state -- If a plan was completed, note it (but don't close — the user does that) - -## 3. Git State - -- Run `git status` — report uncommitted changes -- If there's a logical commit waiting, suggest it (don't commit without asking) -- Note the current branch and any open PRs - -## 4. Inbox - -- Run `drone @ai_mail inbox 2>/dev/null` — report any unread emails -- Close any that were already processed but not formally closed - -## 5. Loose Ends - -- Flag anything in-flight: running background agents, dispatched branches waiting for replies, pending decisions -- If anything can't survive compaction (e.g., agent IDs needed for resume), write it to STATUS.local.md Notepad - -## Confirm - -List everything updated. Format: -``` -Prep complete: -- local.json: [what was added] -- observations.json: [updated / skipped] -- Plans: [which ones updated] -- Git: [branch, uncommitted count, suggestion] -- Inbox: [count, action taken] -- Loose ends: [any flagged] - -Ready to close out or /compact. -``` diff --git a/.git_pr.lock b/.git_pr.lock index 92ce95a1..a957e266 100644 --- a/.git_pr.lock +++ b/.git_pr.lock @@ -1,6 +1,6 @@ { "branch": "devpulse", "feature_branch": "", - "started": "2026-04-14T13:33:48.394474+00:00", - "pid": 233423 + "started": "2026-04-14T20:51:07.108726+00:00", + "pid": 450496 } \ No newline at end of file diff --git a/STATUS.md b/STATUS.md index ebbab835..15a958d1 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,7 +2,7 @@ > Auto-generated by `drone @prax status sync`. Do not edit manually. -**Last sync:** 2026-04-14 06:33 +**Last sync:** 2026-04-14 13:51 **Summary:** 8 operational | 0 in-progress | 0 not started --- @@ -239,6 +239,72 @@ ## Notepad (Agent) +### S92 (2026-04-14 ~12:45 PT) — PRE-COMPACT, system prompt reformat work in flight + +**Not shipped, verification-pending**: +- `/home/patrick/Projects/AIPass/.aipass/aipass_global_prompt.reformat.md` — draft reformat of AIPass's global system prompt in AIPL/Anthropic Claude Code style. Gitignored, not tracked. Original `.aipass/aipass_global_prompt.md` untouched. +- Multiple correction rounds applied this morning (terminology, memory roles, TDPLAN, librarian philosophy, sections removed). See DPLAN-0128 Context section for full history. + +**DPLAN-0128 is the execution plan** — 8 tracks, verification-first, designed to survive /compact. Post-compact session reads DPLAN-0128 first, then the two prompt files, then executes Tracks 1-6 serially (one branch/agent at a time), and ONLY promotes the reformat (Track 8) if all critical claims pass. Critical claims: TDPLAN command exists, no invalid commands in reformat, STATUS.local.md central sync is real. + +**Skill integration gaps to confirm**: +- `/prep` at `~/.claude/commands/prep.md` — Section 1 "Memories" lists local.json, observations.json, passport.json — does NOT include STATUS.local.md in the main update list +- `/memo` at `~/.claude/commands/memo.md` — STATUS.local.md is in "If Relevant" section, weak framing +- Proposed edits drafted verbally but not applied. DPLAN-0128 Track 3 verifies claim + applies fixes post-compact. + +**AIPL format standard question**: +- AIPL format is Anthropic-sourced per the user (unconfirmed) +- Decision: seedgo standard / prompt note / both — DPLAN-0128 Track 5 asks @seedgo to recommend + +**Gavin reply posted**: https://github.com/AIOSAI/AIPass/issues/261#issuecomment-4245709624 — done this morning. + +**Stale worktree flagged**: `/home/patrick/Projects/AIPass/.claude/worktrees/agent-aa2b7d43` on branch `fix/wake-claude-path-resolution` (PR #268) — leftover from last night's Track E. Cleanup in DPLAN-0128 Track 7 if safe, else manual. + +**S91 follow-ups still open**: +- PRs #265-#270 await merge (user reviews in their own time) +- Track G (AIPL log leak) still blocked — prax ghosted last night, needs firm retry +- PR #269 category-d flags (code-level /home/patrick/ paths in symbolic.py, branch_detector.py docstrings, .claude/settings.json deny rules, ai_mail docstrings) +- 2% usage finding to confirm (S91 night shift burned less than expected) + +**Next steps**: /compact (the user does this) → post-compact session reads DPLAN-0128 → executes. + +### S91 (2026-04-14 ~05:00 Pacific) — NIGHT SHIFT COMPLETE + +**6 PRs shipped tonight** — all awaiting AIPass Developer review: +- **#265** — devpulse docs restructure (README 209→35 lines + new SETUP.md with Linux/Mac/Windows/WSL/uninstall/troubleshooting) +- **#266** — drone three bugs fix (`system-pr` git add -A, STATUS.md sync before commit, Rich help table + bonus encapsulation fix) +- **#267** — Windows compat for issue #261 (bootstrap.py pathlib traversal, setup.sh OS detection, new cross-platform setup.py) +- **#268** — wake PATH isolation fix (bare `claude` → absolute path via shutil.which + ~/.local/bin PATH prepend) +- **#269** — personal-name scrub (11 files, 14+/14-, flagged category-d code paths for manual review) +- **#270** — Compass devpulse personal layer scaffold (triple-layer gitignore, compass_wrapper.py stub, bypass entries) + +**Research reports in `.trinity/night_shift_reports/`** — morning reading: +- `anthropic_peak_hours.md` — peak hours are 5 AM–11 AM Pacific (AIPass Developer's intuition was inverted) +- `repo_etiquette.md` — top gaps: SECURITY.md (urgent), CHANGELOG.md, root-level INSTALLATION.md +- `local_llm_research.md` — hybrid recommendation: Qwen 2.5 3B Q4 Ollama local + Llama 3.3 70B / DeepSeek R1 OpenRouter free +- `watchdog_design.md` — full design for future hooks session (Options A-D insufficient, Option E requires hooks) +- `compass_layer_design.md` — full 6-question design + initial seed strategy + +**Gavin reply draft**: `/tmp/gavin_reply_261.md` — ready for AIPass Developer review/approval/posting + +**Track G blocked**: @prax ghosted the AIPL log leak dispatch (exited code=0 after 722s but no PR, no reply). Same pattern as S90 `prax_needs_firm_prompts` learning. Retry in morning with MANDATORY framing. + +**Time log**: `.trinity/time_log.jsonl` — 24 entries, 12 complete, 189.5 min tracked. First temporal data point. + +**Anthropic peak hours reality**: I finished the night shift inside the off-peak window. Peak starts at 5 AM Pacific and runs until 11 AM. The "cross 5 AM" theory was backwards but the net effect was right — I paced serial and finished before 5 AM anyway. + +**Total runtime**: ~2h50m of session wall-clock, ~3h09m of tracked task time (overlap from watchdog waits). + +**Session cost estimate**: 6 branch dispatches + 5 sub-agent spawns + manual work. Within off-peak doubled-limit promotion, so cheap. + +**NEEDS AIPASS DEVELOPER ATTENTION**: +1. Review and merge PRs #265-270 (in order — #266 drone fix unblocks future `system-pr` usage) +2. Review Gavin reply draft, approve and post to issue #261 +3. Read the 5 research docs in `.trinity/night_shift_reports/` +4. Retry Track G (AIPL log leak) — prax needs firm framing +5. Manually review category-d code path flags from PR #269 (symbolic.py priority_dirs, branch_detector.py docstrings, .claude/settings.json deny rules, ai_mail docstrings blocked by pre-existing seedgo) +6. Consider landing the hooks session soon — unblocks watchdog-as-code (Track H) + audio hook cleanup + ### S91 (2026-04-14 early AM) — Issue #261 triage + cleanup + night shift planning **Status at /prep** (02:15 AM, going into autonomous night shift): @@ -655,14 +721,14 @@ init_prax, shutdown, discover, run, terminal — in modules/.archive/ -
@seedgo — Operational — 99% self-audit (32/33 standards at 100%, Architecture 99%) (2026-04-11 (session 58 — pytest.ini investigation, no standard exists, no other branches affected)) +
@seedgo — Operational — 99% self-audit (32/33 standards at 100%, Architecture 99%) (2026-04-14 (session 59 — DPLAN-0128 Track 5 advisory: recommend prompt note + ref doc over 34th standard)) # @seedgo > Standards enforcement, 32-standard audit pack + seedgo proof system (CERTIFIED) + hook ownership **State:** Operational — 99% self-audit (32/33 standards at 100%, Architecture 99%) -**Last update:** 2026-04-11 (session 58 — pytest.ini investigation, no standard exists, no other branches affected) +**Last update:** 2026-04-14 (session 59 — DPLAN-0128 Track 5 advisory: recommend prompt note + ref doc over 34th standard) ## Session 43 — Dispatch Processing diff --git a/src/aipass/cli/apps/handlers/init/bootstrap.py b/src/aipass/cli/apps/handlers/init/bootstrap.py index d90e64b4..7bb36f33 100644 --- a/src/aipass/cli/apps/handlers/init/bootstrap.py +++ b/src/aipass/cli/apps/handlers/init/bootstrap.py @@ -458,6 +458,91 @@ def _claude_settings(aipass_home: str | None = None) -> str: return json.dumps(data, indent=2, ensure_ascii=False) + "\n" +def _prep_md() -> str: + """Generate .claude/commands/prep.md — /prep session wrap-up slash command. + + Project-scoped slash command. Sessions wrap up by buttoning up memories, + plans, git state, inbox, and loose ends. Ships per-project via aipass init + so every AIPass project has a consistent /prep flow. + """ + return ( + "# Session Wrap-Up\n" + "\n" + "Purpose: Button up everything at the end of a session — or before a " + "/compact. Memories, plans, git — all tidy. Works for both closing out " + "a chat and preparing for compaction.\n" + "\n" + "**Workflow:** `/prep` → review output → close chat or `/compact`\n" + "\n" + "## Execution\n" + "\n" + "1. Read `.trinity/passport.json` first — re-absorb your identity " + "before writing anything\n" + "2. Do ALL of the following, then confirm what was updated\n" + "\n" + "## 1. Memories\n" + "\n" + "Each memory file plays a distinct role. Update based on what actually " + "changed this session.\n" + "\n" + "- **`.trinity/passport.json`** — IDENTITY. Who you are: role, " + "capabilities, principles. Only update if identity genuinely evolved " + "this session.\n" + "- **`.trinity/local.json`** — YOUR MEMORY. Add/update session entry " + "with a summary of work done. Add key_learnings for anything learned. " + "Trim oldest sessions if over 20.\n" + "- **`.trinity/observations.json`** — YOUR MEMORY OF THE USER. " + "Collaboration insights, preferences, friction points. Skip if nothing " + "new about the user this session.\n" + "- **`STATUS.local.md`** — PUBLIC STATUS BEACON. Current work, known " + "issues, todos, notepad. Auto-synced to central STATUS.md on PR events " + "— this is how other branches see you. Keep Current Work accurate.\n" + "\n" + "## 2. Active Plans\n" + "\n" + "- Check any DPLANs or FPLANs referenced in this session\n" + "- Update their execution logs, status, decision logs with current " + "state\n" + "- If a plan was completed, note it (but don't close — the user does " + "that)\n" + "\n" + "## 3. Git State\n" + "\n" + "- Run `git status` — report uncommitted changes\n" + "- If there's a logical commit waiting, suggest it (don't commit " + "without asking)\n" + "- Note the current branch and any open PRs\n" + "\n" + "## 4. Inbox\n" + "\n" + "- Run `drone @ai_mail inbox 2>/dev/null` — report any unread emails\n" + "- Close any that were already processed but not formally closed\n" + "\n" + "## 5. Loose Ends\n" + "\n" + "- Flag anything in-flight: running background agents, dispatched " + "branches waiting for replies, pending decisions\n" + "- If anything can't survive compaction (e.g., agent IDs needed for " + "resume), write it to STATUS.local.md Notepad\n" + "\n" + "## Confirm\n" + "\n" + "List everything updated. Format:\n" + "```\n" + "Prep complete:\n" + "- local.json: [what was added]\n" + "- observations.json: [updated / skipped]\n" + "- STATUS.local.md: [updated / skipped]\n" + "- Plans: [which ones updated]\n" + "- Git: [branch, uncommitted count, suggestion]\n" + "- Inbox: [count, action taken]\n" + "- Loose ends: [any flagged]\n" + "\n" + "Ready to close out or /compact.\n" + "```\n" + ) + + def _inbox_json() -> str: """Generate .ai_mail.local/inbox.json — empty project mailbox structure.""" return json.dumps( @@ -615,6 +700,14 @@ def init_project(target: Path, project_name: str | None = None) -> dict: settings_path.write_text(_claude_settings(aipass_home), encoding="utf-8") created.append(str(settings_path)) + # 9b. .claude/commands/prep.md — /prep session wrap-up slash command + commands_dir = claude_dir / "commands" + commands_dir.mkdir(exist_ok=True) + prep_path = commands_dir / "prep.md" + if not prep_path.exists(): + prep_path.write_text(_prep_md(), encoding="utf-8") + created.append(str(prep_path)) + # 10. hooks/ directory hooks_dir = target / "hooks" if not hooks_dir.exists(): @@ -742,6 +835,17 @@ def update_project(target: Path) -> dict: else: already_current.append(str(gemini_md_path)) + # .claude/commands/prep.md — managed slash command, refresh to latest + commands_dir = claude_dir / "commands" + commands_dir.mkdir(exist_ok=True) + prep_path = commands_dir / "prep.md" + generated = _prep_md() + if not prep_path.exists() or prep_path.read_text(encoding="utf-8") != generated: + prep_path.write_text(generated, encoding="utf-8") + updated.append(str(prep_path)) + else: + already_current.append(str(prep_path)) + # --- User-owned files: always skip --- for skip_name in ( str(registry_path),