feat(system): Personal-name scrub: Patrick -> user / AIPass Developer across public repo

Co-Authored-By: @devpulse <devpulse@aipass>
This commit is contained in:
AIOSAI
2026-04-14 06:14:03 -07:00
co-authored by @devpulse
parent efc5eefabd
commit 3c5ac29fba
14 changed files with 264 additions and 57 deletions
+2 -2
View File
@@ -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 cross-branch file edits.** If you find an issue in another branch → email them.
- **No bare imports.** Always `from aipass.{module}.apps.modules...` - **No bare imports.** Always `from aipass.{module}.apps.modules...`
- **No hardcoded paths.** Use `Path(__file__).parents[N]` or drone for resolution. - **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/`: - **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. - 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/`. - 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) - `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. - `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 ## Breadcrumbs
+1 -1
View File
@@ -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. **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). **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).
Submodule .claude/worktrees/agent-aa2b7d43 added at 98191fa97e
+6
View File
@@ -0,0 +1,6 @@
{
"branch": "devpulse",
"feature_branch": "",
"started": "2026-04-14T13:14:01.042006+00:00",
"pid": 219648
}
+1 -1
View File
@@ -44,7 +44,7 @@ You are a citizen of AIPass. Your `.trinity/passport.json` defines who you are.
## Security ## 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. - NEVER output credentials, tokens, or API keys in responses.
## Key Principles ## Key Principles
+1 -1
View File
@@ -15,7 +15,7 @@ On any greeting, silently read these files from CWD and run the commands — no
## Security ## 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. - NEVER output credentials, tokens, or API keys in responses.
## Memories ## Memories
+1 -1
View File
@@ -44,7 +44,7 @@ You are a citizen of AIPass. Your `.trinity/passport.json` defines who you are.
## Security ## 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. - NEVER output credentials, tokens, or API keys in responses.
## Key Principles ## Key Principles
+1 -1
View File
@@ -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. 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) ### 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) ### 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. 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.
+187 -35
View File
@@ -2,7 +2,7 @@
> Auto-generated by `drone @prax status sync`. Do not edit manually. > 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 **Summary:** 8 operational | 0 in-progress | 0 not started
--- ---
@@ -73,14 +73,14 @@
</details> </details>
<details><summary><strong>@api</strong> — Operational | **Seedgo:** 100% (33/33) | **Tests:** 290 pass, 64/64 functions (2026-04-07)</summary> <details><summary><strong>@api</strong> — Operational | **Seedgo:** 99% (32/33 at 100%) | **Tests:** 290 pass, 65/65 functions (2026-04-10)</summary>
# @api # @api
> Centralized external API gateway — authenticated service clients for all external APIs > Centralized external API gateway — authenticated service clients for all external APIs
**State:** Operational | **Seedgo:** 100% (33/33) | **Tests:** 290 pass, 64/64 functions **State:** Operational | **Seedgo:** 99% (32/33 at 100%) | **Tests:** 290 pass, 65/65 functions
**Last update:** 2026-04-07 **Last update:** 2026-04-10
## Milestones ## Milestones
- OpenRouter client (get_response, models, test) - OpenRouter client (get_response, models, test)
@@ -93,7 +93,7 @@
- Backup migration to use our Google module (pending backup) - Backup migration to use our Google module (pending backup)
## Known Issues ## 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) - Seedgo introspection standard doesn't account for standalone commands (workaround in place)
## Command Audit (2026-04-07) ## Command Audit (2026-04-07)
@@ -117,26 +117,26 @@
| `stats` | OK | No data (expected) | | `stats` | OK | No data (expected) |
| `session` | OK | No data (expected) | | `session` | OK | No data (expected) |
| `caller-usage` (no args) | OK | Proper error message | | `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) ## Recent (Session 20, 2026-04-10)
- Branch state audit (discovery only) — dispatch from @devpulse - S84 dispatch from @devpulse — 3 CRITICAL security fixes + 3 BUG fixes
- 14/15 commands operational, 1 failure (cleanup) - CRITICAL: get_cache_stats() no longer exposes raw API keys
- Seedgo 100%, 290 tests, no type errors - CRITICAL: .env and google_creds.json now created with 0o600 permissions
- README updated with full command list, cleanup tagged as not operational - BUG: Validation rules aligned, cleanup return type fixed, stats/session differentiated
- No APLAN exists for this branch - 290/290 tests, seedgo 99%, no type errors
</details> </details>
<details><summary><strong>@cli</strong> — Operational (2026-04-07)</summary> <details><summary><strong>@cli</strong> — Operational (2026-04-11)</summary>
# @cli # @cli
> Display service, Rich formatting for all branches > Display service, Rich formatting for all branches
**State:** Operational **State:** Operational
**Last update:** 2026-04-07 **Last update:** 2026-04-11
**Seedgo:** 100% (all standards green, 33+ bootstrap tests) **Seedgo:** 100% (all standards green, 161 tests)
## Branch State Audit (2026-04-07) ## Branch State Audit (2026-04-07)
@@ -147,7 +147,7 @@
| `drone @cli` (introspection) | Works — shows 1 command module + 2 services | | `drone @cli` (introspection) | Works — shows 1 command module + 2 services |
| `drone @cli --version` | Works — v2.0.0 | | `drone @cli --version` | Works — v2.0.0 |
| `drone @cli aipass` | Works — shows subcommand table | | `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 <name>` | Works — routes to spawn | | `drone @cli aipass init agent <name>` | Works — routes to spawn |
| `drone @cli aipass init --help` | Works — Rich-formatted help | | `drone @cli aipass init --help` | Works — Rich-formatted help |
| `drone @cli display` | Works — shows function list | | `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 - **Extra dirs:** artifacts/, docs/, docs.local/, templates/, tools/ — exist but not in architecture tree
### Tests ### 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% - Seedgo Test_Quality: 100%
### No APLAN ### No APLAN
@@ -179,35 +179,42 @@
- 138 unit tests (100% module coverage) - 138 unit tests (100% module coverage)
## Current Work ## 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 ## Known Issues
- None. All commands operational, all tests passing, seedgo 100%. - None. All commands operational, all tests passing, seedgo 100%.
</details> </details>
<details><summary><strong>@devpulse</strong> — Operational (2026-04-09 (S83 23:52))</summary> <details><summary><strong>@devpulse</strong> — Operational (2026-04-11 (S90 17:59))</summary>
# @devpulse # @devpulse
> Orchestration hub — coordinates via dispatch + agents (no apps/) > Orchestration hub — coordinates via dispatch + agents. Feedback channel live.
**State:** Operational **State:** Operational
**Last update:** 2026-04-09 (S83 23:52) **Last update:** 2026-04-11 (S90 17:59)
## Current State ## Current State
- **11 core agents** (split from 15 — backup, daemon, commons, skills moved to standalone projects; api reinstated as infrastructure) - **11 core agents** (split from 15 — backup, daemon, commons, skills moved to standalone projects; api reinstated as infrastructure)
- **82 sessions** of development - **90 sessions** of development
- **207+ PRs** merged - **230+ PRs** merged (PR #254 created S90)
- **4,900+ tests** across core agents - **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) - **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) - **Goldfish panel:** 7-round multi-model README review (Claude + Codex + Gemini)
## Active Work ## 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`. - **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-0106:** Watchdog v2 — Phase 2 depends on daemon (removed). Needs replanning.
- **DPLAN-0105:** Promotion prep — Vera owns execution. - **DPLAN-0105:** Promotion prep — Vera owns execution.
@@ -222,14 +229,114 @@
## Known Issues ## Known Issues
- **Watchdog:** Doesn't survive Claude Code background tasks. DPLAN-0106 addresses this (tmux/daemon approach). - **Watchdog:** v1.1 (snapshot pattern) working since S85. Orphaned processes cleaned up S87.
- **Hooks:** Don't work from external projects. aipass init generates .claude/settings.json but hooks reference AIPass-specific scripts. Logged in seedgo branch audit. - **Wake protection:** Any branch can manually wake devpulse. Medic only blocks auto-dispatch. Needs blocklist in wake.py.
- **backup:** Still in src/aipass/ — needs to be moved to standalone project. - **Hook inbox notification:** Cosmetic only — watchdog handles real waking.
- **drone.py:** `interactive_branches = ("cli", "backup")` — backup reference needs removing after move. - **Hooks:** Don't work from external projects. Hooks reference AIPass-specific scripts.
- **Memory rollover:** devpulse at 22/20 sessions, 26/25 learnings (trimmed in S81, but keeps growing). - **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. - **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) ### S83 (2026-04-09 evening)
- 22 Opus adversarial audit agents: 350+ findings across all 11 branches - 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". - 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. - 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)
</details> </details>
<details><summary><strong>@drone</strong> — Operational (2026-04-07 (Session 38))</summary> <details><summary><strong>@drone</strong> — Operational (2026-04-07 (Session 38))</summary>
@@ -272,7 +385,7 @@
| `drone --help` | Operational | | | `drone --help` | Operational | |
| `drone --version` | Operational | v1.1.0 | | `drone --version` | Operational | v1.1.0 |
| `drone` (no args) | Operational | Auto-discovers 9 modules | | `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 command` | Operational | Routes to any branch via subprocess |
| `drone @target --help` | Operational | | | `drone @target --help` | Operational | |
| `drone @seedgo audit` | Operational | Interactive mode for Rich progress bars | | `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
</details> </details>
<details><summary><strong>@polyglot</strong> — Unknown (n/a)</summary>
# @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)
</details>
<details><summary><strong>@prax</strong> — Operational (2026-04-07)</summary> <details><summary><strong>@prax</strong> — Operational (2026-04-07)</summary>
# @prax # @prax
@@ -503,14 +655,14 @@ init_prax, shutdown, discover, run, terminal — in modules/.archive/
</details> </details>
<details><summary><strong>@seedgo</strong> — Operational — 99% self-audit (32/33 standards at 100%, Architecture 99%) (2026-04-09 (session 43 — dispatch processing))</summary> <details><summary><strong>@seedgo</strong> — 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))</summary>
# @seedgo # @seedgo
> Standards enforcement, 32-standard audit pack + seedgo proof system (CERTIFIED) + hook ownership > Standards enforcement, 32-standard audit pack + seedgo proof system (CERTIFIED) + hook ownership
**State:** Operational — 99% self-audit (32/33 standards at 100%, Architecture 99%) **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 ## Session 43 — Dispatch Processing
@@ -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. - 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. - 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. - **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 ## 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`. 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 ## 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):** **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 ## Memory & Tracking
+1 -1
View File
@@ -184,7 +184,7 @@ python -m pytest src/aipass/<branch>/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. 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. 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.
+57 -9
View File
@@ -1,9 +1,9 @@
# =================== AIPass ==================== # =================== AIPass ====================
# Name: load.py # Name: load.py
# Description: Load Logging Configuration Handler # Description: Load Logging Configuration Handler
# Version: 1.0.1 # Version: 1.0.2
# Created: 2025-11-07 # Created: 2025-11-07
# Modified: 2026-03-09 # Modified: 2026-04-14
# ============================================= # =============================================
""" """
@@ -27,12 +27,13 @@ Usage:
max_lines = system_logs['max_lines'] max_lines = system_logs['max_lines']
""" """
import inspect
import json import json
import logging import logging
import os import os
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
from pathlib import Path from pathlib import Path
from typing import Dict, Any from typing import Dict, Any, Optional
from aipass.prax.apps.handlers.json import json_handler from aipass.prax.apps.handlers.json import json_handler
@@ -78,26 +79,53 @@ def get_system_logs_dir() -> Path:
return _system_logs_dir_cache 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. """Get the branch-root logs directory for a module.
Checks ECOSYSTEM_ROOT (src/aipass/) first, then SRC_ROOT (src/) for 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 This is the primary local log directory resolver for the two-tier
model (system_logs/ for central aggregation + branch-root logs/ model (system_logs/ for central aggregation + branch-root logs/
for local debugging). for local debugging).
Args: 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: 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") test_log_dir = os.environ.get("AIPASS_TEST_LOG_DIR")
if test_log_dir: if test_log_dir:
p = Path(test_log_dir) / module_name p = Path(test_log_dir) / module_name
p.mkdir(parents=True, exist_ok=True) p.mkdir(parents=True, exist_ok=True)
return p return p
# Standard: src/aipass/{module}/logs # Standard: src/aipass/{module}/logs
branch_dir = ECOSYSTEM_ROOT / module_name branch_dir = ECOSYSTEM_ROOT / module_name
if branch_dir.exists(): 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) logs_dir.mkdir(parents=True, exist_ok=True)
return logs_dir return logs_dir
# Default: create under ECOSYSTEM_ROOT (original behavior for new branches) # Cross-project dispatch: AIPASS_CALLER_CWD is set by drone router_handler
logs_dir = branch_dir / "logs" # (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) logs_dir.mkdir(parents=True, exist_ok=True)
_warn_routing(module_name, "system_logs/external/")
return logs_dir return logs_dir
# Config file # Config file
@@ -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: 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: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-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 #@comments:2026-03-31:claude: Cleaned stale references in comments and docs throughout seedgo standards
+1 -1
View File
@@ -25,7 +25,7 @@
- FINAL: 176 tests, all passing. Test coverage 6%→93%. Overall audit 99%. - FINAL: 176 tests, all passing. Test coverage 6%→93%. Overall audit 99%.
- Ready to PR - Ready to PR
## Questions for Patrick ## Questions for the AIPass Developer
(none yet) (none yet)
## Notes ## Notes