diff --git a/.aipass/aipass_global_prompt.md b/.aipass/aipass_global_prompt.md index be861ce0..b8605887 100644 --- a/.aipass/aipass_global_prompt.md +++ b/.aipass/aipass_global_prompt.md @@ -174,7 +174,7 @@ If the conversation suddenly shifts to a topic, project, or domain that doesn't - **No cross-branch file edits.** If you find an issue in another branch → email them. - **No bare imports.** Always `from aipass.{module}.apps.modules...` - **No hardcoded paths.** Use `Path(__file__).parents[N]` or drone for resolution. -- **Never move, archive, or delete files with "patrick" in the name.** Patrick's personal files (audits, templates, notes) are off-limits. Don't reorganize them, don't archive them, don't touch them. +- **Never move, archive, or delete files with "patrick" in the name.** The AIPass Developer's personal files (audits, templates, notes) are off-limits. Don't reorganize them, don't archive them, don't touch them. - **No deleting files.** Tag with `(disabled)` and move to `.archive/`: - Rename the file: `my_handler.py` → `my_handler(disabled).py`. The `(disabled)` tag is gitignored — it blocks imports and keeps the file out of version control while preserving it locally. - If `.archive/` doesn't exist in the current directory, create it. Place `.archive/` next to the files being moved — if you're in `handlers/`, the archive goes in `handlers/.archive/`. If in `apps/`, it goes in `apps/.archive/`. @@ -213,7 +213,7 @@ What to save where: - `observations.json` → collaboration patterns (how the user works, what works well, what to avoid) - `STATUS.local.md` → current work, known issues, todos, recently completed. Surfaces in pre-compact recovery and startup reads. -**Don't stress about compaction.** We run on a 1M context window. Patrick monitors context usage and controls compaction manually — it's his job, not yours. Auto-compact is effectively obsolete. Save your memories because they're valuable, not because you're racing a clock. The cost of saving too often is zero. +**Don't stress about compaction.** We run on a 1M context window. The user monitors context usage and controls compaction manually — it's their job, not yours. Auto-compact is effectively obsolete. Save your memories because they're valuable, not because you're racing a clock. The cost of saving too often is zero. ## Breadcrumbs diff --git a/.claude/README.md b/.claude/README.md index 26a483b7..f272b436 100644 --- a/.claude/README.md +++ b/.claude/README.md @@ -145,7 +145,7 @@ Defined in `settings.json` (this directory). These DO fire from subdirectories. **What:** Injects `# Current Time: Thursday, April 2 2026 — 11:24 AM` as its own system-reminder every turn. -**Why:** Claude has no temporal awareness by default — doesn't know what time it is, how long a session has been running, or whether it's day/night. Patrick requested this in S71 as the first step toward autonomous scheduling, task duration estimation, and personal reminders. A year-old wishlist item finally built. +**Why:** Claude has no temporal awareness by default — doesn't know what time it is, how long a session has been running, or whether it's day/night. The user requested this in S71 as the first step toward autonomous scheduling, task duration estimation, and personal reminders. A year-old wishlist item finally built. **How:** Pure inline shell — no script file. Added as a separate entry in `~/.claude/settings.json` UserPromptSubmit array so it gets its own system-reminder block (not buried in the 13.6KB global prompt output). diff --git a/.claude/worktrees/agent-aa2b7d43 b/.claude/worktrees/agent-aa2b7d43 new file mode 160000 index 00000000..98191fa9 --- /dev/null +++ b/.claude/worktrees/agent-aa2b7d43 @@ -0,0 +1 @@ +Subproject commit 98191fa97e9e91fd5dd1f0b12e23b97907dbdadc diff --git a/.git_pr.lock b/.git_pr.lock new file mode 100644 index 00000000..d2fa7a04 --- /dev/null +++ b/.git_pr.lock @@ -0,0 +1,6 @@ +{ + "branch": "devpulse", + "feature_branch": "", + "started": "2026-04-14T13:14:01.042006+00:00", + "pid": 219648 +} \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index fb4b472f..374fba6e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -44,7 +44,7 @@ You are a citizen of AIPass. Your `.trinity/passport.json` defines who you are. ## Security -- NEVER read, access, or reference files in `~/.secrets/` or `/home/patrick/.secrets/`. This directory contains API keys, tokens, and recovery codes. No agent needs to see this. Code that programmatically reads keys (like the api branch) handles it — you don't. +- NEVER read, access, or reference files in `~/.secrets/`. This directory contains API keys, tokens, and recovery codes. No agent needs to see this. Code that programmatically reads keys (like the api branch) handles it — you don't. - NEVER output credentials, tokens, or API keys in responses. ## Key Principles diff --git a/CLAUDE.md b/CLAUDE.md index 202f65a6..06b003a3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,7 +15,7 @@ On any greeting, silently read these files from CWD and run the commands — no ## Security -- NEVER read, access, or reference files in `~/.secrets/` or `/home/patrick/.secrets/`. This directory contains API keys, tokens, and recovery codes. No agent needs to see this. Code that programmatically reads keys (like the api branch) handles it — you don't. +- NEVER read, access, or reference files in `~/.secrets/`. This directory contains API keys, tokens, and recovery codes. No agent needs to see this. Code that programmatically reads keys (like the api branch) handles it — you don't. - NEVER output credentials, tokens, or API keys in responses. ## Memories diff --git a/GEMINI.md b/GEMINI.md index fb4b472f..374fba6e 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -44,7 +44,7 @@ You are a citizen of AIPass. Your `.trinity/passport.json` defines who you are. ## Security -- NEVER read, access, or reference files in `~/.secrets/` or `/home/patrick/.secrets/`. This directory contains API keys, tokens, and recovery codes. No agent needs to see this. Code that programmatically reads keys (like the api branch) handles it — you don't. +- NEVER read, access, or reference files in `~/.secrets/`. This directory contains API keys, tokens, and recovery codes. No agent needs to see this. Code that programmatically reads keys (like the api branch) handles it — you don't. - NEVER output credentials, tokens, or API keys in responses. ## Key Principles diff --git a/HERALD.md b/HERALD.md index 1c6b188f..69da1520 100644 --- a/HERALD.md +++ b/HERALD.md @@ -38,7 +38,7 @@ Watchdog fixed. Night shift: 4 DPLANs (0107-0110), 10 branches dispatched, PRs # Decided to split 4 agents to standalone projects (backup, daemon, commons, skills); api reinstated as infrastructure. 6 parallel agents verified zero code dependencies. Updated README from 15 → 11 agents. All agent tables, tree diagrams, TOC, metrics updated. CLI dispatched for src/ directory in init + CWD-aware sync-registry for spawn. ### S81 — aipass init v2 + Vera Studio (2026-04-08) -TDPLAN-0002: Complete init overhaul. CLI, spawn, drone worked in parallel. Init now creates 10 items with real content (CLAUDE.md, AGENTS.md, GEMINI.md, global prompt, README, .gitignore, hooks, settings). `aipass init agent` routes to spawn. Spawn added --template flag + CLAUDE.md to builder template. Drone added spawn to routing_config.json. Prax fixed watchdog with --daemon mode + statusline indicator. Vera Studio project created. Patrick testing as real first-time user — found .trinity shouldn't be in project root, local prompt is agent-level only. CLI fixed both. DPLAN-0105 (promotion prep), DPLAN-0106 (watchdog v2). PRs #204-205. +TDPLAN-0002: Complete init overhaul. CLI, spawn, drone worked in parallel. Init now creates 10 items with real content (CLAUDE.md, AGENTS.md, GEMINI.md, global prompt, README, .gitignore, hooks, settings). `aipass init agent` routes to spawn. Spawn added --template flag + CLAUDE.md to builder template. Drone added spawn to routing_config.json. Prax fixed watchdog with --daemon mode + statusline indicator. Vera Studio project created. The AIPass Developer testing as real first-time user — found .trinity shouldn't be in project root, local prompt is agent-level only. CLI fixed both. DPLAN-0105 (promotion prep), DPLAN-0106 (watchdog v2). PRs #204-205. ### S80 — README Marathon + 14-Branch Audit (2026-04-07/08) FPLAN-0165 executed (README 366→279 lines). Goldfish Rounds 5-7: R5 approval (8/8.5/9 ratings), R6 branch deep dive (flow+memory undersold, honest tagging builds credibility), R7 hands-on CLI (routing 100%, nothing broke). 14 branches dispatched simultaneously for state audit — all completed in 15 min, 3,600+ tests, 11/14 at 100% seedgo. README Round 7 update (flow/memory lifecycle, transparency sentence). CLI init bug fixed (double prefix). Watchdog race condition fixed. PyPI 2.0.0 published. ~/.secrets/ blocked across all 3 CLIs. DPLAN-0099 updated through 7 rounds. Gemini free tier dead. PRs #202-203. diff --git a/STATUS.md b/STATUS.md index 65bee475..2361622d 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-10 00:40 +**Last sync:** 2026-04-14 06:14 **Summary:** 8 operational | 0 in-progress | 0 not started --- @@ -73,14 +73,14 @@ -
@api — Operational | **Seedgo:** 100% (33/33) | **Tests:** 290 pass, 64/64 functions (2026-04-07) +
@api — Operational | **Seedgo:** 99% (32/33 at 100%) | **Tests:** 290 pass, 65/65 functions (2026-04-10) # @api > Centralized external API gateway — authenticated service clients for all external APIs -**State:** Operational | **Seedgo:** 100% (33/33) | **Tests:** 290 pass, 64/64 functions -**Last update:** 2026-04-07 +**State:** Operational | **Seedgo:** 99% (32/33 at 100%) | **Tests:** 290 pass, 65/65 functions +**Last update:** 2026-04-10 ## Milestones - OpenRouter client (get_response, models, test) @@ -93,7 +93,7 @@ - Backup migration to use our Google module (pending backup) ## Known Issues -- `cleanup` command fails with "Cleanup failed" — likely no usage data file exists to clean. Needs better error handling for empty state. +- Seedgo Architecture 99% — missing CLAUDE.md from builder template (pre-existing, not a real gap) - Seedgo introspection standard doesn't account for standalone commands (workaround in place) ## Command Audit (2026-04-07) @@ -117,26 +117,26 @@ | `stats` | OK | No data (expected) | | `session` | OK | No data (expected) | | `caller-usage` (no args) | OK | Proper error message | -| `cleanup` | FAIL | "Cleanup failed" | +| `cleanup` | OK | Now handles empty state gracefully | -## Recent (Session 19, 2026-04-07) -- Branch state audit (discovery only) — dispatch from @devpulse -- 14/15 commands operational, 1 failure (cleanup) -- Seedgo 100%, 290 tests, no type errors -- README updated with full command list, cleanup tagged as not operational -- No APLAN exists for this branch +## Recent (Session 20, 2026-04-10) +- S84 dispatch from @devpulse — 3 CRITICAL security fixes + 3 BUG fixes +- CRITICAL: get_cache_stats() no longer exposes raw API keys +- CRITICAL: .env and google_creds.json now created with 0o600 permissions +- BUG: Validation rules aligned, cleanup return type fixed, stats/session differentiated +- 290/290 tests, seedgo 99%, no type errors
-
@cli — Operational (2026-04-07) +
@cli — Operational (2026-04-11) # @cli > Display service, Rich formatting for all branches **State:** Operational -**Last update:** 2026-04-07 -**Seedgo:** 100% (all standards green, 33+ bootstrap tests) +**Last update:** 2026-04-11 +**Seedgo:** 100% (all standards green, 161 tests) ## Branch State Audit (2026-04-07) @@ -147,7 +147,7 @@ | `drone @cli` (introspection) | Works — shows 1 command module + 2 services | | `drone @cli --version` | Works — v2.0.0 | | `drone @cli aipass` | Works — shows subcommand table | -| `drone @cli aipass init /path Name` | Works — creates 14 items (v2) | +| `drone @cli aipass init /path Name` | Works — creates 12 items | | `drone @cli aipass init agent ` | Works — routes to spawn | | `drone @cli aipass init --help` | Works — Rich-formatted help | | `drone @cli display` | Works — shows function list | @@ -164,7 +164,7 @@ - **Extra dirs:** artifacts/, docs/, docs.local/, templates/, tools/ — exist but not in architecture tree ### Tests -- 138 tests, 6 files, 5/5 modules covered, all passing +- 161 tests, 6 files, 5/5 modules covered, all passing - Seedgo Test_Quality: 100% ### No APLAN @@ -179,35 +179,42 @@ - 138 unit tests (100% module coverage) ## Current Work -- TDPLAN-0002: aipass init v2 — CLI section complete (S19). Templates rewritten, 6 new files, init agent subcommand, next steps output. +- S31: DPLAN-0121 (AIPASS_HOME auto-setup + external mailbox) + local prompt hook (5eb695d7). 161 tests. ## Known Issues - None. All commands operational, all tests passing, seedgo 100%.
-
@devpulse — Operational (2026-04-09 (S83 23:52)) +
@devpulse — Operational (2026-04-11 (S90 17:59)) # @devpulse -> Orchestration hub — coordinates via dispatch + agents (no apps/) +> Orchestration hub — coordinates via dispatch + agents. Feedback channel live. **State:** Operational -**Last update:** 2026-04-09 (S83 23:52) +**Last update:** 2026-04-11 (S90 17:59) ## Current State - **11 core agents** (split from 15 — backup, daemon, commons, skills moved to standalone projects; api reinstated as infrastructure) -- **82 sessions** of development -- **207+ PRs** merged -- **4,900+ tests** across core agents +- **90 sessions** of development +- **230+ PRs** merged (PR #254 created S90) +- **3,500+ tests** across core agents (1,162 verified S90) +- **Feedback channel:** Cross-project communication bridge (DPLAN-0117, 101 tests) - **PyPI:** `pip install aipass` works (v2.0.0) -- **Vera Studio:** standalone promotion project (separate from AIPass construction) +- **Vera Studio:** standalone promotion project — 4 bug reports received via feedback - **Goldfish panel:** 7-round multi-model README review (Claude + Codex + Gemini) ## Active Work -- **S83 Adversarial Audit:** 22 Opus agents audited all 11 branches (code + docs). 350+ findings. All 11 APLANs updated. 11 CRITICALs across 6 branches. PR #211. Wave 2 (verification pass) next. +- **S90 In Progress:** SYSTEM HEALTH + CROSS-PROJECT COMPLETION. Dispatch -c -p bug found (Claude Code v2.1.90-100, fixed v2.1.101, DPLAN-0122). AIPASS_HOME added to .bashrc + settings.json. Vera 4 bug reports via feedback (ai_mail registry hardcode, export issue, registry ID mismatch, local prompt hook). CLI built AIPASS_HOME auto-detect + project mailbox (DPLAN-0121 P1+2). Drone JSON KeyboardInterrupt fix. Prax monitor refactored (introspection extracted). Test isolation fixes (AIPASS_HOME leaking). PR #254. DPLAN-0123 system health tracker. ai_mail dispatched for bidirectional email (Phase 3). Prax re-dispatched for Ctrl+C fix. +- **S89 Complete:** FULL EXTERNAL ACCESS + FEEDBACK BRIDGE. Dual registry (AIPASS_HOME), global prompt template rewrite (7→expanded with dispatch+dplan+feedback), UX warnings when AIPASS_HOME not set, idempotent init update (diff check), feedback channel built (DPLAN-0117/FPLAN-0173, 101 tests, cross-project sender detection). 8 dispatches to drone/cli/seedgo/flow. Global prompt: "ask before spelunking" rule + feedback section added. +- **S88 Complete:** AIPL Phase 1 complete. Style guide + 6 examples. Polyglot wired. DPLAN-0115. Global prompt: no manual plan files. +- **S87 Complete:** COMPASS STANDALONE + IMPROVEMENTS. DPLAN-0113 complete (7 imports→stdlib, handler guard removed, module path fixed, tests updated 89/89). Compass v0.2: observations parser (75 fragments), richer embedding text (context+decision+feedback+tags), ingest-obs/ingest-all commands, 103 total fragments. 7 orphaned watchdog processes killed. backup/ dir confirmed gone. 4 commits pushed to AIOSAI/compass. +- **S86 Complete:** 6-HOUR AUTONOMOUS SESSION (DPLAN-0111). 41 dispatches. 15 PRs (#233-247). 11 CRITICALs + 35+ BUGs + 25+ quality fixes. DPLAN-0112 COMPLETE. Seedgo 22-23/33 at 100%. APLAN 42→7. decisions.md #029+#030. +- **S85 Complete:** TRIGGER SELF-HEALING LIVE. Git divergence fixed (merge not reset). Drone git fix/sync upgraded (PR #229). OSS Health badge (PR #230). 13 stale plans closed (28→15). Trigger Medic v2 fixed: log_watcher dedup, count gate removed, wake_branch() wired. Full autonomous error cycle proven. +- **S84 Complete:** Watchdog fixed. Night shift: 4 DPLANs (0107-0110), 10 branches dispatched, PRs #214-226. API key incident. 28 stale branches purged. - **Hook-sounds plugin:** Built by drone, wired to sound scripts. `drone hook-sounds off/on`. - **DPLAN-0106:** Watchdog v2 — Phase 2 depends on daemon (removed). Needs replanning. - **DPLAN-0105:** Promotion prep — Vera owns execution. @@ -222,14 +229,114 @@ ## Known Issues -- **Watchdog:** Doesn't survive Claude Code background tasks. DPLAN-0106 addresses this (tmux/daemon approach). -- **Hooks:** Don't work from external projects. aipass init generates .claude/settings.json but hooks reference AIPass-specific scripts. Logged in seedgo branch audit. -- **backup:** Still in src/aipass/ — needs to be moved to standalone project. -- **drone.py:** `interactive_branches = ("cli", "backup")` — backup reference needs removing after move. -- **Memory rollover:** devpulse at 22/20 sessions, 26/25 learnings (trimmed in S81, but keeps growing). +- **Watchdog:** v1.1 (snapshot pattern) working since S85. Orphaned processes cleaned up S87. +- **Wake protection:** Any branch can manually wake devpulse. Medic only blocks auto-dispatch. Needs blocklist in wake.py. +- **Hook inbox notification:** Cosmetic only — watchdog handles real waking. +- **Hooks:** Don't work from external projects. Hooks reference AIPass-specific scripts. +- **backup:** Directory confirmed gone from disk S87. Registry cleaned S86. +- **Memory rollover:** At limit (20/20 sessions, 25/25 learnings). Auto-archives on next write. - **inotify limits:** System-wide exhaustion when many agents run simultaneously. Cosmetic warning. -## Notepad +## Notepad (Agent) + +### S91 (2026-04-14 early AM) — Issue #261 triage + cleanup + night shift planning + +**Status at /prep** (02:15 AM, going into autonomous night shift): + +- **3 PRs created**: #262 (cleanup + scrub + epigraph + gitignore), #263 (S90 stragglers drone system-pr missed), #264 (STATUS.md auto-sync refresh) — all need AIPass Developer merge. +- **`.claude/CLAUDE.md`**: Patrick scrub complete (3 lines). Only private global `~/.claude/CLAUDE.md` retains the name. +- **`README.md`**: memory/presence epigraph added near line 40 with `— AIPass` attribution. +- **`trigger_data.lock`**: explained (fcntl process lock from log_watcher_service PID 1622), gitignored with pattern `src/aipass/trigger/*.lock`. +- **`unknown_branch/`**: confirmed AIPL polyglot log leak. Tracked as Track G of DPLAN-0125. +- **Issue #261 (Gavin Rooney, Windows 10)**: triaged. 3 real bugs (setup.sh symlink, bootstrap.py bash loop, audio hooks). Stale-clone artifacts (old .claude/settings.json `/home/patrick` paths removed April 5). Non-bugs (AIPASS_REGISTRY.json gitignored, passports not tracked). Reply draft pending (FPLAN-0183 Step 1). +- **Feedback channel tests**: grep showed 0 module-level test defs — needs verification morning, may be class-based. + +**Plans built**: +- **DPLAN-0125** — S91 Night Shift master plan. 10 tracks, SERIAL execution strategy, cross-5AM pacing theory. +- **DPLAN-0126** — Future research: local LLM + OpenRouter free tier (split from 0125 as future-ideas bucket). +- **FPLAN-0183** — Step-by-step execution script. Post-compact survival. 12 numbered steps + pre-flight. This is what I follow when I wake up. + +**Autonomous night shift directive from the AIPass Developer**: GO. Serial execution, deliberate slow pacing, cross 5 AM peak-hours cutoff, do not touch `.claude/hooks/*`, do not merge PRs, log time per track to `.trinity/time_log.jsonl`, keep going until usage cap or dawn. + +**Known bugs that will bite during execution**: +1. `drone @git system-pr` doesn't stage untracked files — stage manually with `git add` before running it +2. `drone @git system-pr` leaves STATUS.md dirty after every run — known, accept it, do NOT chase the loop +3. Wake command may not work (S90 flag — Track E investigates) + +**Loose ends at /prep**: +- STATUS.md still modified (drone bug, documented, ignored) +- trigger log_watcher_service running (PID 1622, healthy, leave it) +- No background agents running, no open watchdogs at /prep time +- Next action after compact: Step 0.5 of FPLAN-0183 (Anthropic peak hours WebSearch) → Step 1 (Gavin reply draft) → onward + +**The AIPass Developer is asleep. Work alone. Stay steady.** + +### S90 (2026-04-11 evening) — System health + cross-project completion +- **Dispatch -c -p bug:** Claude Code v2.1.90-100 broke headless resume. Fixed v2.1.101. DPLAN-0122 (closed). +- **AIPASS_HOME:** Added to .bashrc (export) + ~/.claude/settings.json env. CLI auto-detects via importlib. +- **Vera 4 bugs via feedback:** All resolved. Registry hardcode (PR #255), export (manual), registry ID (spawn already built), local prompt hook (PR #257). +- **5 PRs:** #254 (drone JSON+cli init+test isolation), #255 (ai_mail bidirectional), #256 (prax cleanup), #257 (local prompt hook), #258 (prax Ctrl+C+labels) +- **Prax finally delivered:** Ctrl+C clean exit, UNKNOWN→AIPL/POLYGLOT labels, AI_MAIL→AI_MAIL label fix. Took 4 dispatches. +- **Contacts system built:** identity.json + contacts.json + auto-registration. PR #259. +- **Cross-project email WORKING:** Vera→@strategy tested live in tmux. Two fixes: sender detection (drone router_handler) + target resolution (ai_mail delivery.py loads caller registry). PR #260. +- **15+ dispatches:** ai_mail x4, prax x4, drone x1, cli x2, spawn x1, flow x1, + sub-agents +- **PRs #249-260 all need merge** (Patrick reviews in his own time) +- **Wake broken:** dispatch wake not working at end of S90. Investigate S91. +- **NEEDS PATRICK:** Merge PRs #249-260 + +### S89 (2026-04-11 afternoon) — Full external access + feedback bridge +- AIPASS_HOME dual registry: drone loads both local + AIPass registries simultaneously +- Global prompt template rewrite: 3→7 sections, all command variants (dplan/aplan/master, dispatch, feedback) +- UX warnings: drone systems hints + BranchNotFoundError guidance when AIPASS_HOME not set +- `aipass init update` idempotent: content diff before write, "Already current" for unchanged files (8 new CLI tests) +- Feedback channel (DPLAN-0117/FPLAN-0173): cross-project communication bridge + - 4 handler files + 1 module, 101 tests passing + - Sender auto-detected via AIPASS_CALLER_BRANCH env var + - Reply path stored per-message for cross-project delivery + - Fixed devpulse.py module discovery (full package import path) + - Fixed pytest.ini inline comments bug (seedgo confirmed: isolated to devpulse, no standard exists) +- Global prompt: "ask before spelunking" rule + feedback section added +- Learning: dispatch the question to branches instead of reading 4-5 unfamiliar files + +### S88 (2026-04-11 morning) — AIPL Phase 1 + global prompt fix +- AIPL Phase 1 COMPLETE: docs/style_guide.md (7 rules, symbols, content types, anti-patterns, decode protocol, quick reference) +- 6 before/after examples: session_log, observation, email, status_update, plan, delta_update (54-69% savings) +- Polyglot agent wired: local prompt filled, CLAUDE.md updated with AIPL context +- DPLAN-0115 created via flow (replaced manual DPLAN-001 — wrong numbering) +- Global prompt: "Never create plan files manually" rule added +- Learning: external AIPass projects still use AIPass tooling (flow, seedgo) — don't bypass + +### S87 (2026-04-11 morning) — Model choice + AIPL + init update +- dispatch --model flag: sonnet default, all 3 tiers tested (sonnet/haiku/opus confirmed in process args) +- Apr 4 usage policy change discovered — sub-agent compute metered more aggressively +- Compass decisions #031-033 written (autonomy patterns, PR stacking, build vs use) +- DPLAN-0114: aipass init update (5 phases). cli+spawn+drone dispatched, all replied. Registry fix, hook fixes, source headers ready. +- Patrick-Personal deny rules added to AIPass settings +- Vera Studio S3 reviewed — registry mismatch, missing hooks, 5 gaps documented in DPLAN-0114 +- AIPL PROJECT LAUNCHED: ~/Projects/AIPL/. 72K research transferred. DPLAN-001 written. Caveman analyzed (neighbor, not parent). Build from scratch, hand to Polyglot when ready. +- PRs #231-248 ALL MERGED (Patrick merged #247 for S86 stack, #248 for S87) +- Trigger cleaned up after PC shutdown (stale lock removed, log_watcher auto-restarted, processed 2 pending emails) +- **NEEDS PATRICK:** Wake protection — any branch can manually wake devpulse +- **NEEDS PATRICK:** CLAUDE.md template gap — spawn template has it, no branch does + + +### S86 (2026-04-10 afternoon) — Autonomous session +- 41 dispatches, 15 PRs (#233-247), DPLAN-0112 complete +- Devpulse APLAN: 42→7 open items +- decisions.md: #029 (dispatch patterns) + #030 (fixes→architecture in one session) + +### S85 (2026-04-10 morning) +- TRIGGER SELF-HEALING PROVEN: Full autonomous error cycle — detect → dispatch → wake → fix → report +- Fixes to trigger: (1) log_watcher dedup blocking count increment, (2) report_error() count==2 gate, (3) wake_branch() after email delivery +- Drone git fix/sync upgraded to merge on divergence instead of rebase (PR #229) +- OSS Health badge: 364 commits, 2.8h pace, 1 month old (PR #230) +- 13 stale plans closed (28→15 open) +- Old Dev-Pass trigger studied at /media/patrick/EXTERNAL/Dev-Pass/aipass_core/trigger/ +- Key learning: old system had no count threshold (noisy), new system's threshold was right but gate logic was wrong +- TODO: Watchdog needs error handling (log failures so trigger catches them) +- TODO: Add prax logger catch-all to all branch entry points (unhandled exceptions bypass logs) +- TODO: Properly develop watchdog v2 (leave duct tape running for a week first) +- Never reset HEAD — merge only. SATA=/mnt/sata (old OS), EXTERNAL=/media/patrick/EXTERNAL (Dev-Pass) ### S83 (2026-04-09 evening) - 22 Opus adversarial audit agents: 350+ findings across all 11 branches @@ -252,6 +359,12 @@ - README + Herald + global/local prompts all updated to "11 agents". - Patrick's direction: focus on core 11, use the system for real projects, Vera handles promotion. +## Notepad (User) +- Study Anthropic prompt layout. +- Review builder agent (~/.claude/agents/builder.md) — should it default to sonnet? Should seedgo checklist be the primary validator instead of pyright? Should it be available to external projects? +- Add /memo and /prep to `aipass init` so new projects get them in .claude/commands/ (DPLAN-0114 follow-up) +- Prax: fix AI_MAIL showing as MAIL (underscore branch names getting split) +
@drone — Operational (2026-04-07 (Session 38)) @@ -272,7 +385,7 @@ | `drone --help` | Operational | | | `drone --version` | Operational | v1.1.0 | | `drone` (no args) | Operational | Auto-discovers 9 modules | -| `drone systems` | Operational | Shows infrastructure, modules (3), branches (15) | +| `drone systems` | Operational | Shows infrastructure, modules (4), branches (11) | | `drone @target command` | Operational | Routes to any branch via subprocess | | `drone @target --help` | Operational | | | `drone @seedgo audit` | Operational | Interactive mode for Rich progress bars | @@ -456,6 +569,45 @@ Vector verification shows in console output: "Vectorized: N chunks in chroma" or
+
@polyglot — Unknown (n/a) + +# @POLYGLOT + +> AIPL compression engine developer + +State: Phase 2 complete + seedgo 99% + guardrails designed (DPLAN-0124) +Last update: 2026-04-12 + +## Milestones +- Phase 1 spec: COMPLETE (locked) +- Phase 2 engine: COMPLETE (441 tests, 10 handlers, 5 modules, 99% seedgo) +- Global prompt AIPL'd: DONE (913->843 tokens, 7.7% honest savings) +- ~/.aipl scaffold: DEPLOYED +- Phase 3 integration: In progress +- Phase 4 validation: Not started + +## Current Work +- Token scan: 220K tokens across 80 AIPass files, 81K saveable +- Stress tested 16 real files, 15.8% avg automated savings +- Decode tests: 93-95% info recovery on compressed files +- AIPL is convention not engine — agents write terse from global prompt +- Private repo: AIOSAI/AIPL + +## Known Issues +- Commands incompressible — only prose between commands can shrink +- .trinity/ must stay valid JSON — no headers, no unquoted keys +- Cross-project ai_mail outbound broken (feedback channel in progress) +- delta_extractor limited pattern detection +- Handlers standard 93% — inspect.stack() needed on 2 pipeline files + +## Next +- Build DPLAN-0124: anchor detection + integrity verification (guardrails) +- Roll AIPL global prompt to AIPass and Vera-Studio +- Test with fresh agents across projects +- Close 17% vs 62% gap via convention (not engine) + +
+
@prax — Operational (2026-04-07) # @prax @@ -503,14 +655,14 @@ init_prax, shutdown, discover, run, terminal — in modules/.archive/
-
@seedgo — Operational — 99% self-audit (32/33 standards at 100%, Architecture 99%) (2026-04-09 (session 43 — dispatch processing)) +
@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 > 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-09 (session 43 — dispatch processing) +**Last update:** 2026-04-11 (session 58 — pytest.ini investigation, no standard exists, no other branches affected) ## Session 43 — Dispatch Processing diff --git a/src/aipass/devpulse/.aipass/aipass_local_prompt.md b/src/aipass/devpulse/.aipass/aipass_local_prompt.md index 02dc2e21..277ea8a7 100644 --- a/src/aipass/devpulse/.aipass/aipass_local_prompt.md +++ b/src/aipass/devpulse/.aipass/aipass_local_prompt.md @@ -13,7 +13,7 @@ You are DEVPULSE — orchestration hub. Manager, not builder. Coordinate, plan, - Never block waiting on agents. Never burn context reading code across branches. - Use `drone @branch --help` for command syntax. Use `drone systems` for branch list. - **ALWAYS WAKE after sending dispatch emails.** Send email → wake. Every time. No asking. If the user wants something different, they will say so. -- **START WATCHDOG after any dispatch.** Use the watchdog one-liner (see Watchdog section below) with `run_in_background: true`. Don't wait for Patrick to ask. +- **START WATCHDOG after any dispatch.** Use the watchdog one-liner (see Watchdog section below) with `run_in_background: true`. Don't wait for the user to ask. ## Dispatch, Don't Do @@ -46,7 +46,7 @@ drone @git lock # Check PR lock status Read-only git commands are fine: `git status`, `git diff`, `git log`. -**NEVER cd to repo root.** `drone @git system-pr` requires `.trinity/passport.json` in the CWD hierarchy. If you cd to `/home/patrick/Projects/AIPass/`, it fails. Stage files with relative paths from devpulse: `git add ../../../HERALD.md`. Always run drone commands from this directory. +**NEVER cd to repo root.** `drone @git system-pr` requires `.trinity/passport.json` in the CWD hierarchy. If you cd to the repo root, it fails. Stage files with relative paths from devpulse: `git add ../../../HERALD.md`. Always run drone commands from this directory. ## Key Commands @@ -100,7 +100,7 @@ INBOX="path/to/.ai_mail.local/inbox.json"; INITIAL=$(python3 -c "import json; fr **Watchdog one-liner (copy-paste ready):** ``` -INBOX="/home/patrick/Projects/AIPass/src/aipass/devpulse/.ai_mail.local/inbox.json"; INITIAL=$(python3 -c "import json; from pathlib import Path; p=Path('$INBOX'); print(json.loads(p.read_text()).get('unread_count',0) if p.exists() else 0)" 2>/dev/null); C=0; while [ $C -lt 60 ]; do sleep 10; C=$((C+1)); CURRENT=$(python3 -c "import json; from pathlib import Path; p=Path('$INBOX'); print(json.loads(p.read_text()).get('unread_count',0) if p.exists() else 0)" 2>/dev/null); if [ "$CURRENT" -gt "$INITIAL" ]; then echo "WOKE: new mail ($INITIAL→$CURRENT)"; exit 0; fi; done; echo "TIMEOUT: 10min no new mail"; exit 0 +INBOX="$(pwd)/.ai_mail.local/inbox.json"; INITIAL=$(python3 -c "import json; from pathlib import Path; p=Path('$INBOX'); print(json.loads(p.read_text()).get('unread_count',0) if p.exists() else 0)" 2>/dev/null); C=0; while [ $C -lt 60 ]; do sleep 10; C=$((C+1)); CURRENT=$(python3 -c "import json; from pathlib import Path; p=Path('$INBOX'); print(json.loads(p.read_text()).get('unread_count',0) if p.exists() else 0)" 2>/dev/null); if [ "$CURRENT" -gt "$INITIAL" ]; then echo "WOKE: new mail ($INITIAL→$CURRENT)"; exit 0; fi; done; echo "TIMEOUT: 10min no new mail"; exit 0 ``` ## Memory & Tracking diff --git a/src/aipass/devpulse/SETUP.md b/src/aipass/devpulse/SETUP.md index ba71c4a7..37594576 100644 --- a/src/aipass/devpulse/SETUP.md +++ b/src/aipass/devpulse/SETUP.md @@ -184,7 +184,7 @@ python -m pytest src/aipass//tests/ If tests fail because `AIPASS_HOME` leaks the real registry into test results, that's a known pattern — the tests need `monkeypatch.delenv("AIPASS_HOME")`. See S90 notes for the fixture pattern. -### `.claude/settings.json` has `/home/patrick/` paths +### `.claude/settings.json` has hardcoded absolute paths You pulled an old clone. The hardcoded paths were removed in commit `867dad0` (April 5, 2026). Pull the latest main and re-run `setup.sh`, which generates the settings dynamically from your local repo root. diff --git a/src/aipass/prax/apps/handlers/config/load.py b/src/aipass/prax/apps/handlers/config/load.py index f43f26d1..9b04ef21 100755 --- a/src/aipass/prax/apps/handlers/config/load.py +++ b/src/aipass/prax/apps/handlers/config/load.py @@ -1,9 +1,9 @@ # =================== AIPass ==================== # Name: load.py # Description: Load Logging Configuration Handler -# Version: 1.0.1 +# Version: 1.0.2 # Created: 2025-11-07 -# Modified: 2026-03-09 +# Modified: 2026-04-14 # ============================================= """ @@ -27,12 +27,13 @@ Usage: max_lines = system_logs['max_lines'] """ +import inspect import json import logging import os logger = logging.getLogger(__name__) from pathlib import Path -from typing import Dict, Any +from typing import Dict, Any, Optional from aipass.prax.apps.handlers.json import json_handler @@ -78,26 +79,53 @@ def get_system_logs_dir() -> Path: return _system_logs_dir_cache -def get_module_logs_dir(module_name: str) -> Path: +def _warn_routing(module_name: str, destination: object) -> None: + """Log routing warning when a module's log path falls outside ECOSYSTEM_ROOT.""" + try: + from aipass.prax.apps.modules.logger import get_direct_logger + get_direct_logger().warning( + "[get_module_logs_dir] '%s' not in ECOSYSTEM_ROOT; routing to %s", + module_name, destination, + ) + except Exception as e: + logger.warning( + "[get_module_logs_dir] '%s' routing to %s (logger unavailable: %s)", + module_name, destination, e, + ) + + +def get_module_logs_dir(module_name: Optional[str] = None) -> Path: """Get the branch-root logs directory for a module. Checks ECOSYSTEM_ROOT (src/aipass/) first, then SRC_ROOT (src/) for - branches that live outside the aipass namespace (e.g., commons). + branches that live outside the aipass namespace (e.g., commons). For + cross-project dispatch, resolves paths relative to the caller's project + root via AIPASS_CALLER_CWD (set by drone, DPLAN-0121) instead of + ECOSYSTEM_ROOT. Falls back to system_logs/external/ for unknown modules — + never creates new directories inside the AIPass source tree. + This is the primary local log directory resolver for the two-tier model (system_logs/ for central aggregation + branch-root logs/ for local debugging). Args: - module_name: Module name (e.g., "flow", "prax", "commons") + module_name: Module name (e.g., "flow", "prax", "commons"). + Auto-detected from the calling module if not provided. Returns: - Path to the module's branch-root logs directory + Path to the module's logs directory """ + # Auto-detect caller module name when not provided + if module_name is None: + frame = inspect.stack()[1] + module_name = Path(frame.filename).stem + test_log_dir = os.environ.get("AIPASS_TEST_LOG_DIR") if test_log_dir: p = Path(test_log_dir) / module_name p.mkdir(parents=True, exist_ok=True) return p + # Standard: src/aipass/{module}/logs branch_dir = ECOSYSTEM_ROOT / module_name if branch_dir.exists(): @@ -113,9 +141,29 @@ def get_module_logs_dir(module_name: str) -> Path: logs_dir.mkdir(parents=True, exist_ok=True) return logs_dir - # Default: create under ECOSYSTEM_ROOT (original behavior for new branches) - logs_dir = branch_dir / "logs" + # Cross-project dispatch: AIPASS_CALLER_CWD is set by drone router_handler + # (DPLAN-0121). Walk up from the caller's CWD to find the project root + # (.git or pyproject.toml), then log there rather than polluting ECOSYSTEM_ROOT + # with directories for unknown/external modules (e.g. AIPL polyglot agents). + caller_cwd = os.environ.get("AIPASS_CALLER_CWD") + if caller_cwd: + caller_path = Path(caller_cwd) + project_root = next( + (c for c in [caller_path, *caller_path.parents] + if (c / ".git").exists() or (c / "pyproject.toml").exists()), + None, + ) + if project_root: + logs_dir = project_root / "logs" / module_name + logs_dir.mkdir(parents=True, exist_ok=True) + _warn_routing(module_name, logs_dir) + return logs_dir + + # Final safe fallback: system_logs/external/ — never create unknown directories + # inside the AIPass source tree. Fixes AIPL polyglot log leak (DPLAN-0125 Track G). + logs_dir = get_system_logs_dir() / "external" / module_name logs_dir.mkdir(parents=True, exist_ok=True) + _warn_routing(module_name, "system_logs/external/") return logs_dir # Config file diff --git a/src/aipass/seedgo/apps/handlers/aipass_standards/imports.md b/src/aipass/seedgo/apps/handlers/aipass_standards/imports.md index 7d5a8d33..7abfee4a 100644 --- a/src/aipass/seedgo/apps/handlers/aipass_standards/imports.md +++ b/src/aipass/seedgo/apps/handlers/aipass_standards/imports.md @@ -536,5 +536,5 @@ from aipass.seedgo.apps.handlers.json import json_handler #@comments:2025-11-29:claude: Added explicit "Drone: CLI Router Pattern" section with FORBIDDEN import examples #@comments:2025-11-29:claude: Clarified that branches should NEVER import from aipass.drone.apps.modules - Drone resolves @ before calling them #@comments:2026-03-07:claude: Cleaned old references - updated to AIPass namespace imports, removed sys.path/AIPASS_ROOT patterns, fixed hardcoded home paths, old->seedgo naming -#@comments:2026-03-08:claude: Resolved patrick's "whole file needs updating" flag - fixed old branch names (3 occurrences), removed stale AIPASS_ROOT reference, corrected handler independence summary to reflect that handlers CAN import cross-branch services, bumped to Draft v2 +#@comments:2026-03-08:claude: Resolved the user's "whole file needs updating" flag - fixed old branch names (3 occurrences), removed stale AIPASS_ROOT reference, corrected handler independence summary to reflect that handlers CAN import cross-branch services, bumped to Draft v2 #@comments:2026-03-31:claude: Cleaned stale references in comments and docs throughout seedgo standards diff --git a/src/aipass/seedgo/notepad.md b/src/aipass/seedgo/notepad.md index 8364785e..66ce2712 100644 --- a/src/aipass/seedgo/notepad.md +++ b/src/aipass/seedgo/notepad.md @@ -25,7 +25,7 @@ - FINAL: 176 tests, all passing. Test coverage 6%→93%. Overall audit 99%. - Ready to PR -## Questions for Patrick +## Questions for the AIPass Developer (none yet) ## Notes