Commit Graph
36 Commits
Author SHA1 Message Date
AIOSAI e63a4e9945 feat(#630): retire blanket rm deny + aipass doctor migration
Phase 2 of #630. The rm_gate hook + drone rm now own destructive-delete
protection (cross-provider, path-aware, teaching), so the Claude-only blanket
deny is redundant AND harmful (it short-circuits before the hook, suppressing
the teaching message).

- setup.sh: removed Bash(rm -rf*) + Bash(rm -r *) from git_deny (new installs)
- bootstrap.py: removed Bash(rm -rf *) shipped via aipass init (project settings)
- doctor_wire.reconcile_stale_deny(): aipass doctor WARNs on stale rules;
  --fix removes them (idempotent, preserves all else) — migration for existing
  installs (the 'aipass update should be trusted' goal)
- .aipass/project_hooks.json template: added rm_gate (new projects get it)

Tests: 8 reconcile + 432 aipass total, seedgo 99%. CHANGELOG W23.
2026-06-02 20:24:21 -07:00
AIOSAI 35a63b9540 fix: bootstrap @hooks as 13th branch + correct stale 12-counts
setup.sh never bootstrapped @hooks (hardcoded 12-branch list, stale comment from before hooks existed). Fresh clones got no @hooks passport + an absolute registry path -> drone @hooks commands failed ('path escapes project root'). Engine still fired (runs from AIPASS_HOME) but the citizen was non-functional.

- setup.sh: + bootstrap_branch hooks, 12->13 count + comment
- .aipass/aipass_global_prompt.md: 12->13 core branches, + hooks (injected every turn)
- devpulse local prompt: 13 Core Branches, + @hooks experts row
- dashboard dispatch_section docstring: 12->13

Found via Docker clone-from-dev test (DPLAN-0190 Phase D).
2026-05-28 19:51:27 -07:00
AIOSAI 00b1ecff6d remove: Gemini CLI support — delete .gemini/, GEMINI.md, strip all refs from setup.sh, README, init, prax monitoring, hooks, tests (DPLAN-0188) 2026-05-24 15:37:48 -07:00
AIOSAI adb85b03a8 feat: DPLAN-0184 Phase 2 complete + DPLAN-0186 post-migration sweep — 14 native handlers, bridge routing, docs/setup alignment 2026-05-22 14:53:14 -07:00
AIOSAI a01d09b3cf fix: settings merge on update + gitignore cleanup + dead cli __main__.py + setup.sh rollover hooks 2026-05-17 00:04:56 -07:00
AIOSAIand@devpulse 326c08fe54 feat(system): v2.3.0: bump version + fix bootstrap to include @aipass (12 agents)
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-08 21:48:38 -07:00
AIOSAIand@devpulse 28a6680f02 feat(system): DPLAN-0168 Phase 3-4: remove non-AIPass env vars, init report includes doctor findings, ping step fix for single agent
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-07 20:50:28 -07:00
AIOSAIand@devpulse ad4a99b4fe feat(system): Fix command duplication: deduplicate /memo and /prep commands across settings levels, add setup.sh provider-level command install, move memo template to .claude/templates/
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-07 19:11:10 -07:00
AIOSAIand@devpulse 5114986c31 feat(system): feat(system): Docker clone testing + setup.sh aipass symlink fix — Dockerfile.test replaces old code-server Dockerfiles, tests/docker_clone_test.sh for fresh-install verification, hook_test.py portability fix (skip gracefully without ~/Projects), setup.sh now symlinks both drone AND aipass to ~/.local/bin. Verified 11/11 on real git clone + aipass init inside container.
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-07 15:36:34 -07:00
AIOSAIand@devpulse b971d2161e feat(system): feat(hooks): DPLAN-0167 hook testing framework + bootstrap fix — 20-test harness with direct+integration layers, hook execution logger, CWD guard verification across projects, setup.sh provider wiring update (global_prompt_loader + env vars + git deny rules), bootstrap.py removes dead PreToolUse/PostToolUse from project settings, hook READMEs at provider+project level
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-07 12:58:47 -07:00
patrickand@devpulse 6fd57fed04 feat(system): fix(system): git_gate hardening + setup.sh auto_watchdog wiring + symlink fallback — DPLAN-0163 Phase 1
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-03 22:56:46 -07:00
patrickand@devpulse 1ee7b45483 feat(system): feat(hooks): ship git_gate hook via setup.sh — mechanical block on raw git/gh writes for fresh installs
Adds .claude/hooks/git_gate.py and wires it in setup.sh PreToolUse so all fresh AIPass installs ship with mechanical enforcement of the drone-only git policy.

Why this exists: dispatched agents spawn with bypassPermissions which skips all permissions.deny rules in every settings tier. PreToolUse hooks remain the only mechanical chokepoint that survives bypass mode (verified via official Claude Code docs and live dispatch test).

Behavior — blocks with redirect to drone:
- Bash raw git write verbs and stash drop/clear/pop/apply
- Bash gh write subcommands and all gh api calls
- Edit/Write/MultiEdit on .claude/settings*.json, .claude/hooks/, .git/hooks/

Allows:
- Read-only git and gh
- All drone-prefixed commands (drone uses Python subprocess for git, never the agent Bash tool)
- Devpulse and seedgo working from their own branches can edit the enforcement layer (trusted-editor bypass)
- Quote-stripping: text inside double or single quotes is treated as data not code (so PR descriptions and commit messages can mention git verbs freely)

Verified end-to-end S124: live dispatch to prax, hook fired on raw git chain, agent pivoted to drone @git pr cleanly. 79 unit-test cases pass total. See DPLAN-0162.

Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-03 20:40:16 -07:00
patrickand@devpulse 6839b1048a feat(system): fix(setup): wire pre_edit_gate + SubagentStop hooks in setup.sh — closes #498
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-03 09:32:16 -07:00
patrickand@devpulse 1d02f412f6 feat(system): fix(setup): protect ~/.secrets/ with permissions.deny + fix chmod on inner dir — closes #496
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-03 09:29:14 -07:00
patrickand@devpulse c7bc27b7b8 feat(system): fix(setup): add ensurepip check (#495) + git identity config (#500) — closes #495, closes #500
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-03 09:26:47 -07:00
patrickand@devpulse a530c83a63 feat(system): fix(setup): add ensurepip check to prevent broken venv on Debian/Ubuntu — closes #495
Co-Authored-By: @devpulse <devpulse@aipass>
2026-05-03 08:57:18 -07:00
AIOSAIand@devpulse a8abdedfa5 feat(system): fix(setup): bootstrap banner count 15 → 11 — reflects actual core branch count (#360 finding B5)
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-20 14:31:23 -07:00
AIOSAIandClaude Sonnet 4.6 8a5fbf6152 feat(memory): add [memory] extras group — unblock contributor pytest (#360 finding #1)
- pyproject.toml: add memory = ["numpy>=2.0", "chromadb>=1.0"] optional-deps group
- setup.sh: install .[dev,memory] so fresh-clone pytest works end-to-end
- test_vector.py: gate with pytest.importorskip("numpy"/"chromadb") — skip cleanly without extras
- memory_watcher.py: _check_vector_deps() probes venv at startup; health report now honest when chromadb absent
- bypass.json: 4 entries covering test_vector.py seedgo false-positives (architecture/docs/encapsulation/meta)
- dispatch/daemon.py: resolve relative branch_path to absolute before use
- dispatch/dispatch_monitor.py: resolve lock_file path so claude cwd is always absolute

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 13:06:20 -07:00
9560e5b934 feat(system): fix(setup): add branch_info block to passport template — path + email no longer 'unknown' on fresh installs (closes #353 finding 6) + gitignore .claude/worktrees (#355)
* feat(devpulse): watchdog: breadcrumb on exit + default timeout 1800s to 600s (FPLAN-0189)

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

* feat(drone): fix pr_handler: scope commit to branch_dir pathspec — prevents concurrent-PR index contamination (FPLAN-0190 Task A)

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

* feat(system): fix(setup): add branch_info block to passport template — path + email no longer 'unknown' on fresh installs (closes #353 finding 6) + gitignore .claude/worktrees

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

---------

Co-authored-by: @devpulse <devpulse@aipass>
Co-authored-by: @drone <drone@aipass>
2026-04-20 11:27:41 -07:00
c941c3d6ac fix(setup): make setup.sh self-sufficient on macOS (no admin required) (#354)
Fresh-install testing on macOS 12 Intel surfaced five friction points that
blocked or silently broke installation for users without admin rights.
All fixes are Mac-only, gated behind a new IS_MACOS flag. Linux and
Windows paths are untouched. See #353 for full context.

1. Stock macOS 12 ships /usr/bin/python3 at 3.9.6; setup.sh aborts at
   the 3.10+ minimum check. Fix: probe versioned python3.10-3.13
   binaries before falling back to plain python3.

2. Homebrew auto-install is not a universal fallback. Non-admin Mac
   accounts cannot install Homebrew at all because its installer
   requires admin/sudo. Fix: add uv (astral.sh/uv) as a no-sudo,
   no-admin fallback. uv drops into ~/.local/bin via curl and downloads
   a prebuilt standalone Python 3.11 to ~/.local/share/uv/python; the
   venv is created from that.

3. macOS defaults to zsh since Catalina (2019). Writing AIPASS_HOME to
   ~/.bashrc silently fails because zsh does not source it. Fix: on
   Mac, pick ~/.zshrc (or ~/.bash_profile for bash) based on SHELL.

4. The final symlink used sudo ln -sf /usr/local/bin/drone, which
   prompts for a password on Mac and breaks entirely for non-admin
   users. Fix: on Mac, link into ~/.local/bin (user-writable, no sudo)
   and ensure it is on PATH via the profile rc.

5. HOOK_PYTHON was set to plain python3 on Unix. On Mac that resolves
   to /usr/bin/python3 (3.9.6), which cannot parse hook scripts using
   PEP 604 union syntax (X | None). Hooks silently crash on every
   prompt. Fix: on Mac, point HOOK_PYTHON at the venv python (3.11)
   that setup just built.

Tested end-to-end on a fresh clone, non-admin user, zsh, Intel: all 11
branches bootstrapped, drone CLI works, hooks fire and execute cleanly,
ai_mail delivery verified, sub-agents spawn successfully.

Refs #353

Co-authored-by: Paddy <padddypaddypaddy-boop@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:16:39 -07:00
AIPassand@devpulse b92014a20e feat(system): fix(setup): Gemini hook install NameError — hook_python was undefined in the Gemini block (only defined in Claude block above). Pass HOOK_PYTHON through explicitly like the Claude flow does. (#344)
Co-authored-by: @devpulse <devpulse@aipass>
2026-04-16 13:57:17 -07:00
AIPassand@devpulse 8be6ac0418 feat(system): fix(setup): warn on Windows when shadowing drone installs are detected (#317 system Python pip aipass, #321 legacy npm aipass-drone scripts) — prints precise uninstall commands, doesn't auto-modify the user's system (#343)
Co-authored-by: @devpulse <devpulse@aipass>
2026-04-16 13:56:22 -07:00
AIPassand@devpulse e4a42f2186 feat(system): feat(windows): cherry-pick Windows parity fixes from #328 — watchdog ctypes (#323), dispatch monitor projects dir encoding (#324), prax atomic_write retry on PermissionError (#325), prax _WindowsSafeRotatingHandler (#318), branch_detector forward-slash normalize, memory_bank config seed (#322), PS profile wrapper (#319/#340). All Windows-only branches or no-op on Linux. 3146 tests pass, ruff zero. Closes #328 scope. Input-X credit preserved. (#342)
Co-authored-by: @devpulse <devpulse@aipass>
2026-04-16 13:41:31 -07:00
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
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
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
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
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
AIOSAIand@devpulse 6df129c672 feat(system): Codex CLI integration: AGENTS.md, hooks, skills, setup.sh detection
Co-Authored-By: @devpulse <devpulse@aipass>
2026-04-05 21:41:37 -07:00
AIPassandClaude Opus 4.6 6f2333ec67 S58: README rewrite + HERALD.md + fresh install fixes (#140)
* docs: rewrite README with verified claims + add HERALD.md progress tracker

README rewritten and verified against live system:
- All commands tested and confirmed working
- drone systems shows 23 (15 core + 8 test), documented correctly
- seedgo at 33 standards (was incorrectly stated as 34)
- Docker setup-workspace.sh fork URL noted
- setup.sh sudo requirement documented
- prax monitor marked as interactive
- Added Standards, Communication, and Structure sections
- Removed session tracking (moved to HERALD.md)
- Branch table expanded with roles and descriptions

HERALD.md: Living progress doc for Patrick to read between sessions.
Contains session history, active DPLANs, milestones, known issues.

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

* fix(install): registry format mismatch + seedgo CLI entry point

Bugs found via fresh Docker install test:

1. setup.sh generated AIPASS_REGISTRY.json with branches as dict (keyed
   by name), but seedgo's discovery.py expected a list of dicts. Result:
   `drone @seedgo audit aipass` was completely broken on any fresh install.
   Fix: setup.sh now generates list format (matching existing registry).

2. setup.sh verified `seedgo --help` but seedgo has no CLI entry point —
   it's only accessible via `drone @seedgo`. Fix: check `drone @seedgo --help`
   instead, remove broken symlink attempt.

3. seedgo discovery.py now handles both list and dict registry formats
   defensively (in case old registries exist).

4. README updated to remove seedgo standalone CLI claims.

Verified: full fresh install in Docker container — setup.sh completes
successfully, drone systems shows 15 branches, seedgo audit runs clean.

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-28 12:10:19 -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
AIPassandClaude Opus 4.6 09e759a8a4 fix(setup): seed .env template into ~/.secrets/aipass/ on bootstrap (#29)
setup.sh now copies .env.example to ~/.secrets/aipass/.env so new users
get the key template in the right place automatically. Updated .env.example
header to point to the secrets location.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 13:26:23 -07:00
AIPassandClaude Opus 4.6 defd1d3c94 feat(setup): full bootstrap — setup.sh delivers all 15 branches ready to go (#21)
- setup.sh now creates .trinity/, .seedgo/, .ai_mail.local/ for all 15 branches
- Registry includes commons + skills (was 13, now 15)
- spawn: fix registry format mismatch (dict vs list) that crashed every command on fresh install
- spawn: skip existing files during create (never overwrite)
- README: quick start guide rewritten for new users
- commons/skills README: rebuilt from birthright scaffold to real docs
- .env.example added for OpenAI/OpenRouter API keys

Tested end-to-end in Docker: clone → setup.sh → 15 branches → all identity files valid.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 10:47:13 -07:00
AIPassandClaude Opus 4.6 cfd66b3b96 fix(seedgo): audit and fix all 20 standards — checker bugs, doc paths, naming rewrite (#20) (#20)
Full standards audit traced every doc through its checker into the codebase.
All 20 standards rated NEEDS UPDATE. This PR fixes the systemic issues:

Checker bugs fixed:
- encapsulation_check: continue/break bug falsely flagging allowed handlers
- error_handling_check: now accepts canonical prax import (not just shorthand)
- cli_check: import detection now matches aipass.cli prefix (was bare cli.)
- meta_check: AIPass header accepted (was only META), legacy compat preserved

Doc fixes:
- Checker paths corrected in 10 docs (added standards/aipass/ segment)
- naming.md rewritten: marketplace removed, json_handler.py promoted to
  standard, verbs descriptive not prescriptive, module naming section added
- imports.md: both prax import forms now valid (canonical + shorthand)
- architecture/testing/trigger/encapsulation/json_structure/cli_flags/
  log_handler: stale paths, Dev-Pass refs, outdated data fixed

Code fixes:
- parents[4]→parents[3] in 16 handler files (backup/daemon/memory)
- AIPass header marker in all 42 checker .py files
- pyproject.toml: added pyright to dev deps
- Removed agent_mock_branch template (replaced by builder/birthright)
- Removed stale branch_system_prompt.md files (renamed to aipass_local_prompt.md)
- New devpulse local prompt + FPLAN-0010

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:39:36 -08:00
AIOSAIandClaude Opus 4.6 2099adda72 feat(spawn): citizen classes, setup script, gitignore, README rewrite
- Spawn: builder/birthright templates replace agent.template, passport command,
  class-aware create/update (FPLAN-0009)
- setup.sh: one-command install (venv, pip, hooks, registry generation)
- .gitignore: comprehensive coverage for all runtime state (.trinity/,
  .ai_mail.local/, DASHBOARD.local.json, *_json/, logs/, etc.)
- README.md: rewritten for accuracy — removed fictional plugin docs,
  fixed architecture pattern, corrected module statuses
- Hooks moved to global ~/.claude/settings.json (absolute paths)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:06:28 -08:00