Proper fixes, not lazy bypasses:
- Created CLAUDE.md from builder template (architecture compliance)
- Added handle_command() + help/introspection gates to bridge.py and
registry.py (modules + introspection compliance)
- Removed reset() from registry.py — tests use monkeypatch instead
- Rewrote test_integrations.py to use monkeypatch for _loaded reset
- Added 3 architecture bypasses for integration driver test fixtures
(apps/integrations/broken_driver, stress_test, no_register) — genuine
architectural constraint per DPLAN-0133, loaded via importlib
- Added 1 unused_function bypass for fetch_contracts/call_contract in
integrations_manager.py — test API hooks required by encapsulation
standard (tests must go through module layer, not import handlers)
Seedgo: 100% overall, 34/34 at 100%. 306 tests, zero regressions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ai_mail moved deliver_email_to_branch from modules.email to
handlers.email.delivery. The modules-level re-export is now in
email_send.py. Updated 3 source files + 4 test mock paths.
367 tests passing, seedgo 100%.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix check_and_rollover → run_rollover import in startup.py (type error)
- Remove dead _is_duplicate_error() from log_watcher.py + 3 tests (unused_function)
- Add logger.warning on silent catch in watchers/log_watcher.py (silent_catch)
- Update README date to 2026-04-22 (readme)
- All 24 seedgo categories at 100%, 367 tests passing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds physical blockers so agents cannot bypass the correct delivery paths:
1. pre_edit_gate.py v1.3.0 (.claude/hooks/) — two new Track E rules:
- Rule 1: block any write to *.ai_mail.local/inbox.json (use drone @ai_mail email)
- Rule 2: block cross-branch writes unless CWD branch is in TRUSTED_CROSS_WRITERS
2. permissions.py (seedgo/apps/modules/) — single source of truth:
- TRUSTED_CROSS_WRITERS = ("devpulse", "seedgo", "spawn")
- is_trusted_caller(name), identify_caller(cwd)
3. drone auth.py — ALLOWED_CALLERS now imported from permissions.py
(extended from ["devpulse"] to all three trusted cross-writers)
4. ai_mail delivery.py — deliver_to_inbox_file() helper added:
- Single canonical path for direct-path inbox writes, always fires notify-send
- reply.py _deliver_via_reply_path() backdoor routes through this helper
5. inbox_audit.py (seedgo/apps/modules/) — drone @seedgo audit inbox-ids:
- Scans all inbox.json files for non-8-hex message ids
- Alerts with drone @ai_mail email command when violations found
6. test_hooks_track_e.py — 26 tests, all passing (359 total in suite)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- hooks.py v1.1.0: new test and list subcommands
- hooks_ext.py: cmd_hooks_test (pytest per test file, Rich table) +
cmd_hooks_list (reads ~/.claude/settings.json + .claude/settings.json,
shows all wired hooks with version, event, matcher, exists status)
- Version headers added to notification_sound.py, stop_sound.py,
tool_use_sound.py (all 10 hooks now have version headers)
- test_hooks_utility.py: 14 smoke tests for 7 previously uncovered hooks
(branch_prompt_loader, email_notification, identity_injector, pre_compact,
notification_sound, stop_sound, tool_use_sound)
- test_hooks_track_b.py: 7 tests for hooks test + hooks list subcommands
- 443 total tests passing (422 → 443)
Note: drone @git pr scope bug (DPLAN-0140) hit again — raw git/gh used.
Adds an observational probe harness for every Claude Code hook event type.
Used to verify hook wiring, scaffold new hooks, and answer Q12 (subagent
hook propagation / env-var matrix).
## What ships
**7 probe scripts** at `.claude/hooks/probes/`:
- probe_pre_tool_use.py, probe_post_tool_use.py, probe_user_prompt_submit.py
- probe_subagent_stop.py, probe_pre_compact.py, probe_stop.py, probe_notification.py
Each probe: reads stdin JSON, appends one entry to last_ping.jsonl
(APPEND mode, never overwrites), exits 0 always. Fields recorded:
event, tool, cwd, agent_id, timestamp, script_elapsed_ms, cli_version,
env_has_claude_project_dir, env_has_aipass_home.
Pure stdlib, no aipass imports. Silent fail on any exception.
OPT-IN — not auto-wired in settings.json (each probe docstring has
the settings.json snippet to enable it).
**drone @seedgo hooks probe** — new seedgo module (apps/modules/hooks.py):
- No flags: reads last_ping.jsonl, prints Rich [PROBE] table of recent entries
- --subagent: spawns claude -p headless, reads probe log, reports whether
PostToolUse / SubagentStop fired (definitive Q12 data for headless mode)
- --matrix: analyzes last_ping.jsonl by event type, reports env var
propagation patterns, writes Q12_findings_2026-04-20.md
**Tests**: 69 new tests in tests/test_hooks_probe.py covering stdin parse,
output shape, malformed input resilience, and module dispatch.
402 total tests pass.
**README.md** at .claude/hooks/probes/README.md — enable instructions,
example output, flag reference.
last_ping.jsonl added to .gitignore (live log, not source).