88 lines
2.5 KiB
Markdown
88 lines
2.5 KiB
Markdown
# 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.
|
|
|