feat(parties): phase 0 prerequisites, pg_trgm and golden-set draw (#2157)

* feat(parties): phase 0 prerequisites, pg_trgm and golden-set draw

Phase 0 of the Kontakter plan: make the counterparty resolver measurable
before building it.

- Migration 20260902120000 enables pg_trgm (trigram blocking of
  counterparty keys) and drops the two context-graph tables from
  20260706193007 whose feature code was never merged and which prod no
  longer has, so fresh replays agree with prod.
- tests/pg/parties-phase0.pg.test.ts pins the extension, a sanity check on
  trigram ranking, and the absence of the graph tables.
- scripts/parties/draw-golden-set.sql is the reproducible, read-only draw
  of the 200-key labelling sample (three strata, md5-ordered) and the
  payee-identity base rate. The drawn rows contain customer voucher text
  and are kept in gitignored dev_docs, never in this public repo.
- scripts/parties/README.md records the label vocabulary and the numbers
  measured on prod on 2026-09-02.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix(archive): drop the two context-graph tables from the archive contract

The migration in this PR removes graph_counterparties and
graph_transaction_counterparties, so the full-archive contract must stop
classifying them: tests/schema/no-phantom-columns.test.ts asserts that
every classified table exists in the migration replay, and the live-DB
twin in tests/pg/full-archive-coverage.pg.test.ts asserts the same against
information_schema.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-09-02 14:33:45 +02:00
committed by GitHub
co-authored by Claude Fable 5.1 Jakob Wennberg
parent f266c386f3
commit 61a76b1669
6 changed files with 191 additions and 2 deletions
@@ -0,0 +1,19 @@
-- Parties, phase 0: prerequisites for the counterparty resolver.
--
-- 1. pg_trgm for trigram blocking of counterparty keys. Candidate generation
-- runs before any model call and must be cheap; trigram similarity over
-- normalised voucher and bank text is the first stage. Installed in the
-- `extensions` schema like the other Supabase extensions in this repo.
--
-- 2. Drop the two context-graph tables from 20260706193007. Their feature
-- code (lib/graph/) was never merged and the tables were dropped on prod
-- during the context-graph revert, so every fresh replay (CI, preview
-- branches, local stacks) has been creating two tables prod does not have.
-- The parties layer keys the same identity (company_id + normalised name)
-- and must not coexist with a second, divergent substrate. Child first:
-- graph_transaction_counterparties references graph_counterparties.
CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA extensions;
DROP TABLE IF EXISTS public.graph_transaction_counterparties;
DROP TABLE IF EXISTS public.graph_counterparties;