Commit Graph
150 Commits
Author SHA1 Message Date
AIOSAIand@flow 3876ff04ed fix(flow): list DPLAN prefix, double error messages, local prompt
- List display now shows correct prefix (DPLAN-XXXX not FPLAN-XXXX)
  by tagging plans with source registry prefix during merge
- Modules return True after handling commands (even on failure)
  to prevent flow.py from printing spurious "Unknown command"
- Configured flow local prompt with architecture overview

Co-Authored-By: @flow <flow@aipass>
2026-03-17 18:14:15 -07:00
AIOSAIand@flow 202c2294a7 feat(flow): unified plan pipeline — plugin architecture for FPLAN/DPLAN parity
Refactor flow's plan system from two parallel pipelines (FPLAN + DPLAN) into
one unified, plugin-based architecture. Plan types are data plugins — adding
a new type means dropping a folder in plan_types/, zero code changes.

- Unified create: `drone @flow create . "subject" dplan` now works correctly
- Unified close: detects plan type from filename prefix, routes to correct registry
- Unified list: aggregates plans across all per-type registries
- Per-type registries: fplan_registry.json + dplan_registry.json (4-digit counters)
- Archive to backup/processed_plans/ (was flow/processed_plans/)
- Vector processing wired to memory's plans_processor on close
- Display shows correct prefix (DPLAN-0007 not FPLAN-0007)
- Archived old dual-pipeline code: dplan_flow.py, handlers/dplan/, dev_planning/

Design: DPLAN-0072 | Execution: FPLAN-0078 (master, 4 phases)

