ackDB

Person/contact integrity sweep

Read-only, on-demand health report over the identity graph (#472). Four wound classes, each with an exact count and a sample capped at 25 rows:

  • unregisteredEdgeEmails — contacts whose email is not a person key AND whose person has NO linkedin_url anchor. Should be 0: such a person is invisible to email-keyed ingest, and the next push mints a duplicate human. Heal with npm run backfill-email-keys. Note (#575): linkedin-anchored contacts whose email is intentionally column-only are NOT counted — email is a fallback anchor, so their missing email key is by design, and the backfill deliberately skips them.
  • keylessPersons — active persons with zero durable keys; reachable only by legacy entity-scoped adoption, never by global resolution.
  • sameNameSameCompany — the same normalized name held by DIFFERENT persons at one company: the visible tell of a split human. A review list, not a bug list — two real people can share a name.
  • domainMismatchEdges — active contacts whose email domain (non-freemail) matches none of their company's domain links; candidates for POST /contacts/{contactId}/move.
get/api/v1/ackdb/persons/integrity

Request

  • Base URL
    http://localhost:3009
  • Auth
    HTTP bearer

Response

{ data: { unregisteredEdgeEmails, keylessPersons, sameNameSameCompany, domainMismatchEdges } }, each { count, sample[] }.

dataunknown required

Changes

No recorded changes to this operation across all 1 revision of this API.