← back to Unclaimed Property Platform
docs: ledger Cycle-7 record (suppression path); TK-10097
afbc9ad22144c58ddf3ca637df137cf6b9759ee6 · 2026-08-01 20:14:17 -0700 · Steve Abrams
Files touched
Diff
commit afbc9ad22144c58ddf3ca637df137cf6b9759ee6
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sat Aug 1 20:14:17 2026 -0700
docs: ledger Cycle-7 record (suppression path); TK-10097
---
docs/LOOP-LEDGER.md | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/docs/LOOP-LEDGER.md b/docs/LOOP-LEDGER.md
index 12d3657..90aaf48 100644
--- a/docs/LOOP-LEDGER.md
+++ b/docs/LOOP-LEDGER.md
@@ -90,8 +90,22 @@ to one alnum key; `masked_search` matches `REPLACE(owner_name_normalized,' ','')
collapsed query. "Oneil" now finds "O'Neil"; no schema change; normalize_text untouched (masks/
blocking/phonetic unchanged); empty-query guard preserved. `tests/test_cycle7_recall.py`.
-## Cycle 7 — planned (DTD to select at next fire)
-- Double Metaphone phonetic upgrade for international name recall (fairness; Phase 2).
+## Cycle 7 — COMPLETE (commit 3ca22d7; 8/8 suites green)
+**DTD re-decision:** chose the state SUPPRESSION path over Double Metaphone — the latter is
+high-churn (ripples through matcher scoring + blocking + 3 suites' disposition asserts) and
+deserves a dedicated cycle; suppression is contained, higher value/risk, and closed a real gap.
+**Landed:** `suppress_property`/`reinstate_property` flip `search_document_state.is_suppressed`
+(record leaves/returns to anonymous search immediately; masked_search already filtered it) while
+property+owner+version history are retained; every action writes an immutable audit_event;
+`audit_trail()` reads it; unknown record -> False. `tests/test_cycle8_suppression.py`.
+
+## Cycle 8 — planned (DTD to select at next fire)
+- Double Metaphone phonetic upgrade for international name recall (needs a dedicated cycle:
+ add as a SEPARATE blocking key + feature, re-tune weights, re-verify all suites).
+- Batch-retry for partial C1 failure (idempotent re-run from last-good offset).
+- SQLite → Postgres persistence scaffold (thread-safe pool — enables threaded server).
+- FastAPI reference: wire search_api.py to SearchService + OpenAPI (needs deps; verify in venv).
+- Suppression latency METRIC + a suppression feed adapter (batch state takedown instructions).
- SQLite → Postgres persistence scaffold (thread-safe pool — enables the threaded server).
- Batch-retry for partial C1 failure (idempotent re-run from last-good offset).
- FastAPI reference: wire search_api.py to SearchService + OpenAPI (needs deps; verify in venv).
← 3ca22d7 Cycle 7: state suppression / reinstatement path (near-real-t
·
back to Unclaimed Property Platform
·
Cycle 8: concrete SqliteClaimRepository — claims subsystem r c3d81a0 →