2afed210cb
Structural fix for the duplicate-people class of bug: instead of matching a grid contact "pill" to a contacts row heuristically by name/email (which drifted and caused the 1406 double-count), link them by id. Backend: - Migration 0004: fundraising_contacts.contact_id (additive, nullable, logical FK to contacts(id)) + index. Paired down migration. - sync_fundraising_relational now stores the id that _upsert_contact_from_fundraising already returns, so every grid contact carries its contacts-table id. - _backfill_grid_contact_ids: one-time, idempotent backfill on startup (re-runs the grid sync once if any row lacks contact_id), so existing data links immediately. - entity_resolution: grid pass prefers the explicit contact_id link (match_kind 'grid_link') over heuristic email / name+investor, guarded by a PRAGMA check so older DBs without the column still work. Frontend: - Fundraising grid "+ Row" -> "+ Investor" (clear, single investor entry point). - Contacts page: the "+ Add Contact" trigger is replaced by a pointer to the grid; the page is now a read/search/edit view (ContactDetailPanel still edits all fields). New people are added from the grid. No contact data is removed. Tests: backend/ingest/test_entity_resolution.py extended (explicit-link case, 11/11) and a new backend/test_grid_contact_link.py integration test (init_db applies 0004, sync populates contact_id to the right contact, re-sync is idempotent). py_compile + frontend html.parser clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
27 lines
1.6 KiB
TypeScript
27 lines
1.6 KiB
TypeScript
// Informational constants shared across the startos/ modules.
|
|
// The authoritative id, title and version for the package come
|
|
// from manifest/index.ts (id, title) and versions/ (version).
|
|
export const PACKAGE_ID = 'ten-database'
|
|
export const PACKAGE_TITLE = 'Ten31 Database'
|
|
// ExVer form of the current 0.4 wrapper release (upstream 0.1.0, wrapper rev 44).
|
|
// * 0.3.5 wrapper: 0.1.0.38 (legacy, aarch64)
|
|
// * First 0.4: 0.1.0:39 (shipped seed snapshot for migration)
|
|
// * Cleanup: 0.1.0:40 (seed removed + multi-threaded server + abuser auto-ban)
|
|
// * 0.1.0:41 (frontend persists auth across refreshes)
|
|
// * 0.1.0:42 (Gmail integration) / 0.1.0:43 (Gmail POST-body hotfix)
|
|
// * 0.1.0:44 (Phase-0 ingest + MCP server in image; build-index action)
|
|
// * 0.1.0:45 (Phase-1 thesis system; dual approval; merge review; in-app index)
|
|
// * 0.1.0:46 (packaging fix: ship full backend so migrations run + endpoints work)
|
|
// * 0.1.0:47 (soft-delete instead of hard-delete; source-count diagnostics)
|
|
// * 0.1.0:48 (entity model: investors vs people; fixes double-count)
|
|
// * 0.1.0:49 (Architect: Claude thesis generation + Thesis Workshop screen)
|
|
// * 0.1.0:50 (Set Anthropic API Key UI action — no terminal needed)
|
|
// * 0.1.0:51 (entity-resolution fix: people double-count + duplicate queue)
|
|
// * Current: 0.1.0:52 (grid/contacts unification: contact_id link + grid as front door)
|
|
export const PACKAGE_VERSION = '0.1.0:52'
|
|
|
|
export const DATA_MOUNT_PATH = '/data'
|
|
export const WEB_PORT = 8080
|
|
export const IMAGE_ID = 'main'
|
|
export const VOLUME_ID = 'main'
|