{"slug":"rentv-sheet-enrich","total":168,"limit":100,"offset":0,"since":null,"commits":[{"hash":"47a9aa3","date":"2026-09-02 10:22:17 -0700","author":"Steve Abrams","subject":"TK-10550 bloom-enrich: batch LANDED +31 LI +1 email (Steve-authorized), verified 1373/4297","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"e74470f","date":"2026-09-02 10:17:54 -0700","author":"Steve Abrams","subject":"TK-10550 bloom-enrich: +6 LinkedIn +1 email (wb_007-008), 31 total staged; WebSearch-budget stop","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"15369e8","date":"2026-09-02 09:38:12 -0700","author":"Steve Abrams","subject":"TK-10550 bloom-enrich: stage 25 verified contact-LinkedIn (wb_000–006, STAGE-only, 2 Cody-dropped)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01HCs5zSboHd1NJkqMMjoszq"},{"hash":"414e9cf","date":"2026-09-02 09:35:52 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-02T09:35:20 (118 data files) — data/warm_batches/wb_000.json data/warm_batches/wb_001.json data/warm_batches/wb_002.json data/warm_batches/wb_003.json data/warm_batches/wb_004.json","body":""},{"hash":"be9a096","date":"2026-08-31 01:38:19 -0700","author":"Steve Abrams","subject":"team_vp.py: repoint VP_MODEL default muse-glimmer→qwen3:14b (TK-10980, muse removed)","body":""},{"hash":"4f190d2","date":"2026-08-24 11:45:21 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-24T11:44:27 (1 data files) — __pycache__/write_by_contact.cpython-314.pyc","body":""},{"hash":"504437f","date":"2026-08-24 11:35:34 -0700","author":"Steve Abrams","subject":"TK-10533: add 'LinkedIn (Contact) — found' date-provenance column + going-forward stamp","body":"Cody FIX-FIRST secondary item, approved by Steve. write_by_contact.py now resolves\na per-contact 'LinkedIn (Contact) — found' column (append-only at rightmost edge,\nby-label lookup, auto-created if missing) and stamps today's ISO date the day a\nLinkedIn slug is first written — giving each green LinkedIn stamp a liveness date.\nADD-only + append-only: cannot shift columns under or collide with the concurrent\nRENTV writer. Column header created live at AF on gid 3823360. Legacy 1335 cells left\nundated (honest 'unknown') rather than back-stamped with a false today's-date.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"eec7a10","date":"2026-08-24 09:59:26 -0700","author":"Steve Abrams","subject":"yoloforever cycle 20: wb_045 +21 contact-LinkedIn (1325/4297, 30%)","body":""},{"hash":"367ec07","date":"2026-08-24 09:52:46 -0700","author":"Steve Abrams","subject":"yoloforever cycle 19: wb_044 +17 contact-LinkedIn (1304/4297, 30%)","body":""},{"hash":"254315e","date":"2026-08-24 09:44:43 -0700","author":"Steve Abrams","subject":"yoloforever cycle 18: wb_043 +13 contact-LinkedIn (1287/4297, 29%) - cool tail","body":""},{"hash":"6209ac7","date":"2026-08-24 09:36:22 -0700","author":"Steve Abrams","subject":"yoloforever cycle 17: wb_042 +21 contact-LinkedIn (1274/4297, 29%)","body":""},{"hash":"57b09cd","date":"2026-08-24 09:28:11 -0700","author":"Steve Abrams","subject":"yoloforever cycle 16: wb_041 +23 contact-LinkedIn (1253/4297, 29%)","body":""},{"hash":"875e973","date":"2026-08-24 09:20:02 -0700","author":"Steve Abrams","subject":"yoloforever cycle 15: wb_040 +23 contact-LinkedIn (1230/4297, 28%)","body":""},{"hash":"1bd7964","date":"2026-08-24 09:13:40 -0700","author":"Steve Abrams","subject":"yoloforever cycle 14: wb_039 +22 contact-LinkedIn (1207/4297, 28%)","body":""},{"hash":"8221a3d","date":"2026-08-24 09:03:04 -0700","author":"Steve Abrams","subject":"yoloforever cycle 13: wb_038 +23 contact-LinkedIn (1185/4297, 27%)","body":""},{"hash":"16af7e5","date":"2026-08-24 09:00:10 -0700","author":"Steve Abrams","subject":"TK-10579: read-only preflight_matches.py dry-run — 19 staged matches still to write, 0 unmatched; LinkedIn col 1152; Email sha intact","body":""},{"hash":"7e480d7","date":"2026-08-24 08:53:52 -0700","author":"Steve Abrams","subject":"yoloforever cycle 12: subagent recovered, +16 LI (coverage 1162/27%); gate rejected 2 inferred, verify agreed both drop; SHIP","body":""},{"hash":"2c86d61","date":"2026-08-24 08:48:28 -0700","author":"Steve Abrams","subject":"yoloforever cycle 11: main-loop +3 LI; /res panel=RESUME 6-0; SHIP","body":""},{"hash":"b7a032e","date":"2026-08-24 08:39:27 -0700","author":"Steve Abrams","subject":"yoloforever cycle 10 ledger: main-loop +4 LI; cool-tail yield note; SHIP","body":""},{"hash":"aa30df6","date":"2026-08-24 08:27:09 -0700","author":"Steve Abrams","subject":"yoloforever cycle 9 ledger: main-loop +6 LI; SHIP","body":""},{"hash":"1ff6bd5","date":"2026-08-24 07:51:11 -0700","author":"Steve Abrams","subject":"yoloforever cycle 8 ledger: subagent recovered, +25 LI (coverage 1131/26%); SHIP","body":""},{"hash":"200a82c","date":"2026-08-24 07:41:10 -0700","author":"Steve Abrams","subject":"yoloforever cycle 7 ledger: main-loop +5 LI (coverage 1106/25%); SHIP","body":""},{"hash":"b49cf5c","date":"2026-08-24 07:32:52 -0700","author":"Steve Abrams","subject":"yoloforever cycle 6 ledger: main-loop +6 LI all live_title (coverage 1101/25%); SHIP","body":""},{"hash":"c30bf70","date":"2026-08-23 08:45:11 -0700","author":"Steve Abrams","subject":"yoloforever cycle 5 ledger: main-loop fallback +9 LI all live_title (coverage 1095/25%); SHIP","body":""},{"hash":"ddada5b","date":"2026-08-23 06:30:10 -0700","author":"Steve Abrams","subject":"yoloforever cycle 4 ledger: +23 LI all live (coverage 1086/25%); SHIP","body":""},{"hash":"eea8aa6","date":"2026-08-22 11:49:24 -0700","author":"Steve Abrams","subject":"yoloforever cycle 3 ledger: gate's first production catch (rejected+verified+recovered Mark Sanford); +26 verified, coverage 1063/24%; SHIP","body":""},{"hash":"199333c","date":"2026-08-22 11:41:35 -0700","author":"Steve Abrams","subject":"yoloforever cycle 2 ledger: +21 LI all live-tagged (coverage 1037/24%), slug-source gate clean (0 inferred); SHIP","body":""},{"hash":"bad2918","date":"2026-08-22 11:34:50 -0700","author":"Steve Abrams","subject":"yoloforever cycle 1 ledger: +24 LI (coverage 1016/23%); Cody FIX-FIRST slug-source gate applied+verified; date-column deferred to pending-approval","body":""},{"hash":"8a0aa54","date":"2026-08-22 11:33:35 -0700","author":"Steve Abrams","subject":"Cody FIX-FIRST: enforce slug-source gate in write_by_contact.py (auto-reject inferred/fabricated slugs, report rejected_inferred count); require slug_source in worker prompts + name the Cody gate as mandatory in WARM-RESUME","body":""},{"hash":"b381287","date":"2026-08-21 08:19:36 -0700","author":"Steve Abrams","subject":"TK-10579 LinkedIn cycle9: 8 searched, 4 Cody-KEEP staged (Sutton/Chang Soo/Caldwell/Byerly), 2 REJECT held (Fowler/Champion Parker); 30 total staged across b6-12; 0 fabrication; gated to Steve","body":""},{"hash":"ffd701c","date":"2026-08-21 08:13:43 -0700","author":"Steve Abrams","subject":"TK-10579 LinkedIn cycle8: 10 searched, 9 Cody-KEEP staged (Cesar Pena + 8 Chads), 0 REJECT, Eschmeyer omitted stale; 26 total staged across b6-11; 0 fabrication; gated to Steve","body":""},{"hash":"833afb4","date":"2026-08-21 08:10:31 -0700","author":"Steve Abrams","subject":"wb_007-010: +68 verified contact-LinkedIn (599->701, 16%); WARM-RESUME throttle-fallback note","body":""},{"hash":"bd47a06","date":"2026-08-21 08:08:46 -0700","author":"Steve Abrams","subject":"TK-10579 LinkedIn cycle7: 10 searched, 4 Cody-KEEP staged (Sears/Wilson/Fincher/Jackson), 2 REJECT held (King/Jones); 17 total staged across b6-10; 0 fabrication; gated to Steve","body":""},{"hash":"5728b2b","date":"2026-08-21 08:03:27 -0700","author":"Steve Abrams","subject":"TK-10579 LinkedIn cycle6: 10 searched, 3 Cody-KEEP staged (Calhoun/Groner/Carfi), 2 REJECT held (Stumpf/Roark); 13 total staged across b6-9; 0 fabrication; gated to Steve","body":""},{"hash":"0737e37","date":"2026-08-21 07:54:19 -0700","author":"Steve Abrams","subject":"TK-10579 LinkedIn cycle5: 9 searched, 4 Cody-KEEP staged (Cukier/Douglass/Horner/Southerland), 1 REJECT held (Shaffer); 10 total staged across b6-8; 0 fabrication; gated to Steve","body":""},{"hash":"c9ad67c","date":"2026-08-21 06:55:08 -0700","author":"Steve Abrams","subject":"Session wave: +88 verified contact-LinkedIn (511->599, warmth-first wb_000-004, 65-73% yield); add WARM-RESUME.md (self-correcting rebuild + 2-concurrent cadence + measured yields)","body":""},{"hash":"f08c5b9","date":"2026-08-21 06:51:39 -0700","author":"Steve Abrams","subject":"TK-10579 LinkedIn cycle4: 8 searched, 2 Cody-KEEP staged (Warnica, Bruce Beck x3 rows), 1 REJECT held (Brooke Jacob), 0 fabrication; write gated to Steve","body":""},{"hash":"a5b716b","date":"2026-08-21 06:48:05 -0700","author":"Steve Abrams","subject":"Warmth-first LinkedIn-enrichment batches: rebuild 3513 still-missing contacts ordered by warmth (major-firm/reachable first), garbage-name filtered; supersedes alphabetical missing_batches for higher yield","body":""},{"hash":"3a2091d","date":"2026-08-21 06:41:49 -0700","author":"Steve Abrams","subject":"TK-10579 LinkedIn cycle3: 9 searched, 2 Cody-KEEP staged (McGlynn/Murphy), 1 REJECT held (Brighton Barnes), 0 fabrication; write gated to Steve","body":""},{"hash":"75d6f6d","date":"2026-08-17 08:05:30 -0700","author":"Steve Abrams","subject":"Apply dedup to send-ready exports: READY_verified already clean (0 dups); VERIFY_FIRST inferred collapsed 7 same-email pairs -> deduped export (977->970 rows); raw files intact","body":""},{"hash":"31159ba","date":"2026-08-17 06:27:39 -0700","author":"Steve Abrams","subject":"Add deduped CRE worklist export (4,036 rows): collapse 169 same-email duplicate re-scores to one highest-warmth row each, backfilling phone/position/company from dropped dups; raw worklist left intact","body":""},{"hash":"de9f5d3","date":"2026-08-17 06:25:58 -0700","author":"Steve Abrams","subject":"Update coverage report: mark data-quality findings #1 (pipe-merges) + #2 (personal-domain tagging) RESOLVED; correct gmail count 100->157","body":""},{"hash":"b6c0043","date":"2026-08-17 06:25:32 -0700","author":"Steve Abrams","subject":"Add 'Domain Type' column to CRE worklist (personal/firm/blank) — tags 157 individual-agent personal-domain emails so firm/domain rollups aren't skewed (coverage report finding #2)","body":""},{"hash":"dbbef8f","date":"2026-08-17 06:11:32 -0700","author":"Steve Abrams","subject":"Class-3c: resolve 12 domain-clear reserved company merges to canonical (78 rows; Colliers cluster, LBA, Grand Pacific, etc.); SVN franchise names + 1 gmail oddball kept as-is","body":""},{"hash":"a4557d6","date":"2026-08-16 13:46:54 -0700","author":"Steve Abrams","subject":"Class-3b: resolve 30 evidence-clear company variants (typos, association-token strips, sub-brand arms) to canonical (144 rows); 13 ambiguous merges reserved for Steve","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"c9a6490","date":"2026-08-16 13:45:39 -0700","author":"Steve Abrams","subject":"Class-3a: collapse 54 same-firm spelling/case/typo twins to curated canonical names (253 rows, 10 CSVs); 43 mixed-brand strings left for Steve's ruling","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"2628508","date":"2026-08-16 13:17:14 -0700","author":"Steve Abrams","subject":"Strip '| EMAIL' parse-artifact token from company names (46 firms, 370 rows across 4 CSVs); multi-segment names left for class-3 dedup","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"e70a1e4","date":"2026-08-16 09:33:34 -0700","author":"Steve Abrams","subject":"Fix CBRE | Colliers bad merge -> CBRE across 4 worklist CSVs (120 rows; all 59+59 contacts are @cbre.com, zero Colliers)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"0216cda","date":"2026-08-16 08:01:45 -0700","author":"Steve Abrams","subject":"Add coverage/quality report for completed RENTV CRE dataset (analysis only, no send)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"c57888a","date":"2026-08-15 08:24:03 -0700","author":"Steve Abrams","subject":"SAFETY: fail-closed RENTV email kill switch (Steve directive 2026-08-15 — no rentv emails to anyone)","body":""},{"hash":"af2fa34","date":"2026-08-15 08:12:46 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-15T08:12:28 (1 data files) — data/searched_names.txt","body":""},{"hash":"e1e9fbe","date":"2026-08-14 15:58:05 -0700","author":"Steve Abrams","subject":"Draft real RENTV outreach messages: 3 grounded variants (network-intro / event-invite / deal-flow), value-first, personalized, compliant, bracketed unknowns. Steve picks + wires into send script","body":""},{"hash":"7042676","date":"2026-08-14 15:19:24 -0700","author":"Steve Abrams","subject":"Finish send mechanics: real Purelymail SMTP send (smtplib SSL) with idempotent sent-log, warmup cap, env-only password; all guards verified (dry-run default, placeholder-abort, from/pass-required). Sends nothing without explicit --send+message+creds","body":""},{"hash":"0f44288","date":"2026-08-14 13:56:10 -0700","author":"Steve Abrams","subject":"Stage $0 Purelymail send path for 2636 verified CRE audience: dry-run, warmup-batched, verified-only, mandatory CAN-SPAM footer, message=placeholder (Steve-gated). Sends nothing.","body":""},{"hash":"3f9875d","date":"2026-08-14 13:47:02 -0700","author":"Steve Abrams","subject":"DTD verdict A: free MX-drop on 987 inferred (removed 10 dead-domain contacts); note free-verification ceiling reached, mailbox validation = paid spend gate, B write-back = gated follow-on","body":""},{"hash":"c43ea67","date":"2026-08-14 13:35:24 -0700","author":"Steve Abrams","subject":"DTD verdict C (Cody-scoped): stage verified-only CRE outreach audience (send-ready) + separate inferred verify-first list; NOT sent (gate stays Steve's)","body":""},{"hash":"6c07e9e","date":"2026-08-14 13:30:25 -0700","author":"Steve Abrams","subject":"Final commercial-RE work-list: whole set minus ~15 off-vertical, CRE-confidence tagged (HIGH/PROBABLE), warmth-sorted w/ email provenance","body":""},{"hash":"ed10d1c","date":"2026-08-14 12:36:24 -0700","author":"Steve Abrams","subject":"Refine to commercial-RE focus: CRE-relevance tag by source-tab signal; export rentv_CRE_worklist.csv (CRE-only, off-vertical excluded)","body":""},{"hash":"36e924c","date":"2026-08-14 11:51:54 -0700","author":"Steve Abrams","subject":"Export updated warmth-ranked work-list (top-300, Email Source provenance) post-recovery","body":""},{"hash":"cb4a421","date":"2026-08-14 11:30:28 -0700","author":"Steve Abrams","subject":"flag pmrg/vandeweerd no-MX (auto-skipped)","body":""},{"hash":"296217b","date":"2026-08-14 11:30:10 -0700","author":"Steve Abrams","subject":"FINISH BURST: last 52 firms processed, queue exhausted (166 resolved/71 held), +30 final top-up write. RENTV recovery COMPLETE, loop stopped clean","body":""},{"hash":"ebc4a83","date":"2026-08-14 11:12:22 -0700","author":"Steve Abrams","subject":"yoloforever cycle 5 (final auto-cycle): +7 domains (140 total); loop PAUSED per unanimous DTD stop-verdict, awaiting Steve","body":""},{"hash":"25601d0","date":"2026-08-14 10:55:40 -0700","author":"Steve Abrams","subject":"write-back top-up: +16 guard-clean MX-valid inferred emails -> live sheet","body":""},{"hash":"b7aa372","date":"2026-08-14 10:50:30 -0700","author":"Steve Abrams","subject":"flag rubyred.media no-MX","body":""},{"hash":"76ca18a","date":"2026-08-14 10:50:23 -0700","author":"Steve Abrams","subject":"yoloforever cycle 4: +9 domains (133 total), guards enforced, 1 held","body":""},{"hash":"b9217cb","date":"2026-08-14 10:20:14 -0700","author":"Steve Abrams","subject":"yoloforever C3: ledger","body":""},{"hash":"dccabd2","date":"2026-08-14 10:19:43 -0700","author":"Steve Abrams","subject":"yoloforever C3 FIX-THEN-SHIP (Cody re-gate): role-label stoplist (asst/jr/sr/vp/...), guards wired into infer_emails.py direct-write path, Email Source col in export, cleared live role-label cells","body":""},{"hash":"4a978f7","date":"2026-08-14 10:12:04 -0700","author":"Steve Abrams","subject":"yoloforever cycle 3 (a): +5 domains (124 total), NGKF->nmrk institutional-guarded, 5 held","body":""},{"hash":"de43cf4","date":"2026-08-14 09:49:57 -0700","author":"Steve Abrams","subject":"flag caesars no-MX","body":""},{"hash":"f824754","date":"2026-08-14 09:49:43 -0700","author":"Steve Abrams","subject":"yoloforever cycle 2: +6 domains (114 total), guards applied at generation, 4 held","body":""},{"hash":"a439e34","date":"2026-08-14 09:43:04 -0700","author":"Steve Abrams","subject":"yoloforever C1: ledger + institutional-guess decision memo (gated to Steve)","body":""},{"hash":"f2f6c50","date":"2026-08-14 09:41:34 -0700","author":"Steve Abrams","subject":"yoloforever C1 FIX-THEN-SHIP (Cody): guards.py name-sanity + institutional/gov domain blocklist in writeback, cleared 13 live garbage cells, guard-clean master + 26 clean top-up","body":""},{"hash":"31013ee","date":"2026-08-14 09:21:05 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-14T09:20:46 (3 data files) — NOTES-unverified.txt __pycache__/guards.cpython-314.pyc rentv_recovered_ALL.csv","body":""},{"hash":"b21787e","date":"2026-08-14 09:13:56 -0700","author":"Steve Abrams","subject":"yoloforever cycle 1: +5 domains (113 total), 5 held (ambiguous/defunct)","body":""},{"hash":"ebccbbf","date":"2026-08-14 09:10:32 -0700","author":"Steve Abrams","subject":"Loop tick 14: +8 domains (108 total), Dove + Riverwest held","body":""},{"hash":"a9cdb6c","date":"2026-08-14 08:59:09 -0700","author":"Steve Abrams","subject":"Loop tick 13: +8 domains (100 total), Liberty Property Trust defunct + Mosaic held","body":""},{"hash":"47f4186","date":"2026-08-14 08:37:05 -0700","author":"Steve Abrams","subject":"Loop tick 12: +8 domains (92 total), Cannon Beach + N&N held","body":""},{"hash":"5c34183","date":"2026-08-14 08:24:51 -0700","author":"Steve Abrams","subject":"Write-back top-up (Steve approved): +15 MX-valid inferred emails -> live sheet (219 total written)","body":""},{"hash":"24589ac","date":"2026-08-14 08:14:58 -0700","author":"Steve Abrams","subject":"Loop tick 11: +8 domains (84 total), BRAND + CASCO held","body":""},{"hash":"be06d7e","date":"2026-08-14 07:53:20 -0700","author":"Steve Abrams","subject":"Loop tick 10: +7 domains (76 total), PICOR label-disambiguated, 3 held","body":""},{"hash":"a04a7d7","date":"2026-08-14 07:35:34 -0700","author":"Steve Abrams","subject":"Write-back APPLIED (Steve approved, Option A): 204 MX-valid inferred emails -> live RENTV sheet, ADD-only","body":""},{"hash":"5f935c7","date":"2026-08-14 07:31:20 -0700","author":"Steve Abrams","subject":"Loop tick 9: +8 domains (69 total), Wren + AT Real Estate held","body":""},{"hash":"c911b98","date":"2026-08-13 23:19:37 -0700","author":"Steve Abrams","subject":"Wrap-up: consolidate 207 recovered emails (MX-tagged master) + gated write-back memo","body":"- rentv_recovered_ALL.csv: master of both lanes, deduped, MX-tagged, warmth-sorted\n- gated write-back memo -> pending-approval (A/B/C options, low-confidence flagged)\n- loop stopped at Steve's call; 162-company tail queue left intact"},{"hash":"ff5f196","date":"2026-08-13 23:11:04 -0700","author":"Steve Abrams","subject":"Loop tick 8: +6 domains (61 total), 4 held (franchise/generic/ambiguous)","body":""},{"hash":"8fb2924","date":"2026-08-13 22:49:24 -0700","author":"Steve Abrams","subject":"Loop tick 7: +8 domains (55 total), IDI Gazeley defunct + Abbott ambiguous held","body":""},{"hash":"8d3df92","date":"2026-08-13 22:48:08 -0700","author":"Steve Abrams","subject":"Loop tick 6: +8 domains (47 total), Verde no-site + Enzed ambiguous held","body":""},{"hash":"8ab5552","date":"2026-08-13 22:36:04 -0700","author":"Steve Abrams","subject":"Loop tick 5: +6 domains (39 total), 4 ambiguous held; web emails regenerated","body":""},{"hash":"ed09fa4","date":"2026-08-13 22:14:07 -0700","author":"Steve Abrams","subject":"Loop tick 4: +9 domains, 1 ambiguous (Rubicon) held back; recovered emails regenerated","body":""},{"hash":"fb96ca3","date":"2026-08-13 21:52:50 -0700","author":"Steve Abrams","subject":"Flag bcpmgt.com MX-unconfirmed","body":""},{"hash":"4d4c69e","date":"2026-08-13 21:52:40 -0700","author":"Steve Abrams","subject":"Loop tick 3: +9 domains (24 total), per-company pattern col (Oaktree=flast), 88 emails; Masyno no-site; aspirant MX flagged","body":""},{"hash":"23d3ff2","date":"2026-08-13 21:30:17 -0700","author":"Steve Abrams","subject":"Loop tick: +10 company domains resolved (15 total), 63 emails recovered, MX-verified","body":""},{"hash":"81ed641","date":"2026-08-13 21:08:19 -0700","author":"Steve Abrams","subject":"Loop dig: web-domain lookup lane proven (5 companies -> 30 emails) + resume procedure","body":"- data/company_domains_found.csv: resolved company domains (persistent loop state)\n- rentv_websearch_recovered.csv: 30 emails from batch-1 web lookups\n- rentv_company_domain_todo.csv: 238 companies ranked by warmth for the loop to grind\n- RESUME-DIG.md: exact per-wake-up loop procedure + guards"},{"hash":"f5d1b91","date":"2026-08-13 21:06:05 -0700","author":"Steve Abrams","subject":"Loop dig: local email recovery + brand-collision guard + MX verify","body":"- infer_emails_local.py: non-writing inference w/ website-domain fallback (staging only)\n- company-name normalization recovery: 72 clean emails the live script missed\n- ambiguity guard: blocks franchise brand-collisions (Cushman&Wakefield->picor trap)\n- MX verification: all 72 recovered domains accept mail\n- staged CSVs: recovered emails (confidence-tagged) + web-lookup target list"},{"hash":"5e5158e","date":"2026-08-13 21:00:09 -0700","author":"Steve Abrams","subject":"rentv :9797 status data: explicit junk-value drop-list (Cody fix — no over-broad heuristic)","body":"Replaced the GREENISH-regex + trailing-char-dedup heuristics (which could false-drop a\nlegitimate sage-green status color or a real value like 'Tier2') with an explicit\nBAD_VALS=['Active / Contacted3'] key-drop. Precise, can't misfire on real data.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"51390ef","date":"2026-08-13 20:56:26 -0700","author":"Steve Abrams","subject":"rentv :9797 status data: strip enrichment-green mis-captures + trailing-char dup values","body":"The learned status_colors/status_values were polluted: 'Active / Contacted3' (a stray-digit\ndup of 'Active / Contacted') carrying #cae6b4 (enrichment green mis-read as a status color).\nloadMeta now filters greenish status colors + trailing-char near-dup values client-side, so\nthe status picker shows the 7 clean canonical values, no junk. Self-contained, reversible.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"4be38e7","date":"2026-08-13 20:43:03 -0700","author":"Steve Abrams","subject":"rentv :9797 legend: persist the 'more colors' fold state across re-renders (Cody fix)","body":"Expanding the one-off-colors fold then renaming/resetting a color re-rendered the panel\nand silently collapsed it. A module-scope _minorOpen now remembers the fold state and\nrestores it after each render.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"06105fe","date":"2026-08-13 20:41:03 -0700","author":"Steve Abrams","subject":"rentv :9797 legend: fold the long tail of one-off color tints under a 'N more' toggle","body":"Legend now shows the meaningful colors (count>=15 OR grounded name) up front and collapses\nthe ~20-30 low-count one-off tints (header/section shading) under a click-to-expand fold —\nSheet2 goes from 34 rows to 13 shown + 21 folded. Row template factored to a helper; all\nrename/reset handlers still wired across primary+minor.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"ddffc49","date":"2026-08-13 20:16:12 -0700","author":"Steve Abrams","subject":"Add derived 🔥 Warmth score column to RENTV live console + top-N export","body":"- warmth.py: shared scorer (appearances + status intent + Strong-Prospect + reachability)\n- live_server.py: augment tab()/combined() responses; guard write_cell against the derived col\n- index.html: numeric-aware sort, read-only heat-pill cell, default sort = Warmth desc\n- export_top.py: ranked 'top-N to work' CSV using the same scorer"},{"hash":"72a7312","date":"2026-08-13 20:15:36 -0700","author":"Steve Abrams","subject":"rentv :9797 legend: Cody fixes — sticky header (✕ stays visible on scroll) + Escape cancels a rename","body":"- .lghead now position:sticky + ✕ floats within it, so the close button no longer scrolls\n  out of view on tabs with many colors\n- Escape sets a _legEsc flag before closeLegend so the blur handler does NOT commit a\n  half-typed rename (Escape = cancel, not save)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"21e6af5","date":"2026-08-13 20:11:32 -0700","author":"Steve Abrams","subject":"rentv :9797 legend: close (✕/Esc/click-outside) + per-row ↺ reset for a rename","body":"Completes the Color Key UX + fixes Cody's 'no recovery path' for a bad rename: a renamed\ncolor now shows ↺ to clear the localStorage override back to its grounded/provisional name;\npanel closes via ✕, Escape, or clicking outside (consistent with the status picker).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"}]}