Co-Authored-By: @flow <flow@aipass>
2026-03-17 17:23:11 -07:00
18acb30f83 chore(system): session 34 — maintenance + multi-branch work (#70)
* fix(ai_mail): resolve relative mailbox_path bug + archive dead handlers

Fix get_user_by_email() and get_all_users() returning relative mailbox_path
values from registry instead of absolute paths (causing doubled paths in reply).
Added path resolution matching get_current_user() pattern.

Archive 7 unused handler files to apps/.archive/ (gitignored):
- pending_work.py — planned feature, never wired
- lock_utils.py — superseded by inbox_lock.py
- data_ops.py — consumer (error_monitor) was archived
- config_generator.py, users/load.py, registry/validate.py — scaffolded, never used
- trigger/error_handler.py — superseded by trigger branch's event system

Added test_user_paths.py (13 tests) covering absolute path resolution.

Co-Authored-By: @ai_mail <ai_mail@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(spawn): seedgo compliance cleanup — 93% to 98%

Archive legacy files (dev.local.md, ai_mail.local/, .seed/). Update META
Modified dates on 22 files. Update README architecture tree and freshness.
Fix 15 Pyright unused warnings. Add introspection no-args gates to 6
modules. Wire json_handler + log_operation to 15 operational files. Add
seedgo bypass for 5 pure data files and log_structure. Remove deprecated
dev.local.md from builder template.

Co-Authored-By: @spawn <spawn@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(system): session 34 — maintenance day, multi-branch work

System changes:
- setup.sh: symlink install replaces .bashrc PATH export for drone/seedgo
- .claude/settings.json: deny list moved to per-branch settings.local.json
- .gitignore: updated
- CLAUDE.md culture doc: stale refs fixed (Cortex→spawn, id.json→passport.json)

Branch work (accumulated from 15-branch rounds):
- daemon: stale term cleanup, plugin removals, json handler modernization
- drone: module refactor (discovery, registry, router, resolver, config)
- commons: 50+ file cleanup (imports, handlers, modules)
- flow: template loader, plan type system, command parser

Per-branch settings.local.json: reworked deny lists — allow PR workflow,
deny destructive git ops (reset, rebase, merge, clean, force push, rm -rf).
Fixed pattern syntax from :* to * glob.

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

---------

Co-authored-by: @ai_mail <ai_mail@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: @spawn <spawn@aipass>
Co-authored-by: @devpulse <devpulse@aipass>
2026-03-17 16:45:05 -07:00
18cc8eb74f feat(api): seedgo compliance — json_handler, introspection, diagnostics (#69)
* fix(ai_mail): resolve relative mailbox_path bug + archive dead handlers

Fix get_user_by_email() and get_all_users() returning relative mailbox_path
values from registry instead of absolute paths (causing doubled paths in reply).
Added path resolution matching get_current_user() pattern.

Archive 7 unused handler files to apps/.archive/ (gitignored):
- pending_work.py — planned feature, never wired
- lock_utils.py — superseded by inbox_lock.py
- data_ops.py — consumer (error_monitor) was archived
- config_generator.py, users/load.py, registry/validate.py — scaffolded, never used
- trigger/error_handler.py — superseded by trigger branch's event system

Added test_user_paths.py (13 tests) covering absolute path resolution.

Co-Authored-By: @ai_mail <ai_mail@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(spawn): seedgo compliance cleanup — 93% to 98%

Archive legacy files (dev.local.md, ai_mail.local/, .seed/). Update META
Modified dates on 22 files. Update README architecture tree and freshness.
Fix 15 Pyright unused warnings. Add introspection no-args gates to 6
modules. Wire json_handler + log_operation to 15 operational files. Add
seedgo bypass for 5 pure data files and log_structure. Remove deprecated
dev.local.md from builder template.

Co-Authored-By: @spawn <spawn@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(api): seedgo compliance — json_handler, introspection, diagnostics

Wire json_handler.log_operation() into all 13 handler files.
Add no-args introspection gates to 4 modules with standalone
command routing. Add pyright directives for optional deps
(Google, OpenAI) on 3 handler files.

Co-Authored-By: @api <api@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: @ai_mail <ai_mail@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: @spawn <spawn@aipass>
Co-authored-by: @api <api@aipass>
2026-03-17 16:44:57 -07:00
8c3ad2657c feat(spawn): seedgo compliance cleanup — 93% to 98% (#68)
* fix(ai_mail): resolve relative mailbox_path bug + archive dead handlers

Fix get_user_by_email() and get_all_users() returning relative mailbox_path
values from registry instead of absolute paths (causing doubled paths in reply).
Added path resolution matching get_current_user() pattern.

Archive 7 unused handler files to apps/.archive/ (gitignored):
- pending_work.py — planned feature, never wired
- lock_utils.py — superseded by inbox_lock.py
- data_ops.py — consumer (error_monitor) was archived
- config_generator.py, users/load.py, registry/validate.py — scaffolded, never used
- trigger/error_handler.py — superseded by trigger branch's event system

Added test_user_paths.py (13 tests) covering absolute path resolution.

Co-Authored-By: @ai_mail <ai_mail@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(spawn): seedgo compliance cleanup — 93% to 98%

Archive legacy files (dev.local.md, ai_mail.local/, .seed/). Update META
Modified dates on 22 files. Update README architecture tree and freshness.
Fix 15 Pyright unused warnings. Add introspection no-args gates to 6
modules. Wire json_handler + log_operation to 15 operational files. Add
seedgo bypass for 5 pure data files and log_structure. Remove deprecated
dev.local.md from builder template.

Co-Authored-By: @spawn <spawn@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: @ai_mail <ai_mail@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: @spawn <spawn@aipass>
2026-03-17 16:44:50 -07:00
8a4f8b0c61 feat(trigger): seedgo compliance 90% → 98% (#67)
* fix(ai_mail): resolve relative mailbox_path bug + archive dead handlers

Fix get_user_by_email() and get_all_users() returning relative mailbox_path
values from registry instead of absolute paths (causing doubled paths in reply).
Added path resolution matching get_current_user() pattern.

Archive 7 unused handler files to apps/.archive/ (gitignored):
- pending_work.py — planned feature, never wired
- lock_utils.py — superseded by inbox_lock.py
- data_ops.py — consumer (error_monitor) was archived
- config_generator.py, users/load.py, registry/validate.py — scaffolded, never used
- trigger/error_handler.py — superseded by trigger branch's event system

Added test_user_paths.py (13 tests) covering absolute path resolution.

Co-Authored-By: @ai_mail <ai_mail@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(trigger): seedgo compliance 90% → 98% — introspection, json_structure, diagnostics

- Introspection (58→100%): Add print_introspection() to config.py, change
  no-args gates in all 5 modules to call introspection instead of help
- Json_Structure (4→100%): Wire json_handler import + log_operation() into
  all 21 modules and handlers
- Diagnostics (75→100%): Add stub function definitions in except ImportError
  blocks to resolve "possibly unbound" type errors
- Readme (83→100%): Update Last Updated dates to 2026-03-17

22/23 seedgo categories at 100%. Remaining: log_structure (seedgo backlog).

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

---------

Co-authored-by: @ai_mail <ai_mail@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: @trigger <trigger@aipass>
2026-03-17 16:44:44 -07:00
d7f2587465 feat(cli): 100% seedgo compliance — all 24 standards (#66)
* fix(ai_mail): resolve relative mailbox_path bug + archive dead handlers

Fix get_user_by_email() and get_all_users() returning relative mailbox_path
values from registry instead of absolute paths (causing doubled paths in reply).
Added path resolution matching get_current_user() pattern.

Archive 7 unused handler files to apps/.archive/ (gitignored):
- pending_work.py — planned feature, never wired
- lock_utils.py — superseded by inbox_lock.py
- data_ops.py — consumer (error_monitor) was archived
- config_generator.py, users/load.py, registry/validate.py — scaffolded, never used
- trigger/error_handler.py — superseded by trigger branch's event system

Added test_user_paths.py (13 tests) covering absolute path resolution.

Co-Authored-By: @ai_mail <ai_mail@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(cli): achieve 100% seedgo compliance across all 24 standards

Clean up json_handler (remove prax dependency, use portable Path resolution),
wire json_handler into display.py, templates.py, and init_project.py using
module import pattern. Restructure handle_command() with seedgo-compliant
no-args introspection gate. Update README with init commands and architecture.

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

---------

Co-authored-by: @ai_mail <ai_mail@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: @cli <cli@aipass>
2026-03-17 16:44:37 -07:00
eb527fe0b2 chore(prax): json_structure compliance + stderr fix + dead code cleanup (#65)
- Wire json_handler.log_operation() into all 51 modules/handlers (1%→100%)
- Fix stderr_routing: remove "Invalid JSON: 0" noise from dashboard.py
- Archive 9 dead handler files to .archive/ (never imported by anything):
  registry/{ignore,meta_ops,reader,statistics}.py
  watcher/reporter.py
  json/{initialize,load,log,save}.py

Seedgo audit: 93%→98% (23 of 24 categories at 100%)
Log_Structure remaining issue is a seedgo checker bug (PR #63)

Co-authored-by: @prax <prax@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 16:44:28 -07:00
AIPassand@skills 1f08c0737f feat(skills): achieve 100% seedgo compliance across all 24 standards (#64)
Five standards fixed (91% → 100%):
- Architecture: added dropbox/ directory (template compliance)
- Encapsulation: handler security guard in __init__.py (cross-branch import protection)
- Introspection: no-args gate in all 5 module handle_command() functions
- Json_Structure: created json_handler + wired log_operation() in all 12 source files
- Diagnostics: isinstance(metadata, dict) guards + yaml type narrowing (if yaml is not None)

Also fixed Readme freshness (both header and footer dates) and directory tree accuracy.

123 tests passing. No false positives.

Co-authored-by: @skills <skills@aipass>
2026-03-17 16:44:16 -07:00
AIPassand@seedgo 64cbb42162 feat(seedgo): DPLAN-0056 Phase 2 + 100% compliance — JSON self-compliance, checker fixes, bypass guidance (#63)
Phase 2 (FPLAN-0065): Wire json_handler into all 66 seedgo modules/handlers.
json_handler.py updated to inline defaults (no template dependency).
json_templates/ archived. seedgo_json/ auto-populates on audit.

100% compliance push: architecture (docs/dropbox dirs), introspection
(readme_update no-args gate), log_structure (branch root detection +
directory checks fix), readme (date, checklist, commands section),
stderr_routing (bypass false positives in doc strings).

New: bypass_content.py — queryable guidance on when/how to use bypasses.
Updated json_structure standard with dependency-free handler rule + valid
bypass cases.

Result: 24/24 standards at 100%, 71 files checked, 0 type errors.

Co-authored-by: @seedgo <seedgo@aipass>
2026-03-17 16:44:08 -07:00
AIPass efd462e03d Merge pull request #59 from AIOSAI/refactor/prax-simplify-logging-two-tier
refactor(prax): simplify logging to two-tier model
2026-03-17 00:48:43 -07:00
AIPass 617f96cb66 Merge pull request #60 from AIOSAI/fix/stale-dev-central-cleanup
fix(ai_mail,trigger): replace stale dev_central with devpulse
2026-03-17 00:48:18 -07:00
AIPass c862b4b033 Merge pull request #62 from AIOSAI/feat/memory-modernize-symbolic-orchestrator
feat(memory): modernize symbolic + pool_processor, wire post-rollover chain
2026-03-17 00:47:58 -07:00
AIPass 04762ac149 Merge pull request #61 from AIOSAI/feat/seedgo-standards-overhaul-session18
feat(seedgo): standards overhaul — meta AUDIT_SCOPE, JSON structure redesign, log two-tier
2026-03-17 00:47:26 -07:00
35526b8754 feat(memory): modernize symbolic + pool_processor, wire post-rollover chain
- Modernize symbolic.py module: seedgo introspection gate, aipass.memory imports
- Modernize 6 symbolic handlers: remove MEMORY_BANK paths, use _MEMORY_ROOT
- Modernize pool_processor.py: fix config path (memory_json → config), add memory_pool config section
- Wire post-rollover chain in orchestrator.py: Trigger.fire('rollover_complete'), central_writer, dashboard_push, pool_processor
- Expose check_and_rollover() via modules/rollover.py for cross-branch access
- Update pyrightconfig.json with memory venv site-packages path

FPLAN-0054, FPLAN-0062

Co-Authored-By: @memory <memory@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 00:46:21 -07:00
AIOSAIand@prax e19f4b7ff1 chore(prax): seedgo audit cleanup — introspection, diagnostics, dead code
- Add introspection no-args gate to all 11 modules (50% → 100%)
- Fix 16 pyright type errors across 6 handler files (5% → 100%)
- Archive dead code: cli_commands.py, INTEGRATION_EXAMPLE.py,
  MONITOR_MODULE_INTEGRATION.py, duplicate json_templates/
- Fix stderr routing in dashboard.py, debug→info in sync.py
- Clean unused imports across 13 files
- Update README.md for two-tier model, add dropbox/ for architecture
- Seedgo audit: 91% → 93% (remaining: log_structure + json_structure
  pending seedgo standard updates)

Co-Authored-By: @prax <prax@aipass>
2026-03-17 00:35:38 -07:00
0a1b53f57d feat(seedgo): standards overhaul — meta AUDIT_SCOPE, JSON structure redesign, log two-tier
- meta_check.py: add AUDIT_SCOPE = "all_files" — catches 8 old-format headers in memory (100% → 75%)
- json_structure_check.py: rewrite with code wiring validation (import + log_operation check for modules AND handlers), remove 100% fallthrough
- json_structure_content.py: show code pattern as standard, not JSON templates
- json_handler.py: auto-detect branch name from Path(__file__), write to {branch}_json/ instead of apps/aipass_json/
- log_structure_check.py: update to two-tier model (branch-root logs/ only)
- log_structure_content.py: document simplified two-tier logging

DPLAN-0056: Three-JSON Pattern Redesign (decisions locked)

Co-Authored-By: @seedgo <seedgo@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 00:25:27 -07:00
AIOSAIand@devpulse cef8ad029e fix(ai_mail,trigger): replace stale dev_central references with devpulse
Clean up 33 stale "dev_central" references across ai_mail (16 hits)
and trigger (17 hits) branches. All @dev_central → @devpulse in code,
comments, prompt templates, and config values. ALL CAPS prompt
directives rewritten to normal case. Category B rewrite in ai_mail.py
(dashboard comment corrected to reference prax). Also adds demo/
hello_aipass.py — animated terminal dashboard for demos.

Co-Authored-By: @devpulse <devpulse@aipass>
2026-03-17 00:12:53 -07:00
AIOSAIand@prax 3a55e0b8b4 refactor(prax): simplify logging from hierarchical to two-tier
Remove get_hierarchical_logs_dir() and all nested log placement logic.
Local logs now route to branch-root logs/ only, matching system_logs/
at repo root for a clean two-tier model.

Co-Authored-By: @prax <prax@aipass>
2026-03-16 23:56:57 -07:00
AIPassand@devpulse 79b09e8c1d chore(system): portable hooks — git rev-parse, global_hooks supply, setup guide (#58)
Migrate all AIPass hooks from hardcoded paths to git rev-parse --show-toplevel.
Zero AIPass paths remain in global settings. Hooks auto-discover repo root.

- .claude/README.md: complete setup guide (3 steps, exact JSON to paste)
- .claude/global_hooks/: user-level scripts to copy to ~/.claude/hooks/
- .claude/hooks/prompt_inject.sh: combined inject (reference)
- .aipass/aipass_global_prompt.md: STATUS.local.md elevated to equal priority

Related: DPLAN-0053 (Hook Migration — Project-Level Settings)

Co-authored-by: @devpulse <devpulse@aipass>
2026-03-16 12:16:16 -07:00
d63b6def07 docs(system): README — bypassPermissions, drone AI-first CLI, STATUS parity (#57)
* feat(system): enable subagent hook enforcement (DPLAN-0050)

Add CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 env var so PostToolUse hooks
fire inside all subagents. Wire SubagentStop gate as secondary enforcement.
Remove unused custom builder agent. Update .claude/README.md with subagent
hook architecture docs.

Co-Authored-By: @seedgo <seedgo@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs(system): README — bypassPermissions, drone AI-first CLI, STATUS.local.md parity

- Fix claude command to claude --permission-mode bypassPermissions (how system actually runs)
- Add drone section: AI-friendly single-line commands, guessable patterns, no interactive mode
- Elevate STATUS.local.md from "notepad" to equal persistence layer priority
- Remove stale dev.local.md reference from global prompt

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

---------

Co-authored-by: @seedgo <seedgo@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: @devpulse <devpulse@aipass>
2026-03-15 23:37:06 -07:00
AIPassand@devpulse 107d685a29 chore(system): git workflow — return to main after PR (#56)
Add "Return to main after PR" instruction to global prompt. Git branches are
repo-wide — citizens must switch back to main after creating PRs so they don't
strand other citizens on stale feature branches. Tested: memory complied on
first attempt.

Co-authored-by: @devpulse <devpulse@aipass>
2026-03-15 22:51:59 -07:00
AIPassand@memory 6a6e2064f5 feat(memory): restore lost subsystems + modernize templates module (#55)
Port missing subsystems from old memory bank:
- symbolic module + 7 handlers (fragmented memory extraction, AUDN dedup)
- templates module + 3 handlers (pusher, differ, spawn_pusher)
- pool_processor intake handler

Modernize templates system (FPLAN-0052):
- Fix all imports (MEMORY_BANK → aipass.memory, cli → aipass.cli)
- Remove hardcoded paths, use Path(__file__) traversal
- Add seedgo-compliant introspection gate to templates.py
- Update canonical templates to v2 schema (entry-count limits)
- Create spawn_pusher.py handler for auto-discovering spawn template sets
- Wire spawn_pusher into push-templates command

Co-authored-by: @memory <memory@aipass>
2026-03-15 22:47:53 -07:00
75009603f5 docs(system): README update — init-anywhere, recent work (#54)
* chore: project-level PostToolUse hook + builder agent definition + prompt update

- .claude/settings.json: Added PostToolUse hook (Edit|Write|MultiEdit) for
  auto-fix diagnostics at project level (investigating subagent hook delivery)
- .claude/agents/builder.md: Custom builder agent with auto-fix PostToolUse hook
  (not yet accessible via Agent tool subagent_type — investigating)
- .aipass/aipass_global_prompt.md: Added "stage from git, not from memory" rule
- .gitignore: Added memory fragmented config/state files

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

* docs(system): README update — init-anywhere story, recent work sync

Add init-anywhere as a core capability. Update recently completed with CLI front door,
memory introspection overhaul, seedgo standards enforcement. Refresh STATUS.md sync.

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

---------

Co-authored-by: @seedgo <seedgo@aipass>
Co-authored-by: @devpulse <devpulse@aipass>
2026-03-15 22:36:25 -07:00
AIPass d46b7b512e Merge pull request #52 from AIOSAI/feat/seedgo-reach-standards-enforcement
feat(seedgo): Standards enforcement system — checklist, checker fixes, handler guards
2026-03-15 22:32:21 -07:00
AIPass 5c7747ca20 Merge pull request #53 from AIOSAI/feat/memory-cli-introspection
feat(memory): CLI introspection overhaul — seedgo-compliant discovery
2026-03-15 22:31:37 -07:00
AIOSAIand@memory 410b2e44e2 feat(memory): CLI introspection overhaul — seedgo-compliant discovery
Wire print_introspection() into both modules with no-args gate per seedgo
introspection standard. Rollover bare command now shows handlers + subcommands
instead of executing. Search bare command shows introspection instead of error.
Fix bug where `search --help` ran a search for "--help". Remove 5 ghost
commands from help text. Restructure rollover as subcommands (run/status/check/
sync-lines).

DPLAN-0045, FPLAN-0047, FPLAN-0049

Co-Authored-By: @memory <memory@aipass>
2026-03-15 20:22:11 -07:00
AIOSAIand@seedgo 4e183f2bf8 feat(seedgo): standards enforcement system — checklist command, checker fixes, handler guards
FPLAN-0048: Seedgo Reach — 4-phase standards enforcement overhaul.

Phase 1: Checker improvements
- introspection_check.py: module-level handle_command() gate validation
  (catches modules that execute instead of showing introspection on no-args)
- encapsulation_check.py: handler guard presence detection
  (flags branches with empty handlers/__init__.py)

Phase 2: Checklist command
- New checklist.py module: `drone @seedgo checklist <file>`
- Runs applicable standards per-file, concise pass/fail output
- 23 standards on entry points, 3 (all_files scope) on modules
- Designed for auto-fix hook consumption

Phase 3: Auto-fix hook integration (separate from this commit)

Phase 4: Handler guard deployment
- Deployed runtime import guards to 6 previously unprotected branches
  (backup, daemon, drone, memory, spawn, seedgo)
- All 12 handler-bearing branches now have active guards
- Uses inspect.stack() to block cross-branch handler imports

Co-Authored-By: @seedgo <seedgo@aipass>
2026-03-15 20:20:52 -07:00
AIPass 07f2a6cf8f Merge pull request #51 from AIOSAI/feat/cli-front-door-and-drone-adapter
feat(cli,drone): CLI front door + drone internal module
2026-03-15 17:31:53 -07:00
AIOSAIand@devpulse 091c1b710c feat(cli,drone): CLI front door — seedgo-compliant discovery + drone internal module
CLI entry point rewritten to follow seedgo auto-discovery pattern:
- discover_modules() scans for handle_command() instead of hardcoded list
- Introspection shows routable modules vs import-only services
- init_project.py now owns the 'aipass' command with subcommand routing
- Rich colors fixed (force_terminal=True) for drone subprocess pipes

CLI registered as drone internal module (drone_adapter.py):
- drone @cli accessible from any directory, not just inside AIPass repo
- drone @cli aipass init works from external projects
- Drone introspection now shows 3 internal modules: cli, drone, seedgo

Drone: CLI added to interactive allow list for terminal passthrough.

Co-Authored-By: @devpulse <devpulse@aipass>
2026-03-15 14:05:35 -07:00
AIOSAIand@cli bfeb6c0ec7 feat(cli): Rich UX polish for aipass init — help, output, introspection
- `drone @cli aipass` shows subcommand introspection table (was error)
- `drone @cli aipass init --help` upgraded with Rich panels, tables, args
- Init output uses Panel for summary, Table for file list
- Fixed double "Try:" in error suggestions

Co-Authored-By: @cli <cli@aipass>
2026-03-15 08:48:17 -07:00
aa2aaaad22 docs(system): update README with recent work + STATUS sync (#50)
Refresh README "Current State" section with completed work (credential
model, stderr routing, dashboard pipeline, CLI init, drone tests,
governance). Add README/--help discovery tip for new users. Sync
STATUS.md from all 15 branches.

Co-authored-by: @devpulse <devpulse@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 00:03:56 -07:00
AIPass 824bd2f4bf Merge pull request #49 from AIOSAI/feat/session-29-cleanup
fix(system): session 29 cleanup — governance, ruff config, branch work
2026-03-14 23:43:10 -07:00
AIOSAIand@devpulse f91c8d2f32 fix(system): session 29 cleanup — governance, ruff config, branch work
- Global prompt: dispatch reply breadcrumb (branches must reply to dispatchers)
- /prep command: broadened to end-of-session, not just pre-compact
- .gitignore: added .ruff_cache/ and .pytest_cache/
- pyproject.toml: ruff ignore E402 (metadata headers) + __init__.py F401 (re-exports)
- ai_mail: dashboard_sync.py import fix (devpulse → prax)
- backup: config_handler, ignore_patterns, file_scanner, backup_core updates + test
- devpulse: archived init_project.py (migrated to CLI in PR #48)

Co-Authored-By: @devpulse <devpulse@aipass>
2026-03-14 23:40:10 -07:00
4f061c4d75 feat(prax): fix dashboard refresh data pipeline — 4 bugs (#47)
- Fix prax.py argparse eating --all/--branch flags before they reach
  dashboard handler (parse_args → parse_known_args + forward remaining)
- Fix case-sensitive branch matching in flow extraction (centrals use
  lowercase, refresh uses uppercase — added .upper() to comparison)
- Add missing last_updated timestamp to ai_mail section extraction
- Fix flow last_updated to read generated_at from PLANS.central.json
  instead of non-existent top-level last_updated

Tested: refresh --all now updates all 15 branches with live data.
FLOW correctly shows 12 active plans (was 0 due to case mismatch).

Co-authored-by: @prax <prax@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 23:29:53 -07:00
AIPassand@cli 05af9e5cd5 feat(cli): migrate aipass init from devpulse prototype (#48)
Restructure init_project.py into CLI's 3-layer architecture:
- Handler: apps/handlers/init/bootstrap.py (pure Python business logic)
- Module: apps/modules/init_project.py (thin orchestration)
- Wiring: cli.py routes `aipass init` via _handle_aipass()

Command: drone @cli aipass init [target_dir] [project_name]

FPLAN-0041

Co-authored-by: @cli <cli@aipass>
2026-03-14 23:29:50 -07:00
f9cff284b3 feat(prax): dashboard cleanup — remove devpulse, fix broken paths (#45)
* feat(backup): stderr routing, error masking fix, mtime pre-check, ignore patterns split

- Route all error/warning prints to stderr via error()/warning() (backup_core, google_drive_sync)
- Fix route_command error masking — show real errors instead of "Unknown command"
- Add versioned backup mtime pre-check to skip unchanged files
- Extract ignore patterns from config_handler to editable JSON (FPLAN-0037)
  - New: ignore_patterns.py loads from json_templates/ignore_patterns.json
  - config_handler.py v3.0.0 re-exports for backwards compatibility
  - 132 patterns, 14/14 tests pass

Co-Authored-By: @backup <backup@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(prax): dashboard cleanup — remove devpulse section, fix broken paths

Phase 1 dashboard cleanup (FPLAN-0040):
- Remove devpulse section from template, all hardcoded defaults, and refresh pipeline
- Fix broken paths: old aipass_os/dev_central/devpulse → prax via Path(__file__)
- Fix registry: BRANCH_REGISTRY.json → AIPASS_REGISTRY.json with repo root walk-up
- Fix relative path resolution: registry stores relative paths, now resolved against repo root
- Fix agent_status_writer subprocess import: aipass.devpulse → aipass.prax
- Update help text and docstrings: drone @devpulse → drone @prax
- Add devpulse to DEPRECATED_SECTIONS in template_pusher and differ
- Push-template verified: all 15 branches updated, devpulse section removed

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

---------

Co-authored-by: @backup <backup@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: @prax <prax@aipass>
2026-03-14 23:07:39 -07:00
c6d2bcd353 feat(drone): 188-test suite, interactive backup commands, type fix (#46)
* feat(backup): stderr routing, error masking fix, mtime pre-check, ignore patterns split

- Route all error/warning prints to stderr via error()/warning() (backup_core, google_drive_sync)
- Fix route_command error masking — show real errors instead of "Unknown command"
- Add versioned backup mtime pre-check to skip unchanged files
- Extract ignore patterns from config_handler to editable JSON (FPLAN-0037)
  - New: ignore_patterns.py loads from json_templates/ignore_patterns.json
  - config_handler.py v3.0.0 re-exports for backwards compatibility
  - 132 patterns, 14/14 tests pass

Co-Authored-By: @backup <backup@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(prax): dashboard cleanup — remove devpulse section, fix broken paths

Phase 1 dashboard cleanup (FPLAN-0040):
- Remove devpulse section from template, all hardcoded defaults, and refresh pipeline
- Fix broken paths: old aipass_os/dev_central/devpulse → prax via Path(__file__)
- Fix registry: BRANCH_REGISTRY.json → AIPASS_REGISTRY.json with repo root walk-up
- Fix relative path resolution: registry stores relative paths, now resolved against repo root
- Fix agent_status_writer subprocess import: aipass.devpulse → aipass.prax
- Update help text and docstrings: drone @devpulse → drone @prax
- Add devpulse to DEPRECATED_SECTIONS in template_pusher and differ
- Push-template verified: all 15 branches updated, devpulse section removed

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

* feat(drone): add 188-test suite, interactive commands for backup, type fix

- Add 5 test files (188 tests) covering executor, resolver, router,
  registry_handler, and discovery — built via 3-round audit process
- Add snapshot/versioned to interactive command tuple for backup Rich output
- Fix type error in router_handler.py:119 (command: Optional[str] → str)
- Fix pytest.ini inline comments breaking pytest 9.x
- Document interactive commands in README

Co-Authored-By: @drone <drone@aipass>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: @backup <backup@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: @prax <prax@aipass>
Co-authored-by: @drone <drone@aipass>
2026-03-14 23:07:06 -07:00
0e658baf85 feat(backup): stderr routing, error masking fix, mtime pre-check, ignore patterns split (#44)
- Route all error/warning prints to stderr via error()/warning() (backup_core, google_drive_sync)
- Fix route_command error masking — show real errors instead of "Unknown command"
- Add versioned backup mtime pre-check to skip unchanged files
- Extract ignore patterns from config_handler to editable JSON (FPLAN-0037)
  - New: ignore_patterns.py loads from json_templates/ignore_patterns.json
  - config_handler.py v3.0.0 re-exports for backwards compatibility
  - 132 patterns, 14/14 tests pass

Co-authored-by: @backup <backup@aipass>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 23:07:03 -07:00
AIPassand@api 9ab96013e7 feat(api): Google provider module — centralized external API gateway (#43)
Add Google API authentication and service factory as the first
non-LLM provider in API's evolution to centralized external service
gateway (DPLAN-0036).

New handlers: google/auth.py (OAuth2 lifecycle), google/service_factory.py
(single + thread-safe service objects), google/retry.py (SSL retry).
New module: google_client.py with get_drive_service(), get_google_service(),
validate_google(), reauth_google() public API.

New commands: drone @api validate google, drone @api reauth google.
Credentials at ~/.secrets/aipass/ (cross-platform standard).

Co-authored-by: @api <api@aipass>
2026-03-14 23:07:00 -07:00
dependabot[bot] 4c43610816 ci(deps): bump actions/upload-artifact from 4 to 7 (#40)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-14 23:06:57 -07:00
dependabot[bot] dc60524f21 ci(deps): bump actions/stale from 9 to 10 (#39)
Bumps [actions/stale](https://github.com/actions/stale) from 9 to 10.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v9...v10)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '10'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-14 23:06:55 -07:00
AIPassand@devpulse 3fd3c24bf7 docs(system): git workflow, DPLAN/FPLAN docs, and how-to-work guidelines (#42)
Global prompt additions:
- Git Workflow section: commit scope, PR flow, signature format, never merge
- How to Work section: always plan, use agents, check seedgo
- DPLAN/FPLAN breadcrumb: what each is, when to use which, master command
- DPLAN template: self-explanatory intro so agents know what they're holding

Co-authored-by: @devpulse <devpulse@aipass>
2026-03-14 20:18:30 -07:00
AIPassandClaude Opus 4.6 8fedc053ec feat(system): credential model, stderr migration, DPLAN/FPLAN docs (#41)
* feat(system): stderr routing migration Phase 3 — 10 branches migrated (FPLAN-0033)

Autonomous 3-wave migration: 15+ agents across 10 branches converted
error/warning prints to CLI stderr functions. Seedgo stderr_routing
checker refined (false positive fix for section headers). System avg
49%→94%. Skills self-fixed (100%). Credential model DPLAN updated.
AIPASS.md moved to ~/.claude/CLAUDE.md (global culture layer).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(system): stderr routing cleanup — remaining violations fixed

Final wave: ai_mail, backup, seedgo, commons, daemon migrated to
CLI stderr functions. System stderr_routing avg now 97% (11 branches
at 100%). Seedgo checker refinement confirmed (false positives
eliminated). Only backup/google_drive_sync has remaining prints.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(system): /prep command + cleanup memo and pre-compact hook

New /prep slash command for pre-compact preparation: saves memories,
updates plans, checks git/inbox, flags loose ends. Workflow: /prep
then /compact. Cleaned up /memo (stale field refs, flow.local.md →
STATUS.local.md). Pre-compact hook: removed misleading Notepad
reference, points to local.json and STATUS.local.md instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs(flow): DPLAN/FPLAN distinction in global prompt + DPLAN template self-documentation

Global prompt now explains DPLAN vs FPLAN with brief breadcrumbs and adds
the missing `master` command. DPLAN template now opens with a "What is a
DPLAN?" section so agents understand the plan type on first read.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 18:57:23 -07:00
AIPass 518d6bf2d6 Merge pull request #38 from AIOSAI/feat/registry-glob-and-system-fixes
feat(system): registry glob discovery, drone stderr fix, pyright OOM fix
2026-03-14 11:52:06 -07:00
AIOSAIandClaude Opus 4.6 97952124b5 feat(system): stderr routing migration Phase 3 — 10 branches migrated (FPLAN-0033)
Migrated error()/warning() calls across 10 branches to use CLI display API
which routes to stderr. 48 files modified across ai_mail, api, backup, daemon,
flow, memory, prax, seedgo, spawn, trigger. Seedgo stderr_routing standard
created (24th standard) with full-file scanning. System average 49% → 69%.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 00:41:38 -07:00
AIOSAIandClaude Opus 4.6 154e92d13e feat(system): CLI stderr standardization + drone error propagation (FPLAN-0032)
CLI display.py now routes error() and warning() to stderr via err_console.
Added fatal() for unrecoverable errors. Drone imports err_console from CLI
instead of creating its own. RegistryMismatchError added to drone exception
hierarchy for credential verification failures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 23:27:51 -07:00
AIOSAIandClaude Opus 4.6 c6e504f861 feat(system): registry credential verification + spawn registry_id injection
Drone: added _verify_registry_credential() to load_registry(). Compares
passport's citizenship.registry_id against registry's metadata.id. Hard
error on mismatch, silent pass when either side missing (backwards
compatible). Closes the silent-fallback concern from Scenario 5 testing.

Spawn: build_replacements_dict() now reads registry UUID and provides
{{REGISTRY_ID}} placeholder. Both builder and birthright passport
templates updated with registry_id field. New branches auto-get
credentialed passports.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 22:46:10 -07:00
AIOSAIandClaude Opus 4.6 aa271ba883 feat(system): credential model design + aipass init prototype (DPLAN-003)
Registry credential model: registries get UUID in metadata.id, passports
carry matching registry_id. Stage 1 (UUID match) designed, Stage 2
(macaroon tokens) planned. Research confirmed macaroons as best-fit
pattern for AI agent delegation.

init_project.py prototype: bootstraps AIPass project in any directory
(registry, .trinity, .aipass, AIPASS.md). Hardened against 10 edge
cases (name sanitization, permission errors, passport overwrite guard).
Drone isolation verified across 6 scenarios (sibling, nested, deep
walk-up, cross-project contamination). All findings documented in
credential_model.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 22:38:23 -07:00
AIOSAIandClaude Opus 4.6 8ab43a2cd0 feat(system): registry glob discovery, drone stderr fix, pyright OOM fix (#38)
Registry discovery (drone, spawn, seedgo) now globs for *_REGISTRY.json
with CWD-first walk-up — enabling project isolation without hardcoded
filenames. Drone stderr crash fixed (Rich Console). Pyright OOM fixed
via pyrightconfig excludes. AIPASS.md simplified for universal use.
Global prompt updated with flow commands. DPLAN-003 added for
AIPass-as-OS design vision.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 21:22:47 -07:00