This commit implements the daemon-only architecture where all query
operations (functions, strings, decompile, memory, summary, xrefs)
must go through the persistent daemon instead of spawning new Ghidra
processes per command.
Key changes:
- Wire IPC client in main.rs to route queries through daemon
- Add requires_daemon() to determine which commands need daemon
- Add execute_via_daemon() to translate CLI commands to IPC calls
- Deprecate HeadlessExecutor with migration notice
- Fix filter.pest hex number parsing order (hex before number)
- Add #[allow(dead_code)] to infrastructure modules for future use
- Mark E2E tests requiring daemon as #[ignore]
Architecture benefits:
- Faster queries: Ghidra stays loaded, no 5-30s startup per command
- Simpler code: One execution path instead of two
- Better UX: Clear daemon requirement with helpful error messages
When daemon is not running, users see:
Error: This command requires the daemon to be running.
Start the daemon with: ghidra daemon start --project <name>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Key changes:
- Remove HeadlessExecutor as execution path
- All query operations require daemon
- Wire IPC layer (already implemented) as primary client
- 9 milestones for complete implementation
Rationale: Binary analysis is slow enough that persistent
daemon is always preferable to per-command process spawning.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add docs/plan-prod.md with comprehensive release plan
- Include sample_binary test fixture
- Update e2e tests
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>