Files
docs/.claude/agent-memory/ts-node-backend-engineer/project_processor.md
T

24 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: Processor Service
description: processor service scaffold, conventions, and known test patterns learned during Phase 1 tasks 1.11.4
type: project
---
Phase 1 tasks 1.11.4 landed. Key facts for tasks 1.51.11:
**Architecture divergence from tcp-ingestion:**
- ESLint `import/no-restricted-paths` zone: `src/core/` cannot import `src/domain/` (not `src/adapters/` like tcp-ingestion). `src/domain/` is preemptive for Phase 2.
- `INSTANCE_ID` defaults to `'processor-1'` (fixed string), not a random UUID prefix. Rationale: deterministic names are better for container environments.
- `REDIS_CONSUMER_NAME` defaults to `INSTANCE_ID` at runtime (after schema parse), not as a zod schema default — because it depends on `INSTANCE_ID` value.
**Test patterns:**
- `connectWithRetry` tests: use `maxAttempts=1` for the "calls process.exit(1)" case to avoid fake-timer unhandled rejection noise. The noise occurs when a backoff `setTimeout` resolves after the outer promise has already thrown via process.exit mock.
- Migration runner tests: `isMigrationApplied` calls `pool.query` (pool-level, not through client). Handlers on client mock do NOT affect EXISTS checks.
- `vi.mock('node:fs/promises')` pattern used in migrate.test.ts to isolate filesystem reads.
**Why:**
Phase 1 throughput pipeline. Tasks 1.51.8 add consumer/writer/state on top of this foundation.
**How to apply:**
When implementing 1.5 (Redis consumer), 1.6 (device state), 1.7 (position writer), 1.8 (main wiring) — all imports must use `.js` extension, no path aliases, strict ESM. The `connectWithRetry` pattern from pool.ts should be mirrored for ioredis in consumer.ts.