mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-28 06:22:45 -08:00
2.0 KiB
2.0 KiB
IPC + Runtime Contracts
Core Surfaces
src/shared/ipc/contracts.ts: canonical channel names and payload contractssrc/shared/ipc/validators.ts: runtime payload validation/parsingsrc/preload.ts: renderer bridge to approved IPC endpointssrc/main/ipc-runtime.ts: main-process registration and handler routingsrc/core/services/ipc.ts: service-level invoke handling and guardrailssrc/core/services/anki-jimaku-ipc.ts: integration-specific IPC boundarysrc/main/cli-runtime.ts: CLI/runtime command boundary
Contract Rules
- Use shared contract constants; avoid ad-hoc literal channel strings.
- Validate
invokepayloads before domain/service logic. - Return structured failures (
{ ok: false, error }) where possible. - Keep payloads narrow and explicit.
- Update contracts, validators, preload types, and handlers in the same change when shape changes.
Add a New IPC Action
- Add channel in
src/shared/ipc/contracts.ts. - Add or extend validator in
src/shared/ipc/validators.ts. - Expose typed bridge method in
src/preload.ts. - Register handler in
src/main/ipc-runtime.ts(or relevant domain runtime module). - Add tests for valid and malformed payload cases in
src/core/services/*. - Update renderer tests when behavior or state transitions change.
Runtime State Notes
- Prefer runtime/domain composition via
src/main/runtime/composers/*andsrc/main/runtime/domains/*. - Route shared mutable state updates through transition helpers in
src/main/state.tsfor migrated domains. - Keep IPC handlers thin; avoid embedding business logic in transport wiring.
Troubleshooting
- Unknown payload in handler: confirm validator is applied before handler/service call.
- Renderer invoke fails: verify preload bridge method and channel registration.
- Contract drift: compare shared contract, validator, preload bridge, and main handler signatures together.