feat(system): fix: gitignore STATUS.md + STATUS.local.md — interim fix for #291/#298. Auto-generated status files contain developer session data that shouldn't ship in the public repo. Will be un-gitignored when prax sync produces clean public output. (#299)
* feat(system): fix(windows): PYTHONUTF8=1 in drone cli.py for Rich Unicode on Windows (#296) + STATUS.md reset to stub (#291) + README.md platform honesty (Linux tested, macOS untested, Windows in progress)
Co-Authored-By: @devpulse <devpulse@aipass>
* feat(system): fix: gitignore STATUS.md + STATUS.local.md — interim fix for #291/#298. Auto-generated status files contain developer session data that shouldn't ship in the public repo. Will be un-gitignored when prax sync produces clean public output.
Co-Authored-By: @devpulse <devpulse@aipass>
---------
Co-authored-by: @devpulse <devpulse@aipass>
@@ -242,7 +242,7 @@ For detailed session history, see [HERALD.md](HERALD.md).
- At least one AI CLI: Claude Code (recommended), Codex, or Gemini CLI
- `sudo` access (for global CLI symlinks)
- API keys optional (OpenRouter/OpenAI — for optional add-on agents)
- **Platforms:** Linux (fully tested), macOS (untested, should work), Windows via WSL2
- **Platforms:** Linux (tested, primary dev environment), macOS (untested), Windows (native testing in progress — see [open issues](https://github.com/AIOSAI/AIPass/issues?q=is%3Aissue+is%3Aopen+Windows))
- 54/101 public functions tested (53% function coverage, 100% module coverage)
## Current Work
- DPLAN-0091 Phase 2 (JSONL pre-validation in wake.py) pending
- ping commands need Rich console output investigation (works in branch, silent via drone)
## Known Issues
- Registry shows 6 pytest test branches with /tmp paths (test pollution)
- ping commands produce no visible output via drone (Rich console likely suppressed in subprocess)
- dispatch combined command BRANCH DETECTION FAILED when AIPASS_CALLER_BRANCH not set (known identity tension, low severity, dispatch succeeds via wake step)
- dispatch_monitor.py has 5 silent catches flagged by seedgo (JSONL helper OSError catches)
## Architecture Notes
- trigger branch owns error_detected events; ai_mail provides delivery only
- S79: README overhaul with 4 Goldfish rounds. PyPI published. Security blocked across 3 CLIs.
## Known Issues
- **Watchdog module:** FPLAN-0186 shipped S92 (agent + timer + schedule + registry). Known issue: `drone @devpulse watchdog agent <branch>` clipped at 30s by drone CLI wrapper — workaround is direct `python3 apps/devpulse.py watchdog agent <branch>` call. Watchdog's own --timeout flag governs the real wait.
- **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.
- **Plans closed:** DPLAN-0119 (Phase 1), DPLAN-0106 superseded by DPLAN-0130, FPLAN-0186 closed via `drone @flow close`
- **Known issue:** drone CLI 30s wrapper timeout clips long agent watches. Workaround is direct python call. Not a watchdog bug. Worth lifting in a future drone fix.
### S92 (2026-04-14 ~14:08 PT) — DPLAN-0128 complete, working on private memory project
**DPLAN-0128 execution DONE — reformat is live.**
- T1 @cli: 27 PASS, 2 FAIL. Removed `drone @flow info <id>` and `drone @memory archive` from reformat.
- T2 @spawn: terminology PASS. Reformat's agent=citizen framing is more consistent with spawn code than the old live prompt was.
- T4 Anthropic source read: MISMATCH. AIPL format is ORIGINAL AIPass convention, NOT copied from Claude Code. Report: `.trinity/night_shift_reports/aipl_format_provenance.md`
- T5 @seedgo: recommended prompt note + reference doc, NOT a 34th standard. Unenforceable soft rules.
- T3 skill files split: PR #272 — /memo user-scope only (removed from repo), /prep shipped via `aipass init` template in bootstrap.py `_prep_md()`. Init test passed.
- T7: stale `agent-aa2b7d43` worktree removed.
- T8: reformat promoted to live `.aipass/aipass_global_prompt.md` + new `.aipass/PROMPT_STYLE.md` reference doc + one-line style comment. PR #273.
**PRs awaiting merge**: #272, #273 (both scoop the S91 night shift backlog of 6 commits — known drone @git system-pr behavior). Plus S91's #265-#271 still open.
### S92 (2026-04-14 ~14:08 PT) — Private memory project autonomous work while user AFK
**User said**: "lets park this off. work on your private memory project. no need to stop im outside working on my rv. ill be in and out all day"
- **Phase 5**`consult()` advisor entrypoint — single call handles both paths (cluster_aware + strategy), contract locked, placeholder `suggested_question_for_user` per rule table ("mixed signal" / "tight consensus" annotations), state echoed for Phase 7 to consume
- **Phase 6**`ProjectState` dataclass + `birth_watcher` scaffold (diff new/gone/resized clusters vs baseline, 20% threshold). SCAFFOLD ONLY — no auto-notification, no LLM, no background job
**Live end-to-end commands** when `ROOMS_ENABLED=True` in the project:
`status | discover | list | peek <id> | query "..." | strategies | strategy <name> "..." | consult "..." --strategy X --state-energy N --state-pressure N | births | births --save-baseline`
**Metrics**: 201 tests green (started Phase 1 at 122), ~5,300 LOC across handlers+modules+tests, 0 v1 file mutations, 0 Chroma collection mutations, 0 commits.
**DPLAN-0129** (architecture research) and **FPLAN-0185** (master plan, 6 phases) both live in the private project repo, uncommitted.
- Runtime unblocked: created dedicated `~/Projects/<private>/.venv` with chromadb 1.5.5 + sentence-transformers 5.3.0.
- First real query ran and surfaced decision_006 ("branches self-report optimistically") + obs_s60_verification_agents — the exact prior art DPLAN-0128 was defending against. **Rule #033 closed** — the project is being used, not just built. Next time: query first, plan second.
- S92 decisions #034-#036 ingested. Collection now 133 fragments.
- Invocation form: the private project invocation form. Bare script invocation fails with path issue — not urgent to fix.
- `navigator/__init__.py` (new — package marker)
- `navigator/.seedgo/bypass.json` (modified — 2 new bypass entries)
- **watchdog inotify limit (low priority)**: S93 afternoon, `python3 apps/devpulse.py watchdog agent @api` logged `inotify instance limit reached, continuing without file watcher: [Errno 24] inotify instance limit reached`. Watchdog gracefully fell back to PID polling (no functional impact), but the limit hit suggests the system has accumulated lots of file watchers (likely from Claude Code/other dev tools). Worth investigating if this starts blocking something — for now it's a noisy warning, not a failure. Check `cat /proc/sys/fs/inotify/max_user_instances` and `lsof | grep inotify | wc -l` when revisiting.
### 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
- `watchdog_design.md` — full design for future hooks session (Options A-D insufficient, Option E requires hooks)
**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/`
- **`.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)
- 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
- All 9 agents dispatched for split fallout testing — replies received, not fully reviewed.
- Flow/spawn/memory dispatched for .backup/ redirect — replies received.
- 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)
1. **Devpulse 4adc667b** — 5-branch split-out fallout test (backup, daemon, api, commons, skills removed from AIPass). Result: zero imports from split branches, no runtime deps, README clean, self-audit 99%. Reported all clear.
2. **Trigger af202e98** — Recurring JSON parse error (ERROR 3c63b0e0). Root cause: race condition in json_handler.py `load_json()` line 134 — no try-except around `json.load()`. Concurrent writes truncate file between validation and read. Low severity, fix recommended for next PR.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.