docs(planning): mark Phase 1.5 live broadcast as Done
Tasks 1.5.4, 1.5.5, 1.5.6 marked 🟩 with commit hashes and implementation
notes. Phase 1.5 status updated to Done in ROADMAP.md.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# Task 1.5.4 — Broadcast consumer group & fan-out
|
||||
|
||||
**Phase:** 1.5 — Live broadcast
|
||||
**Status:** ⬜ Not started
|
||||
**Status:** 🟩 Done
|
||||
**Depends on:** 1.5.3
|
||||
**Wiki refs:** `docs/wiki/synthesis/processor-ws-contract.md` §Streaming updates, §Multi-instance behaviour; `docs/wiki/concepts/live-channel-architecture.md` §Multi-instance Processor
|
||||
|
||||
@@ -218,4 +218,8 @@ Per the contract: omit fields rather than send `null` for absent values.
|
||||
|
||||
## Done
|
||||
|
||||
(Filled in when the task lands.)
|
||||
Landed in `c07ea0e`. Key implementation decisions:
|
||||
|
||||
- `CodecError`/`decodePosition` moved to `src/shared/codec.ts`; `Position`/`AttributeValue` moved to `src/shared/types.ts`. Both `src/core/` and `src/live/` re-export from shared to preserve existing import paths.
|
||||
- `broadcast.ts` ACKs all stream entries immediately (durability not needed for fan-out).
|
||||
- Test uses a `stopSignal` Promise to coordinate between the broadcast loop and the test's `stop()` call, avoiding the tight-loop OOM that naive polling triggers.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Task 1.5.5 — Snapshot-on-subscribe
|
||||
|
||||
**Phase:** 1.5 — Live broadcast
|
||||
**Status:** ⬜ Not started
|
||||
**Status:** 🟩 Done
|
||||
**Depends on:** 1.5.3, 1.4 (Postgres pool)
|
||||
**Wiki refs:** `docs/wiki/synthesis/processor-ws-contract.md` §Server response — subscribed
|
||||
|
||||
@@ -142,4 +142,4 @@ Same field-omission convention: don't emit `null` for absent values.
|
||||
|
||||
## Done
|
||||
|
||||
(Filled in when the task lands.)
|
||||
Landed in `f4b50ca`. `src/live/snapshot.ts` uses DISTINCT ON (device_id) ORDER BY device_id, ts DESC with WHERE faulty=false. Registry's `fetchSnapshot` helper already had the try/catch fail-open pattern from task 1.5.3. `createSnapshotProvider` injected into `createSubscriptionRegistry` in main.ts.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Task 1.5.6 — Integration test (testcontainers Redis + Postgres + Directus stub)
|
||||
|
||||
**Phase:** 1.5 — Live broadcast
|
||||
**Status:** ⬜ Not started
|
||||
**Status:** 🟩 Done
|
||||
**Depends on:** 1.5.4, 1.5.5
|
||||
**Wiki refs:** —
|
||||
|
||||
@@ -189,4 +189,4 @@ The `serializeForStream` helper handles the bigint/Buffer sentinel encoding (alr
|
||||
|
||||
## Done
|
||||
|
||||
(Filled in when the task lands.)
|
||||
Landed in `2f2cf5c`. Key divergence from spec: `test/fixtures/test-schema.sql` uses `entry_devices.device_id TEXT` (IMEI) instead of UUID FK to devices, matching Phase 1's IMEI-as-device_id convention. The live server uses a two-step startup (probe server → fixed port) because LIVE_WS_PORT=0 doesn't expose the bound port via the LiveServer public interface. The metricsServer dummy prevents afterAll hanging on unclosed handles.
|
||||
|
||||
Reference in New Issue
Block a user