Remove Instructions/Feedback + lp_profiles; sync retry, purge, mobile fixes (v0.1.0:104)
Removals (net -570 lines): - Delete the Instructions and Feedback (feature_requests) pages + backend. - Retire lp_profiles + investor_type across server, ingest, and seeds; migration 0008 drops both empty tables (a sanctioned one-off exception to never-hard-delete). 0001's lp_profiles ALTER is removed so a fresh DB doesn't break the migration chain (live DBs already applied it). Fixes: - Email sync: a transient timeout no longer terminally parks a mailbox; the scheduler retries 'retrying' each cycle and re-includes errored accounts on an hourly backoff, so stuck mailboxes self-heal. - Mobile Contacts: page through the full directory (server caps 500/page) -- one fetch silently truncated at 720, hiding people from the list and from search. - Mobile email review: clock icon to set a reminder inline; approval cards show date/time. New: - Admin-only purge of soft-deleted rows (Settings -> Admin; type-to-confirm, refuses any row still linked to live data). Tests: 45/45 (adds test_sync_ready + test_purge_soft_deleted). Reviewer pass applied (NULL reminders.contact_id on contact purge). Bumped to v0.1.0:104.
This commit is contained in:
@@ -113,4 +113,8 @@ ALTER TABLE contacts ADD COLUMN deleted_at TEXT;
|
||||
ALTER TABLE organizations ADD COLUMN deleted_at TEXT;
|
||||
ALTER TABLE opportunities ADD COLUMN deleted_at TEXT;
|
||||
ALTER TABLE communications ADD COLUMN deleted_at TEXT;
|
||||
ALTER TABLE lp_profiles ADD COLUMN deleted_at TEXT;
|
||||
-- lp_profiles ALTER removed (v0.1.0:104): the lp_profiles table is dropped in
|
||||
-- 0008_drop_retired_tables.sql and is no longer created by init_db(), so this
|
||||
-- ALTER would fail "no such table" on a fresh install. Live DBs already applied
|
||||
-- this migration (with the original ALTER) before lp_profiles was dropped, so
|
||||
-- removing the line here only affects fresh DBs — same end state either way.
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
-- 0008_drop_retired_tables.down.sql (manual rollback only — never auto-applied)
|
||||
--
|
||||
-- Recreates the two dropped tables as EMPTY shells, matching the schema that existed
|
||||
-- immediately before 0008 (lp_profiles includes the deleted_at column that migration
|
||||
-- 0001 had added). Data is not restored — both tables were empty when dropped.
|
||||
CREATE TABLE IF NOT EXISTS lp_profiles (
|
||||
id TEXT PRIMARY KEY,
|
||||
contact_id TEXT NOT NULL UNIQUE REFERENCES contacts(id) ON DELETE CASCADE,
|
||||
commitment_amount REAL DEFAULT 0,
|
||||
funded_amount REAL DEFAULT 0,
|
||||
commitment_date TEXT,
|
||||
fund_name TEXT,
|
||||
investor_type TEXT,
|
||||
accredited INTEGER DEFAULT 0,
|
||||
legal_docs_signed INTEGER DEFAULT 0,
|
||||
signed_date TEXT,
|
||||
wire_received INTEGER DEFAULT 0,
|
||||
wire_date TEXT,
|
||||
k1_sent INTEGER DEFAULT 0,
|
||||
preferred_communication TEXT DEFAULT 'email',
|
||||
notes TEXT,
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
updated_at TEXT DEFAULT (datetime('now')),
|
||||
deleted_at TEXT
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_lp_profiles_contact ON lp_profiles(contact_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS feature_requests (
|
||||
id TEXT PRIMARY KEY,
|
||||
title TEXT NOT NULL,
|
||||
description TEXT,
|
||||
page TEXT,
|
||||
category TEXT DEFAULT 'general',
|
||||
priority TEXT DEFAULT 'medium',
|
||||
status TEXT DEFAULT 'new',
|
||||
requested_by TEXT,
|
||||
requested_by_user_id TEXT REFERENCES users(id),
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
updated_at TEXT DEFAULT (datetime('now'))
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_feature_requests_status ON feature_requests(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_feature_requests_created_at ON feature_requests(created_at);
|
||||
@@ -0,0 +1,15 @@
|
||||
-- 0008_drop_retired_tables.sql (v0.1.0:104)
|
||||
--
|
||||
-- ONE-OFF DESTRUCTIVE EXCEPTION to the never-hard-delete rule, explicitly approved.
|
||||
-- Both tables are EMPTY and fully removed from the application code:
|
||||
-- * lp_profiles — the legacy single-fund LP model, retired v0.1.0:78; the
|
||||
-- fundraising_* grid is the canonical commitment record now.
|
||||
-- * feature_requests — backed the in-app Feedback page, which was removed.
|
||||
--
|
||||
-- The never-hard-delete policy STILL STANDS for all real CRM and thesis data — this
|
||||
-- is a deliberate, documented exception for two empty, retired tables so they don't
|
||||
-- linger as dead schema. init_db() no longer creates either table, and migration
|
||||
-- 0001's lp_profiles ALTER was removed, so a fresh DB never creates them and this
|
||||
-- DROP is a harmless no-op there; on the live box it removes the existing empties.
|
||||
DROP TABLE IF EXISTS lp_profiles;
|
||||
DROP TABLE IF EXISTS feature_requests;
|
||||
Reference in New Issue
Block a user