M6: POST /api/internal/resolve-utility endpoint
completedSpec: TextureHQ/mono specs/relay/commongrid-nisc-matcher.md v1.5 task M6. Wrap fn_resolve_utility_by_name in a scoped internal HTTP endpoint so Lyra (and future internal consumers) can call it without direct DB access. Auth: internal_api_consumer API key class (existing). Request body: {name, state?, domain?}. Response: contract JSON {eia_id, confidence, match_source, candidates[top 5], resolver_version}. Rate-limit: default internal_api_consumer class (bump later per Mx-D if needed). Writes to utility_resolver_cache are handled inside the function (idempotent). Unblocks Lyra N6 (NISC company-name to eia_id backfill, ~4k names).
Event Timeline
created
status_change
queued → in_progress
failed
lease expired — re-queued for retry
in_progress → queued
progress
PR #231 opened: https://github.com/TextureHQ/commongrid/pull/231. Local build/test/lint/openapi all green (168 tests pass incl. 12 new). Monitoring CI.
status_change
queued → in_progress
failed
lease expired — re-queued for retry
in_progress → queued
status_change
queued → completed
completed
M6 shipped. commongrid PR #231 merged (commit dcbb8dd9). All 7 CI checks green (lint/test/build/openapi/claude-review/Vercel). Mono spec update PR: TextureHQ/mono#10218 (moves M6 Next Up → Shipped, adds M6.1 domain-param follow-up). Endpoint: POST /api/internal/resolve-utility, scope-gated on internal:resolve, Cache-Control: no-store, not in public OpenAPI.