# TIP Verification Truth Model And Evidence Ledger — 2026-05-09 ## Scope - Make TIP verification explainable instead of simply green/red. - Preserve the difference between: - a true 1:1 competitor match - verified absence of a valid public match - ambiguous candidates - unresolved research - Start an append-only evidence ledger for source-backed verification decisions. ## Implemented - Added migration `sql/103-verification-evidence-and-competitor-status.sql`. - Added product-level competitor status: - `matched` - `no_valid_match` - `needs_research` - `ambiguous` - `unknown` - Added no-match fields: - `no_match_verified_at` - `no_match_reason` - Added `transceiver_verification_evidence`. - `price` - `image` - `details` - `competitor_match` - `competitor_no_match` - `artifact_quarantine` - Scraper DB helper now records evidence for newly verified price/image/details. - Quarantine robot now records artifact evidence. - Matcher records competitor-match evidence for auto-approved matches. - Review API now supports protected no-valid-match marking: - `POST /api/review/transceivers/:id/no-valid-match` - Health API exposes active competitor-status counts. - Review stats expose global product competitor-status counts. ## Live Deployment - Scraper build on Erik: passed. - API build on Erik: passed after TypeScript route param cast. - Migration applied successfully. - `tip-api` restarted and healthy. - `tip-scraper-daemon` was not restarted because `scrape:pricing:naddod` and `scrape:pricing:qsfptek` were active. ## Live Backfill - Product status after migration: - `matched=11198` - `needs_research=6575` - Evidence ledger seeded: - `price=10633` - `image=12189` - `details=16782` - `competitor_match=316` ## Live API Check - `/api/health`: healthy. - Active-product competitor status: - `matched=11158` - `needs_research=6256` - `no_valid_match=0` - `ambiguous=0` - Protected Review stats with Dashboard token returned: - `matched=11198` - `needs_research_products=6575` - `no_valid_match=0` - `ambiguous=0` ## Operational Next Step - When `scrape:pricing:naddod` and `scrape:pricing:qsfptek` finish, restart `tip-scraper-daemon` to load the new scheduler matcher/reconcile logic. - Then run: - reconcile - matcher - Review no-valid-match workflow for products that truly have no valid public 1:1 competitor. ## Training Pool - Added TIPLLM lessons for: - competitor state machine - evidence ledger semantics - `training-data/tip-llm-capabilities-v1.jsonl` validated successfully.