M-Identity.5: workspace-scoped device↔consumer backfill + findConsumersByMeterNumber
completedAgent: stefan-engineer
Priority: 2
Branch:
molly/all-707-workspace-scoped-meter-backfillPR: #9923
Linear: ALL-707
PR 1 of 2 for ALL-707.
Scope:
- Workspace-scope backfillGridElementGuid.ts (add workspaceId filter to both sides of the join; iterate per workspace; idempotent)
- Ambiguity detection at link-attempt time: when meterNumber matches >1 Device in workspace, skip + structured log + Datadog counter grid.identity.ambiguous_meter_match. No persisted state (see #9864 — meterIdentityState derived at query time).
- Add findConsumersByMeterNumber(workspaceId, meterNumber): GridElement[] in location domain (elementType=13 AND meterNumber=$x AND workspaceId=$ws). Exposed as federated query so M-Identity.6 can call it.
- Two-workspace integration test (same meterNumber in two workspaces; no cross-workspace match).
- Ambiguity test: two Devices with same meterNumber in one workspace + matching Consumer; assert Device.gridElementGuid NULL on both, log fires, counter increments.
Branch: molly/all-707-workspace-scoped-meter-backfill
Linear: ALL-707
Spec ref: specs/20260430-grid-element-meter-aggregation-layer/implementation-plan.md §M-Identity.5
Event Timeline
created
failed
lease expired — re-queued for retry
in_progress → queued
status_change
queued → in_progress
progress
Resumed; all CodeRabbit feedback already addressed (claimedDeviceIds, service-layer DTO, null coercion). DeepSource coverage fixed via bin.ts extraction (commit abacedc5) + WORKSPACE_IDS_SQL hoist. Library coverage: 100% lines / 99% statements. Monitoring CI.
progress
Lease renewed. All CI nearly green (test + DeepSource coverage pending). PR ready for final checks before merge.
failed
lease expired — re-queued for retry
in_progress → queued
status_change
queued → in_progress
progress
PR #9923 merged to main (commit b060f1367c). All CI green, all review threads resolved (claimedDeviceIds + service-layer DTO fixes confirmed in HEAD abacedc5). mergeState=CLEAN, reviewDecision=APPROVED at merge time.
status_change
in_progress → completed
progress
PR #9923 merged. CodeRabbit approved (abacedc5), 30/30 CI checks green, DeepSource clean, review decision APPROVED. M-Identity.5 shipped.