{"slug":"rentv-v1","total":2,"limit":100,"offset":0,"since":null,"commits":[{"hash":"ff4651c","date":"2026-08-12 10:35:14 -0700","author":"Steve Abrams","subject":"Date every contractor entry: source_as_of + verify-at-cslb.ca.gov (TK-10488)","body":"DATE EVERYTHING per spec — the upstream usre /api/contractors/match carries no\ndataset-level freshness date, so the drop-in now surfaces one itself:\n- router.js: adds source_as_of (per-record upstream value -> CONTRACTORS_SOURCE_AS_OF\n  env -> known load date 2026-08-07) + verify_url:\"cslb.ca.gov\" to every response\n  (incl. the fail-soft path); also passes license_status through (Active/CLEAR).\n- widget.html: stamps \"CSLB data as of {source_as_of} — verify at cslb.ca.gov\"\n  under EACH contractor entry (text-only, no link-out); shows license_status.\n- README.md: documents the DATE-EVERYTHING behavior, the CONTRACTORS_SOURCE_AS_OF\n  env, the status/CLEAR handling, and the corrected response shape.\n\nNew files only, no edits to any existing/live RENTV file. Publish/deploy gated.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"64f7dfe","date":"2026-08-12 10:14:18 -0700","author":"Steve Abrams","subject":"Add drop-in contractor lookup package (contrib/contractors, TK-10488)","body":"Self-contained, new files only — no edits to any existing/live RENTV file.\n- router.js: Express router proxying the shared usre CSLB contractor API\n  (GET /api/contractors/match?mode=deal&county=&city=) and re-serving a slim,\n  text-only shape at GET /api/contractors-for-market; flatten+dedupe, 5m cache,\n  fail-soft (never 500s a story).\n- widget.html: zero-dependency text-only 'Licensed contractors in {market}'\n  block (name+trade+phone); auto-init from data-attrs or programmatic; hides\n  itself on empty/error; no link-out, no re-hosted assets.\n- README.md: 2-line mount + include steps for claude-rentv, env config, smoke\n  test. Publish/deploy gated.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n"}]}