Retire contacts.contact_type; derive Contacts status from the grid (v0.1.0:106)

The Investors/Prospects distinction is now derived live from the canonical
grid (contact_grid_signals -> committed/pipeline_stage), not the mechanically
set contact_type column:

- Desktop Contacts: drop the Investors/Prospects tabs + TYPE badge; show a
  derived Status (existing-LP badge + pipeline stage chip).
- Dashboard: repoint Total LPs / Prospects onto fundraising_investors entities
  (committed>0 vs $0, graveyard + blank-row placeholder excluded); fix a
  total_contacts soft-delete leak.
- Stop reading/writing contact_type across the create/update/import/sync paths.
  The column is left inert in place; a physical drop is deferred to a later
  signed-off table-rebuild migration (SQLite no-drop-column; contacts is
  FK-referenced) -- same retire-then-drop path lp_profiles took.
This commit is contained in:
Keysat
2026-06-20 22:09:02 -05:00
parent b23c48bf7a
commit 05f15b9197
6 changed files with 105 additions and 81 deletions
+15
View File
@@ -0,0 +1,15 @@
import { VersionInfo } from '@start9labs/start-sdk'
// v0.1.0:106 — Retire contacts.contact_type (logical). The Investors/Prospects distinction is now
// derived live from the canonical grid (contact_grid_signals → committed/pipeline_stage): the desktop
// Contacts tabs + TYPE badge are replaced by a derived Status (existing-LP + pipeline stage), and the
// dashboard "Total LPs"/"Prospects" counts are repointed onto fundraising_investors entities. The
// column is left physically in place but inert (no reader/writer); a physical DROP is deferred to a
// later signed-off table-rebuild migration. No schema change in this release.
export const v_0_1_0_106 = VersionInfo.of({
version: '0.1.0:106',
releaseNotes: {
en_US: 'Retire the legacy contact type: Contacts now shows grid-derived status (existing LP + pipeline stage) and the dashboard LP/prospect counts come from the fundraising grid.',
},
migrations: { up: async () => {}, down: async () => {} },
})