Commit Graph
468 Commits
Author SHA1 Message Date
AIPassand@devpulse e2c868084a feat(system): chore(lint): ruff auto-fix sweep — 303 errors across 178 files (F401 unused imports + F541 f-string placeholders + F811 redefined); restored report_error re-export + added logger call in errors.py (#333)
* feat(system): fix(windows-ci): combine pip bootstrap fix + venv activation in Verify step

Combines both fixes needed to get windows-test.yml actually passing:

1. setup.sh: stop swallowing ensurepip errors (quiet + 2>/dev/null + || true was
   hiding real failures — pip was silently not installed). Add get-pip.py fallback
   and hard pip verification.

2. windows-test.yml: add 'source .venv/Scripts/activate' to Verify step. Each CI
   step gets a fresh shell — setup.sh's venv activation doesn't carry over, so
   drone wasn't on PATH in the subsequent step.

Together, these should take Windows CI from the 'silent failure every run since
creation' state to actually green. Supersedes PRs #330 and #331 which had the
fixes on separate branches (neither green alone).

Co-Authored-By: @devpulse <devpulse@aipass>

* feat(system): chore(lint): ruff auto-fix sweep — 303 errors across 178 files (F401 unused imports + F541 f-string placeholders + F811 redefined); restored report_error re-export + added logger call in errors.py

Co-Authored-By: @devpulse <devpulse@aipass>

---------

Co-authored-by: @devpulse <devpulse@aipass>
2026-04-16 12:58:53 -07:00
AIPassand@devpulse bf1f37bf41 feat(system): feat(setup): auto-configure AIPASS_HOME + PATH for cross-project access — all AIPass services (seedgo, flow, ai_mail, etc.) now available from any project after setup. Linux: AIPASS_HOME added to .bashrc. Windows: AIPASS_HOME + PATH + PYTHONUTF8 added to .bash_profile. Claude Code settings.json gets AIPASS_HOME in env block so dispatched agents inherit it. (#314)
Co-authored-by: @devpulse <devpulse@aipass>
2026-04-16 01:07:37 -07:00
AIPass 8ffbb21cde Merge pull request #312 from AIOSAI/system/devpulse-fixwindows-hooks-use-venv-python-not-python3-307-i
feat(system): fix(windows): hooks use venv python not python3 (#307), identity_injector reads identity.name fallback (#309), Path.rename→os.replace for Windows (#310), RotatingFileHandler catches PermissionError on rotation (#311)
2026-04-16 01:01:06 -07:00
AIOSAIand@devpulse fb087b0e01 feat(system): fix(windows): hooks use venv python not python3 (#307), identity_injector reads identity.name fallback (#309), Path.rename→os.replace for Windows (#310), RotatingFileHandler catches PermissionError on rotation (#311)
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-16 00:53:18 -07:00
AIPassand@devpulse e1ec726da9 feat(system): feat: ship /memo and /prep slash commands in .claude/commands/ — available on every clone, no per-user setup needed. Previously only existed in developer's personal ~/.claude/commands/. (#308)
Co-authored-by: @devpulse <devpulse@aipass>
2026-04-16 00:38:37 -07:00
AIPass 28841b605d Merge pull request #303 from AIOSAI/system/devpulse-ci-add-windows-setup-test-workflow-runs-setupsh-dr
feat(system): ci: add Windows setup test workflow — runs setup.sh + drone CLI verification on windows-latest GitHub Actions runner. Triggers on changes to setup.sh, handler __init__.py files, cli.py, or pyproject.toml. Closes the 'we never tested on Windows' gap.
2026-04-16 00:28:06 -07:00
AIPassand@devpulse d8d5afdd9d feat(system): fix(windows): SIGPIPE guard in flow.py (#301) + fcntl platform guards in trigger/config.py and watchdog/registry.py (#302) — lazy import fcntl on Unix only, no-op on Windows. inbox_lock.py already cross-platform (msvcrt). ai_mail.py already guarded (hasattr check). (#305)
* feat(system): ci: add Windows setup test workflow — runs setup.sh + drone CLI verification on windows-latest GitHub Actions runner. Triggers on changes to setup.sh, handler __init__.py files, cli.py, or pyproject.toml. Closes the 'we never tested on Windows' gap.

Co-Authored-By: @devpulse <devpulse@aipass>

* feat(system): fix(windows): SIGPIPE guard in flow.py (#301) + fcntl platform guards in trigger/config.py and watchdog/registry.py (#302) — lazy import fcntl on Unix only, no-op on Windows. inbox_lock.py already cross-platform (msvcrt). ai_mail.py already guarded (hasattr check).

Co-Authored-By: @devpulse <devpulse@aipass>

---------

Co-authored-by: @devpulse <devpulse@aipass>
2026-04-16 00:06:14 -07:00
AIPassand@devpulse 504df48e82 feat(system): fix(windows): handler guard backslash path fix — all 11 __init__.py files (#304). caller_file.replace('\\', '/') normalizes Windows paths before the same-branch check. This is the actual fix for #293 which was incorrectly closed. drone is completely broken on Windows without this. (#306)
* feat(system): ci: add Windows setup test workflow — runs setup.sh + drone CLI verification on windows-latest GitHub Actions runner. Triggers on changes to setup.sh, handler __init__.py files, cli.py, or pyproject.toml. Closes the 'we never tested on Windows' gap.

Co-Authored-By: @devpulse <devpulse@aipass>

* feat(system): fix(windows): SIGPIPE guard in flow.py (#301) + fcntl platform guards in trigger/config.py and watchdog/registry.py (#302) — lazy import fcntl on Unix only, no-op on Windows. inbox_lock.py already cross-platform (msvcrt). ai_mail.py already guarded (hasattr check).

Co-Authored-By: @devpulse <devpulse@aipass>

* feat(system): fix(windows): handler guard backslash path fix — all 11 __init__.py files (#304). caller_file.replace('\\', '/') normalizes Windows paths before the same-branch check. This is the actual fix for #293 which was incorrectly closed. drone is completely broken on Windows without this.

Co-Authored-By: @devpulse <devpulse@aipass>

---------

Co-authored-by: @devpulse <devpulse@aipass>
2026-04-16 00:06:02 -07:00
AIOSAIand@devpulse 458951c61f feat(system): ci: add Windows setup test workflow — runs setup.sh + drone CLI verification on windows-latest GitHub Actions runner. Triggers on changes to setup.sh, handler __init__.py files, cli.py, or pyproject.toml. Closes the 'we never tested on Windows' gap.
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-15 23:57:40 -07:00
AIPass d0391f01d6 Merge pull request #297 from AIOSAI/system/devpulse-fixwindows-pythonutf81-in-drone-clipy-for-rich-uni
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)
2026-04-15 23:50:48 -07:00
AIPass 5a417e9a21 Merge pull request #300 from AIOSAI/system/devpulse-fixsetup-windows-10-hardening-python3-ms-store-ali
feat(system): fix(setup): Windows 10 hardening — python3 MS Store alias fallback (#292), venv file-locking workaround (#294-C), pip bootstrap via explicit venv python (#294-B/E), strip stale .venv from PATH (#294-D), PYTHONUTF8 for Rich Unicode (#296). All fixes from Input-X's Windows 10 test session. Linux path unchanged — same python3 detection, same venv flow.
2026-04-15 23:50:22 -07:00
AIOSAIand@devpulse 946a0f46f9 feat(system): fix(setup): Windows 10 hardening — python3 MS Store alias fallback (#292), venv file-locking workaround (#294-C), pip bootstrap via explicit venv python (#294-B/E), strip stale .venv from PATH (#294-D), PYTHONUTF8 for Rich Unicode (#296). All fixes from Input-X's Windows 10 test session. Linux path unchanged — same python3 detection, same venv flow.
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-15 23:44:49 -07:00
AIPassand@devpulse e1be1f685b 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>
2026-04-15 23:38:09 -07:00
AIOSAIand@devpulse b68ed7a660 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>
2026-04-15 23:33:01 -07:00
AIPass 5ebb8b274e Merge pull request #295 from AIOSAI/system/devpulse-fixsetup-remove-stale-bootstrapbranch-calls-for-ba
feat(system): fix(setup): remove stale bootstrap_branch calls for backup, daemon, commons, skills — these branches were removed in S82/S87 and moved to external repos. setup.sh was creating ghost directories with .trinity/ scaffolding that confused new users and made drone route to non-existent agents. Also removed commons/skills from registry generator. Fixes #294 Part 2, relates to #291.
2026-04-15 23:25:49 -07:00
AIOSAIand@devpulse 91fb49db84 feat(system): fix(setup): remove stale bootstrap_branch calls for backup, daemon, commons, skills — these branches were removed in S82/S87 and moved to external repos. setup.sh was creating ghost directories with .trinity/ scaffolding that confused new users and made drone route to non-existent agents. Also removed commons/skills from registry generator. Fixes #294 Part 2, relates to #291.
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-15 23:23:16 -07:00
AIOSAIand@devpulse b29dc08537 feat(system): DPLAN-0133 Phase 1 (part 1/2): add gitignore rule for apps/integrations/** with README negation, plus scaffold README.md in all 10 core branches' apps/integrations/ — private integration space is now leak-proof by construction. Drivers and wrappers dropped here stay local; only README.md is tracked. See DPLAN-0133 for architecture rationale (three-layer design: @api drivers, per-branch wrappers, public generic contracts).
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-15 15:28:16 -07:00
AIOSAIand@drone e6d4998c8d feat(drone): fix merge_plugin: stash unstaged changes before git pull --rebase to prevent dirty-tree abort
Co-Authored-By: @drone <drone@aipass>
2026-04-15 15:19:32 -07:00
AIOSAI adfae9c701 Merge remote-tracking branch 'origin/main' 2026-04-15 15:18:26 -07:00
AIPassand@drone 752263bac7 feat(drone): add watchdog to INTERACTIVE_COMMANDS — bypass 30s capture timeout for long-running poller (#287)
Co-authored-by: @drone <drone@aipass>
2026-04-15 15:18:08 -07:00
AIOSAIand@drone 61a8166254 feat(drone): add watchdog to INTERACTIVE_COMMANDS — bypass 30s capture timeout for long-running poller
Co-Authored-By: @drone <drone@aipass>
2026-04-15 15:16:49 -07:00
AIPass 1d0f88d707 Merge pull request #286 from AIOSAI/citizen/drone
feat(drone): fix merge_plugin: worktree branch-cleanup failure treated as non-fatal warning
2026-04-15 11:35:45 -07:00
AIOSAIand@drone 6bbf53078f feat(drone): fix merge_plugin: worktree branch-cleanup failure treated as non-fatal warning
Co-Authored-By: @drone <drone@aipass>
2026-04-15 10:43:50 -07:00
AIPassandClaude Sonnet 4.6 b5b03433a6 fix(wake): resolve_branch falls back to caller project registry for cross-project dispatch (#285)
Email delivery to external branches (e.g. @strategy in Vera-Studio) worked
because delivery.py already had a caller-registry fallback, but wake failed
with "Branch not found" because resolve_branch() only checked AIPASS_REGISTRY.

Extracted the shared registry-walking logic into
registry/read.py::get_caller_project_branches(), then:
- wake.py resolve_branch() now checks AIPASS_REGISTRY first, then falls back
  to the caller's project registry via AIPASS_CALLER_CWD (cross-project wake)
- delivery.py _load_caller_project_branches() delegates to the shared function
  (eliminates duplicate implementation)

Fixes #283.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 10:41:58 -07:00
AIPassand@devpulse e86269b398 feat(system): fix(feedback-template): remove email field from feedback.yml — GitHub issue forms have no private-field support, the field promised 'Never shared' but wrote the email into the public issue body (#282). Replaced with a Discussions link for private follow-up. (#284)
Co-authored-by: @devpulse <devpulse@aipass>
2026-04-15 10:05:41 -07:00
AIPass faf2d780c4 Merge pull request #280 from AIOSAI/seedgo/strip-aipl-from-public
Docs Maintenence
2026-04-15 00:55:21 -07:00
AIOSAI c4ac4343cb chore(seedgo): refresh branch prompt — missing commands + hook ownership
- Add checklist, proof, proof_query, test_map to the Commands list (were
  missing from the branch prompt even though the commands work)
- Note that proof/proof_query/test_map are not in --help output yet (TODO)
- Add Hook Ownership section: full inventory of the 8 hooks seedgo owns,
  their wiring state (including the unwired subagent_stop_gate), and the
  three-location drift. Points at DPLAN-0131 for the consolidation plan.
- Update audit line count from "all branches" to "all 11 agents (33 audit
  lines)" to match current reality
2026-04-15 00:51:15 -07:00
AIOSAI c0121665d1 chore(public): clean up out-of-scope content in public repo
- Remove a 38-line branch section from STATUS.md that belongs to an
  external private project
- Strip scattered external-project mentions from devpulse session logs in
  STATUS.md (S87/S88 entries, DPLAN-0128 T4 line, S90 prax delivery notes,
  Track G log leak references)
- Remove an injected reference from .aipass/aipass_global_prompt.md that
  pointed at an out-of-scope style guide
- Remove unverified "original convention" literature from
  .aipass/PROMPT_STYLE.md
- Remove matching external-project reference from README.md project status
- Remove matching reference from HERALD.md S74 session line
- Add policy note to .aipass/.gitignore: do not add other exceptions here
2026-04-15 00:51:01 -07:00
AIPass 19c2e65c6e Merge pull request #279 from AIOSAI/seedgo/fix-init-py-false-positives
fix(seedgo): __init__.py false positives in imports + naming
2026-04-14 22:00:04 -07:00
AIOSAIandClaude Opus 4.6 cf0bf34276 fix(seedgo): short-circuit __init__.py in imports + naming checkers
Empty __init__.py files were failing both checkers as false positives:
- imports: zero-check result scored 0% and reported "Failed (no details)"
- naming: __init__ fails snake_case regex ^[a-z][a-z0-9_]*$

Python package markers don't require imports by convention and cannot
be renamed (Python-reserved). Short-circuit both checkers to return
PASS for any file named __init__.py.

Reported by @devpulse while adding navigator/__init__.py to compass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 21:58:16 -07:00
AIPassand@devpulse 5d3935a720 feat(system): prax status sync: drop minute precision from STATUS.md timestamp — date-only (agents already get current time injected every turn, minute precision was causing phantom diffs on every sync within a new minute) (#278)
Co-authored-by: @devpulse <devpulse@aipass>
2026-04-14 21:53:08 -07:00
AIPass ad0e266026 Merge pull request #277 from AIOSAI/system/devpulse-test-s92-lock-unstage-fix-remove-gitprlock-from-gi
feat(system): test S92 lock-unstage fix: remove .git_pr.lock from gitignore and verify drone's reset HEAD keeps lock out of commit
2026-04-14 21:24:26 -07:00
AIPass cb282450b8 Merge pull request #276 from AIOSAI/citizen/drone
feat(drone): S92 regression: unstage .git_pr.lock after git add -A in system-pr
2026-04-14 21:23:29 -07:00
AIOSAIand@devpulse 6659c119bb feat(system): test S92 lock-unstage fix: remove .git_pr.lock from gitignore and verify drone's reset HEAD keeps lock out of commit
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-14 21:22:16 -07:00
AIOSAIand@drone caf2bf59a0 feat(drone): S92 regression: unstage .git_pr.lock after git add -A in system-pr
Co-Authored-By: @drone <drone@aipass>
2026-04-14 21:11:26 -07:00
AIPass 2bc484d7c3 Merge pull request #275 from AIOSAI/system/devpulse-chore-untrack-gitprlock-add-to-gitignore-drone-sys
feat(system): chore: untrack .git_pr.lock + add to gitignore (drone system-pr lock file was leaking into commits as of S92 morning)
2026-04-14 21:00:13 -07:00
AIOSAIand@devpulse 1fe50e445d feat(system): chore: untrack .git_pr.lock + add to gitignore (drone system-pr lock file was leaking into commits as of S92 morning)
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-14 20:58:39 -07:00
AIPass 59035684ef Merge pull request #274 from AIOSAI/system/devpulse-watchdog-module-identity-framing-revision-private-
feat(system): watchdog module + identity framing revision + private project scrub — FPLAN-0186 shipped (130 tests, 5 handlers, agent/timer/schedule/registry + multi-watch mgmt), devpulse identity updated (designer + light builder + primary collaborator, CWD-is-identity principle), full scrub of private personal memory project from public repo
2026-04-14 20:39:17 -07:00
AIOSAIand@devpulse 01162bb2d5 feat(system): watchdog module + identity framing revision + private project scrub — FPLAN-0186 shipped (130 tests, 5 handlers, agent/timer/schedule/registry + multi-watch mgmt), devpulse identity updated (designer + light builder + primary collaborator, CWD-is-identity principle), full scrub of private personal memory project from public repo
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-14 20:38:20 -07:00
AIOSAI 22d6d98707 Merge remote-tracking branch 'origin/main' 2026-04-14 20:37:53 -07:00
AIPass 487c58e452 Merge pull request #268 from AIOSAI/fix/wake-claude-path-resolution
fix(wake): resolve claude binary by absolute path for restricted-PATH environments
2026-04-14 20:14:12 -07:00
AIPass 9d80a5e121 Merge pull request #267 from AIOSAI/fix/issue-261-windows-compat
fix(init,setup): Windows compatibility — issue #261 (three blockers)
2026-04-14 20:13:40 -07:00
AIPass 8aff1567dd Merge pull request #271 from AIOSAI/fix/prax-aipl-log-leak-dplan-0125-track-g
fix(prax): AIPL polyglot log leak into unknown_branch — path resolver fix (DPLAN-0125 Track G)
2026-04-14 19:59:59 -07:00
AIOSAIand@devpulse 3f378208d7 feat(system): feat(prompt): promote AIPass global system prompt reformat to live + add PROMPT_STYLE.md reference doc (DPLAN-0128 T8)
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-14 13:53:57 -07:00
AIOSAIand@devpulse e263d56178 feat(system): feat(skills): split /memo and /prep handling — memo user-scope only, prep ships via aipass init template with STATUS.local.md promotion
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-14 13:51:09 -07:00
AIOSAIandClaude Sonnet 4.6 6c025a042b fix(prax): AIPL polyglot log leak — path resolver + regression tests (DPLAN-0125 Track G)
Root cause: get_module_logs_dir() last fallback unconditionally created
src/aipass/{name}/logs/ for any unknown module name, causing AIPL polyglot
agents (running with AIPASS_HOME set for cross-project access) to dump logs
into src/aipass/unknown_branch/logs/ inside the AIPass source tree.

Fix in apps/handlers/config/load.py:
- Check AIPASS_CALLER_CWD env var (set by drone during cross-project dispatch,
  DPLAN-0121) and walk up to caller project root (.git or pyproject.toml)
- Final fallback: system_logs/external/{module_name} — never creates unknown
  directories in ECOSYSTEM_ROOT
- Added inspect.stack() auto-detection when module_name is not provided
- Added _warn_routing() helper for lazy prax logger access (avoids circular
  import: logger.py imports load.py at module level)

Also in this PR:
- Regression tests: test_unknown_module_routes_to_system_logs_external and
  test_aipass_caller_cwd_routes_to_caller_project (38 tests, all green)
- bypass.json: architecture + documentation exemptions for tests/test_config.py

Cleanup (done separately on main): 27 leaked AIPL polyglot logs moved from
src/aipass/unknown_branch/ to /tmp/aipl_leaked_logs/; directory removed.

CC @polyglot: if AIPL sets AIPASS_CALLER_CWD during drone dispatch, logs will
route to ~/Projects/AIPL/ automatically. No AIPL changes required for the base
fix — the system_logs/external/ fallback already prevents pollution.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 13:29:57 -07:00
AIOSAIandClaude Sonnet 4.6 efc0056be8 fix(prax): AIPL polyglot log leak — path resolver fix + regression tests (DPLAN-0125 Track G)
Root cause: get_module_logs_dir() last fallback unconditionally created
src/aipass/{name}/logs/ for any unknown module, causing external projects
(AIPL polyglot) running with AIPASS_HOME set to pollute the AIPass src tree
with src/aipass/unknown_branch/logs/*.

Fix (already committed in 3c5ac29):
- Check AIPASS_CALLER_CWD env var (set by drone during cross-project dispatch,
  DPLAN-0121) and walk up to the caller's project root (.git/pyproject.toml)
- Final fallback: system_logs/external/{module_name} — never create unknown
  dirs in the AIPass source tree
- Added inspect.stack() auto-detection when module_name is not provided
- Added _warn_routing() helper for lazy prax logger access (avoids circular
  imports — logger.py imports load.py at module level)

This PR:
- Regression tests: test_unknown_module_routes_to_system_logs_external and
  test_aipass_caller_cwd_routes_to_caller_project (both green)
- Cleanup: moved 27 leaked AIPL polyglot logs from src/aipass/unknown_branch/
  to /tmp/aipl_leaked_logs/ for AIPass Developer review; removed directory
- bypass.json: architecture + documentation exemptions for tests/test_config.py

CC @polyglot: AIPL-side logger config may need AIPASS_CALLER_CWD set during
cross-project dispatch so logs route to ~/Projects/AIPL/ correctly. The fix
is transparent if drone sets AIPASS_CALLER_CWD; no AIPL changes required for
the basic fix, but explicit env var support improves log placement accuracy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 13:28:06 -07:00
AIOSAIand@devpulse 2e41b75fe9 feat(system): Compass devpulse personal layer scaffold (DPLAN-0125 Track I): triple-layer gitignore protection, compass_wrapper.py stub (query_top/ingest_learning/stats signatures), seedgo bypass entries. Design doc at devpulse/.trinity/night_shift_reports/compass_layer_design.md. Scaffold ready for future implementation session.
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-14 06:33:50 -07:00
AIOSAIand@devpulse 3c5ac29fba feat(system): Personal-name scrub: Patrick -> user / AIPass Developer across public repo
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-14 06:14:03 -07:00
AIOSAI efc5eefabd Merge remote-tracking branch 'origin/main' 2026-04-14 06:13:30 -07:00