Commit Graph
466 Commits
Author SHA1 Message Date
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
AIOSAIandClaude Sonnet 4.6 98191fa97e fix(wake): resolve claude binary by absolute path for restricted-PATH environments
Background processes (trigger Medic, prax watchdog) inherit a restricted PATH
that omits ~/.local/bin, causing FileNotFoundError when wake_branch() tries to
spawn claude (pip-installed at ~/.local/bin/claude).

Fix: add _find_claude_bin() to locate claude via shutil.which() with fallback
to known install paths; use _CLAUDE_BIN constant in both fresh/resume commands;
explicitly prepend ~/.local/bin to spawn_env PATH in both wake.py and
dispatch_monitor.py. Confirmed by logs: 'Failed to spawn @trigger/@flow:
[Errno 2] No such file or directory: claude'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 02:56:12 -07:00
AIOSAIandClaude Sonnet 4.6 2ec5ec1a86 fix(init,setup): Windows compatibility — issue #261 (three blockers)
BLOCKER 1 (bootstrap.py): Replace bash dirname/while loop in _claude_settings()
with a cross-platform python3 -c one-liner using pathlib.Path.parents. The bash
loop broke on Windows because root is 'C:\' not '/'. Python pathlib handles all
OS path separators correctly.

BLOCKER 2 (setup.sh): Add OS detection (IS_WINDOWS via OSTYPE/uname). On Windows
(Git Bash/MSYS2/Cygwin), skip the sudo ln -sf symlink step and print manual
PATH-extension instructions for PowerShell, CMD, and Git Bash. Also make venv
activation OS-aware (Scripts/activate on Windows, bin/activate elsewhere).

BLOCKER 3 (setup.py): New cross-platform Python installer at repo root. Does
everything setup.sh does — create venv, install editable, verify entry points,
seed secrets dir, .env, registry, bootstrap branch identity files — and works
natively on Windows without Git Bash. Uses sys.executable (no python3 vs python
ambiguity), pathlib throughout, and prints PATH instructions on Windows instead
of attempting symlink creation.

Closes #261.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 02:43:31 -07:00