Made/MADE-ID
Internal
Stage ④ · Human-in-the-loop

Where a person confirms the uncertain — /made-id-review

Where it sits: the custodian (stage ③) never commits an uncertain identity link on its own — it writes a proposal. This stage is what a human does with those proposals: six review surfaces where a reviewer confirms a match, merges a duplicate, or mints a net-new company. Confirming is what turns a proposal into a canonical link (stage ⑤).

1,919
human decisions recorded · live today
a click
is what commits — never the agent
≥0.995
bulk-acceptable band (still a click)
never a delete
losers land in a census, re-pointed on merge

What routes to a human, and why

The scorer’s disposition decides who acts. Anything short of near-certain, or anything ambiguous, is a person’s call — the agent will not guess between two plausible companies.

DispositionWhenWho acts
REVIEWtier is None, or score < 0.50, or not the top candidate, or >1 candidate clears the floor (ambiguous)Human — on the relevant review tab
AUTO_CONFIRMtop candidate is deterministic tier AND score ≥ 0.995Marks the proposal bulk-acceptable — a human still clicks (band-scoped accept)
PROPOSEone clear candidate below the auto floorHuman confirms the single proposal
NEW_CANONICALno candidate at allHuman approves a mint (New Accounts)

The rule that never moves

Propose-only. The only fully-automatic write in the whole system is Joe’s in-DB ≥0.999 auto-merge. Everything else — every match, every mint, every merge below 0.999 — waits for a click. Nothing is ever silently deleted.

This loop is already running — it is not a proposal

er_decisions holds 1,919 recorded human decisions, the most recent on 2026-09-09 09:04 UTC. Account proposals were written the same morning at 08:30. Whatever is built next is an improvement to a working review process, not its introduction — which is why the plan preserves the live path rather than replacing it wholesale.

The queue these reviewers are facing

1,941 Salesforce accounts have no MADE-ID match (60% of 3,209) and 7,244 HubSpot contacts have no derived company (41% of 17,843). That is the real backlog — not the 6,694 rows sitting in the two abandoned match queues, which have had nothing enqueued since May/July 2026 and are stale inventory to retire.

Drain rate is therefore bounded by reviewer capacity, not by matching capability. How much reviewer time exists per week is one of the eight open questions for Made — see the plan (M-Q4). It is the single hardest ceiling on throughput, and no amount of engineering moves it.

The six review surfaces

/made-id-review

Open: which of these is the single canonical path

Six surfaces are documented here, and a separate review bundle exists in the repository with its own proposal tables, confidence bands and rejection semantics. A file existing is not proof it is deployed, and two contact-proposal producers are still writing side by side. Before new review UI is built, one active path per operation gets chosen — preserving the live path that carries the 1,919 real decisions, and porting the better ideas into it rather than swapping wholesale.

Each tab is served by an Edge Function reading a specific queue/view; the reviewer’s action calls a specific RPC. This is the exact wiring.

TabWhat the human resolvesEdge Function → readsAction → RPC
CoverageSystem health — feed freshness, resolver activity, queue depth; clear the easy exact matchesdirect → v_er_key_coverage, v_er_loop_healthauto_confirm_exact_matches
DuplicatesTwo canonical companies that are one firm → merge onto the senior made_idmade-id-reviewv_match_queue_reviewmade_id_apply_review (merge / keep_separate / needs_review)
CRM MatchingAccount proposals: a SFDC/HubSpot account → an existing company, or a net-newmade-id-census-reviewer_identity_proposalsapply_er_identity_proposal (assign_external_id / create_canonical)
ContactsContact → identity + contact → account rollup (banded, bulk-acceptable)made-id-contact-reviewv_made_id_contact_match_queuemade_id_contact_apply_review (merged / rejected / accepted)
New AccountsMint a net-new company (human-approved) → MADE-ID + enrichmentmade-id-new-accountsv_orphan_candidatescreate_company_from_orphan, decide_orphan_candidate, /enrich, /classify
CampaignsSFDC ↔ HubSpot campaign crosswalkmade-id-campaign-reviewcampaign_dim_proposalsapply_campaign_dim_proposal

Merge — collapsing two records into one identity

When the Duplicates tab shows two canonical companies that are really one firm, the reviewer confirms a merge. The mechanic is deterministic and reversible.

1 · Pick the senior

Earliest made_id_assigned_at (NULLs last; tiebreak created_at) wins.

2 · Loser inherits

The loser takes the survivor’s made_id at confidence 1.0.

3 · Re-point everything

Every er_account_census + er_identity_map row is re-pointed loser → survivor.

4 · Learn + audit

The loser’s name becomes a learned alias; er_decisions records it.

Identity-only today (a known gap)

Both physical companies rows remain — the merge re-points identity but there is no tombstone / FK re-point yet (preview_company_merge is read-only). A true physical merge (tombstone + merged_into_company_id) is on the roadmap; the anchor column already exists.

Mint — creating a canonical record for a net-new firm

When a CRM row matches nothing, it becomes an orphan candidate; a human approves the mint on the New Accounts tab, and the record is enriched and given a MADE-ID.

Orphan

No canonical match → er_orphan_candidates

Triage + Hub match

bc_hub match check; classify primary_category

Enrich

Clay firmographics ($0 if Hub-matched)

Human approve

create_company_from_orphan

MADE-ID

new companies row + made_id (stage ⑤)

Creation stages tracked: queued → clay_sent → clay_enriched → segmented → seeding → created (or needs_attention / error). Nothing is minted without a human decision.

Bulk-accept — clearing the near-certain fast

Not every proposal needs a one-by-one decision. Proposals the scorer marked AUTO_CONFIRM (deterministic tier, ≥0.995, no rejection conflict) are bulk-acceptable: a reviewer accepts a whole band at once. This is how the one-time blitz drains — the near-certain by band, the genuinely ambiguous one at a time.

BandReviewer action
Deterministic ≥0.995Band-scoped bulk-accept (made_id_bulk_accept_deterministic) — a single click clears many
Strong / single candidateReviewed individually — quick confirm/reject
Ambiguous / conflictAlways one at a time — the reviewer chooses; rejections are remembered (never re-proposed)

Rejections compound

Every rejection writes to er_negative_decisions so the same wrong pair is never proposed again — the reviewer’s effort makes the next run cheaper (see the Custodian’s Memory tab).

Wiring from wiki/systems/made-id-spine/madeid-custodian-deep-dive.md §5 (review surfaces) + §2c (disposition) + §7 (merge) + the New Accounts creation-stage vocab; live 2026-09-08/09. Companion: stage ③ Custodian, stage ⑤ Canonical. Internal — not for external share.