Rentv Sheet Enrich Refine

repo: ~/Projects/rentv-sheet-enrich-refine · 76 commits · 0 in last 24h, 0 in last 7d ·

Search the build

76 commits indexed

  1. 956099c 2026-08-31 team_vp.py: repoint VP_MODEL default muse-glimmer→qwen3:14b (TK-10980, muse removed)
  2. 5e5158e 2026-08-13 rentv :9797 status data: explicit junk-value drop-list (Cody fix — no over-broad heuristic)
  3. 51390ef 2026-08-13 rentv :9797 status data: strip enrichment-green mis-captures + trailing-char dup values
  4. 4be38e7 2026-08-13 rentv :9797 legend: persist the 'more colors' fold state across re-renders (Cody fix)
  5. 06105fe 2026-08-13 rentv :9797 legend: fold the long tail of one-off color tints under a 'N more' toggle
  6. ddffc49 2026-08-13 Add derived 🔥 Warmth score column to RENTV live console + top-N export
  7. 72a7312 2026-08-13 rentv :9797 legend: Cody fixes — sticky header (✕ stays visible on scroll) + Escape cancels a rename
  8. 21e6af5 2026-08-13 rentv :9797 legend: close (✕/Esc/click-outside) + per-row ↺ reset for a rename
  9. 46c2c4d 2026-08-13 rentv :9797 legend: Cody fixes — empty-rename guard, mark heuristic guesses, don't nuke mid-edit
  10. aba95a9 2026-08-13 rentv :9797: add in-viewer Color Key legend panel (🎨 Colors) — swatch + count + editable provisional name
  11. 60e8dcd 2026-08-13 auto-data-snapshot: 2026-08-13T18:37:41 (1 data files) — __pycache__/snapshot.cpython-314.pyc
  12. 707c9b1 2026-08-13 rentv :9797 exact-colors: Cody fixes — readable text on painted link/mail/phone cells, saved-flash survives, drop ghost near-whites
  13. 1c5e092 2026-08-13 FIX write off-by-hr: 9 tabs have a title row above the header (hr=1) so write_cell's hardcoded row0+1 wrote to the HEADER row instead of the data row. Snapshot now stores hr per tab; write_cell targets hr+1+row0. Verified against live sheet (retail panel / ARIZONA BROKERAGE etc.).
  14. 8150eeb 2026-08-13 Live console: guard drag-to-fill against phantom writes — native text-selection drags inside editable cells are now ignored on drop (intentional value-cell drags + external drops still write)
  15. b159bca 2026-08-13 FIX critical data-corruption: combined/multi-sheet view writes went to the wrong tab/row/column (postWrite sent stale GID + combined indices). Server now reverse-maps combined (row,union-col) -> source (gid,tab-row,tab-col); client sends DATA.gid+gids. Verified exact on 157/157 sampled cells.
  16. ca6b2ac 2026-08-13 rentv :9797: paint EXACT original sheet cell colors in the grid (restore lost color-coding)
  17. 95c5ba3 2026-08-13 Live console: show Last Modified date+time directly under the Status chip; stamp it on status-pick and drag-drop writes too
  18. fe7b566 2026-08-13 Live console: row-number gutter down the left; drag-to-fill — drop a value onto any field to replace it in the sheet (Notes appends instead of replacing)
  19. 1098075 2026-08-13 rentv :9797 draft composer: richer Follow-up (thank-you + questions + scheduling options)
  20. dfed233 2026-08-13 Live console: email cells are now clickable mailto links; color-coded Status field (colors pulled from the sheet) + click-to-set status picker that writes the value to the sheet
  21. 00fc8a6 2026-08-13 Live console: Width presets (Tight/Cozy/Wide/Fit + auto-refit on window resize) + Text size S/M/L, replacing the raw density slider; fix column drag-to-reorder (preventDefault stops text-selection hijack)
  22. 2a21996 2026-08-13 Live console: FORCE grouping off on every load (kills the black sub-sort header bars for good; was persisting via localStorage)
  23. 5e82fcf 2026-08-13 Live console: turn OFF grouping (removes the unwanted black header bars; one-time reset, Group dropdown still available); readable theme-aware scrollbars for night mode
  24. e2b2b9e 2026-08-13 Draft drawer: contact data on a white card (crisp links, not blue-on-black); fix broken Contact-via control -> real mail/LinkedIn/phone SVG icons + full-width segmented control
  25. c5739ce 2026-08-13 Live console: theme-aware interaction colors (no more black-on-black in day mode); soften group headers from black bars to tinted band; default to OS light/dark
  26. 4ff3c02 2026-08-13 Live console: Website/LinkedIn/phone cells are now WHOLE-CELL clickable (leading icon never clipped) — opens popup / dials; text cells stay editable
  27. 1bff2a8 2026-08-13 Live console: click a field in the left rail to open its full value lookup in the main table area (search + multi-select to filter)
  28. 44d2687 2026-08-13 Live console: icons open Website/LinkedIn in a popup window (contenteditable was swallowing clicks); Notes cells expand-on-click
  29. 15117d1 2026-08-13 Live console: real SVG phone/website/LinkedIn icons + value-as-plaintext links; persist density; harden phone-vs-domain detection
  30. 58c6056 2026-08-13 Server: send no-store/no-cache headers so the browser always loads the latest console (kills the stale-cache 'doesn't work' after every update)
  31. 775dcab 2026-08-13 Left-panel Sheets selector: check 1..all sheets by name (with row counts); multi-select shows COMBINED data via /api/combined (union columns by header, Sheet Name leads, green remapped); click a name = only that sheet; All/None; layout persists per-view
  32. 58db3f6 2026-08-13 Composer: wider default (620px) + drag left edge to resize/expand drawer (persists), taller flex-grow draft body, field values wrap fully so nothing truncates
  33. ff8d35a 2026-08-13 Phone UX: number renders as plain text + a 📞 call icon beside it (tel: link on the icon, not the number); applies to every phone field across all tabs (Phone 1-4, Phone(s), Company Phone)
  34. a8e0412 2026-08-13 Remove jumpy 'Wider' bulk button (bumped all cols +60 -> lurched table 1000px+ right); keep 'Fit to content' + 'Reset'. Phone split verified populating Phone 1/2/3 from multi-number Phone(s)
  35. 2c2d33c 2026-08-13 Fix width-weird-on-click: table width = exact sum of column widths (absolute, no proportional re-scaling); resize re-renders once on release. Verified stable across sort/filter/view clicks via click-through
  36. 10ea773 2026-08-13 Smooth column resize: drag a guide line (no per-frame 2500-row reflow), apply width once on release; resize cursor + wider grab handle. Fixes jolty resize UX
  37. a43fc1d 2026-08-13 Left panel: column controls — '⤢ Fit all' (auto-expand every column to content), '↔ Wider' (+60px each), '↺ Reset' (clear widths+order)
  38. f54646e 2026-08-13 Field reorder = drag (removed up/down buttons): left FIELDS rows have a grip to drag-reorder; table header drag + panel drag share one reorder() that syncs BOTH views; column order persists per tab. Also: split Phone(s) into Phone 1-4 columns (tap-to-call)
  39. d4ebb5d 2026-08-13 Left FIELDS panel: per-field move up/down controls that reorder table columns (self-wiring renderFields + moveField, order persists per tab); shows fields in current column order
  40. 0f87d75 2026-08-13 Console: default column order pulls First Name + Last Name up right after Contact Name so they're visible without scrolling (only when user has no saved order)
  41. eb71907 2026-08-13 Add 'Sheet Name' as first column on every tab, populated with the tab title on every record (non-destructive insert); phone cells tap-to-call (tel: links); composer phone option = full spoken phone pitch
  42. 43cf368 2026-08-13 Console layout: FREEZE header row (border-collapse:separate + #wrap scroll container makes sticky thead work) + MOVE columns via reliable manual drag (5px threshold, click=sort/drag=reorder, persists per tab) + resize/autofit; all layout state (width+order) auto-saves per user
  43. c6e12e8 2026-08-13 All LinkedIn + Website cells href to exact site: cellRender links any URL/domain (not just http-prefixed); snapshot reads FORMULA render to recover URLs from =HYPERLINK(...,'LinkedIn') label cells (533/533 MVP LinkedIn now linked). Columns: resize-drag on every column + double-click-to-autofit + hover-title full content
  44. 6f48a2b 2026-08-13 Console: resizable columns (drag edge, persists per tab via colgroup+table-layout:fixed) + night/day theme toggle (persisted) + confirm LinkedIn cells href to exact company/profile URL
  45. ea0de54 2026-08-13 Sort: blanks sink to bottom so real Last Names lead A->Z
  46. e9851ab 2026-08-13 Console: default sort = Last Name ascending on tab load
  47. 4ad282d 2026-08-13 5x sweep: default landing tab = Unique Contacts (was tab[0] = tiny Color Legend, looked 'not working'); suppress favicon 404
  48. ef8ce09 2026-08-13 Rearchitect console: serve from OUR OWN local snapshot (snapshot.py, whole workbook in ~3 batch reads) instead of live-reading the sheet per tab-switch — kills the 60/min Sheets read-quota that blanked tabs (tab reads 0.9s->0.001s); rebuilt UI with full left filter panel (search + sort + group + density + per-field toggles + per-value click-to-filter facets), List/Table/Grid, live write-back + snapshot patch, /api/refresh; smart header-row detection for title-row tabs
  49. 48eb172 2026-08-13 Split Contact Name -> First Name + Last Name across ALL 19 name-bearing tabs (parallel, quota-safe values+green writes, auto grid-expand); handles Contact Name/Contact Name(s)/Contact variants + title-row headers
  50. 0d5bb2d 2026-08-13 auto-data-snapshot: 2026-08-13T13:27:38 (3 data files) — data/ocbatches/oc_07_li.json data/ocbatches/oc_08_li.json data/ocbatches/oc_09_li.json
  51. f2b7ed7 2026-08-13 Generative email inference: learn each company's email convention from known emails, infer 800 likely emails (560 pattern-detected, 240 default) into flagged 'Likely Email (inferred)' column
  52. afcba93 2026-08-13 Fold 257 unenriched companies into the loop: append 312 contact rows to master + derive 1152 websites; regenerate 138 contact batches (4137 contacts)
  53. b039b02 2026-08-13 Contact-level enrichment: write_by_contact.py (per-person company+name match) + CONTACT_INSTRUCTIONS + 135 batches (4025 contacts) for the LinkedIn/email yoloforever loop
  54. 6916f76 2026-08-13 auto-data-snapshot: 2026-08-13T12:57:05 (1 data files) — data/ocbatches/oc_03_li.json
  55. 50ef157 2026-08-13 Live Console: reflect enriched (green) cells — /api/format reads Sheets cell backgroundColor (14236 green in master), UI tints enriched cells + legend chip; newly-edited cells mark green live
  56. 45a7dba 2026-08-13 RENTV Live Console: two-way live Sheet viewer (pull+green write-back) over lib.py; Nav Agent grid chrome (left field panel/sort/group/density/movable) + List/Table/Grid; click-to-draft composer with channel-adaptive letters (email/LinkedIn/phone) + local-AI enhance; pm2 rentv-live-console :9797
  57. cd3467b 2026-08-13 session close: openclaw first slice landed (+31 company-LI, 724 total); grind batches oc_00-12 saved for resume; back-to-back VP waves proven rate-limited (scheduled cadence only)
  58. 9f7bbd0 2026-08-13 openclaw company-LI grind (oc_run.sh + 669 untried has-website-no-LI batches); local $0 fallback while VP agent-limiter cools
  59. 1576324 2026-08-13 VP wave vp_10-15: +24 marketing VPs (118/1734 cos); split_mvp.py reusable splitter; Cody-gated scope caveats on 4 enterprise/hybrid entries
  60. 4f042f7 2026-08-13 auto-data-snapshot: 2026-08-13T11:55:54 (59 data files) — VP_INSTRUCTIONS.md __pycache__/team_vp.cpython-314.pyc data/vpbatches/vp_01.json data/vpbatches/vp_02.json data/vpbatches/vp_03.json
  61. 9983125 2026-08-13 LOCAL $0 pipeline: openclaw company-LinkedIn (local_li.py) + continuous runner (run_local.sh); replaces rate-limited Exa
  62. e30cac5 2026-08-13 propagate to Sheet2 venues (7317) + Locations; all company/venue tabs enriched
  63. 3a1c93d 2026-08-13 propagate master enrichment (websites/phones/LinkedIn/Marketing-VP split/Why) to ALL company-bearing tabs
  64. 7de7dbb 2026-08-13 master: 770 company phones from $0 website scrape written (1933 cells)
  65. 27fa73a 2026-08-13 master: split Marketing/VP into Name/Position/LinkedIn/Phone cols (441 parsed); apply_phones.py staged
  66. 94e653b 2026-08-13 master enrichment: registered Unique Contacts tab, +websites(3230)+ported 56 cos; phone_scrape.py ($0 website phone harvester)
  67. 5357336 2026-08-13 auto-data-snapshot: 2026-08-13T10:54:53 (51 data files) — AGENT_INSTRUCTIONS.md __pycache__/enrich.cpython-314.pyc data/spbatches/sp_01.json data/spbatches/sp_02.json data/spbatches/sp_03.json
  68. f5ee325 2026-08-13 FIX: name-matched writer (row-shift immune); reset+re-applied Strong Prospects 28 cos by name (0 mismatches)
  69. 0c99341 2026-08-13 header-driven writer + Why(Marketing/VP) rationale column; Event Sponsors Layer-2 complete (30 LI, 22 marketing/VP+why)
  70. b91ae60 2026-08-13 Layer 2 sweep harness: Updated Email column, contact-aware batches, shared writer + agent instructions
  71. bca1d01 2026-08-13 provenance: contacts sourced from Steve Bloom / RENTV spreadsheets (SOURCES.md + realestate.data_provenance + memory)
  72. 3315bbc 2026-08-13 Layer 2 sample (12 cos): LinkedIn company/contact hyperlinks + Marketing/VP leads via Exa, green, honest blanks
  73. 9d158db 2026-08-13 Layer 1 complete: collision-proof column placement (live-detected), 1282 websites filled green across 3 revenue tabs; reset+re-mapped Strong Prospects/Event Sponsors
  74. 3661344 2026-08-13 Layer 1 LIVE: websites + 4 new cols (Website/LinkedIn Co/LinkedIn Contact/Marketing-VP) filled green across 3 revenue tabs
  75. f280a73 2026-08-13 enrich Layer 1: website-from-email-domain engine + dry-run (1281 websites derivable $0)
  76. 915689c 2026-08-13 scaffold: Sheets API connect + stdlib read/write lib with light-green fill marking

Authors

Agents used

  • none detected

Skills used

  • /phone6
  • /ocbatches4
  • /combined3
  • /mail3
  • /vpbatches3
  • /spbatches3
  • /down2
  • /resetting1
  • /section1
  • /reset1
  • /click-outside1
  • /provisional1
  • /heuristic1
  • /yellow1
  • /snapshot1
  • /cyan1
  • /multi-sheet1
  • /row1
  • /column1
  • /dark1
  • /website1
  • /no-cache1
  • /expand1
  • /filter1
  • /view1
  • /drag1
  • /autofit1
  • /domain1
  • /day1
  • /profile1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

5e5158e · 2026-08-13 · rentv :9797 status data: explicit junk-value drop-list (Cody fix — no over-broad heuristic)
Replaced the GREENISH-regex + trailing-char-dedup heuristics (which could false-drop a
legitimate sage-green status color or a real value like 'Tier2') with an explicit
BAD_VALS=['Active / Contacted3'] key-drop. Precise, can't misfire on real data.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
51390ef · 2026-08-13 · rentv :9797 status data: strip enrichment-green mis-captures + trailing-char dup values
The learned status_colors/status_values were polluted: 'Active / Contacted3' (a stray-digit
dup of 'Active / Contacted') carrying #cae6b4 (enrichment green mis-read as a status color).
loadMeta now filters greenish status colors + trailing-char near-dup values client-side, so
the status picker shows the 7 clean canonical values, no junk. Self-contained, reversible.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4be38e7 · 2026-08-13 · rentv :9797 legend: persist the 'more colors' fold state across re-renders (Cody fix)
Expanding the one-off-colors fold then renaming/resetting a color re-rendered the panel
and silently collapsed it. A module-scope _minorOpen now remembers the fold state and
restores it after each render.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
06105fe · 2026-08-13 · rentv :9797 legend: fold the long tail of one-off color tints under a 'N more' toggle
Legend now shows the meaningful colors (count>=15 OR grounded name) up front and collapses
the ~20-30 low-count one-off tints (header/section shading) under a click-to-expand fold —
Sheet2 goes from 34 rows to 13 shown + 21 folded. Row template factored to a helper; all
rename/reset handlers still wired across primary+minor.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ddffc49 · 2026-08-13 · Add derived 🔥 Warmth score column to RENTV live console + top-N export
- warmth.py: shared scorer (appearances + status intent + Strong-Prospect + reachability)
- live_server.py: augment tab()/combined() responses; guard write_cell against the derived col
- index.html: numeric-aware sort, read-only heat-pill cell, default sort = Warmth desc
- export_top.py: ranked 'top-N to work' CSV using the same scorer
72a7312 · 2026-08-13 · rentv :9797 legend: Cody fixes — sticky header (✕ stays visible on scroll) + Escape cancels a rename
- .lghead now position:sticky + ✕ floats within it, so the close button no longer scrolls
  out of view on tabs with many colors
- Escape sets a _legEsc flag before closeLegend so the blur handler does NOT commit a
  half-typed rename (Escape = cancel, not save)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
21e6af5 · 2026-08-13 · rentv :9797 legend: close (✕/Esc/click-outside) + per-row ↺ reset for a rename
Completes the Color Key UX + fixes Cody's 'no recovery path' for a bad rename: a renamed
color now shows ↺ to clear the localStorage override back to its grounded/provisional name;
panel closes via ✕, Escape, or clicking outside (consistent with the status picker).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
46c2c4d · 2026-08-13 · rentv :9797 legend: Cody fixes — empty-rename guard, mark heuristic guesses, don't nuke mid-edit
- onblur only saves a NON-empty name (empty no longer permanently overrides CNAMED/heuristic)
- provName getter ignores an empty stored name
- non-grounded (heuristic) names render dim-italic + a grey '?' so a guess is never shown as fact
- renderLegend() skips rebuild while a name is being edited (no mid-edit data loss on tab switch)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
aba95a9 · 2026-08-13 · rentv :9797: add in-viewer Color Key legend panel (🎨 Colors) — swatch + count + editable provisional name
Reads the client COLORS map for the loaded tab, tallies distinct exact colors, shows
each with a swatch, hex, cell-count and a grounded provisional meaning (blue=Contacted,
green=Has email, magenta=Needs email, cyan/yellow flagged ❓ awaiting Steve). Names are
click-to-rename, persisted to localStorage — reversible, NO sheet write. Addresses Cody's
'color chaos with no key' note.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
707c9b1 · 2026-08-13 · rentv :9797 exact-colors: Cody fixes — readable text on painted link/mail/phone cells, saved-flash survives, drop ghost near-whites
- link/mail/phone cells now get bg+auto-contrast text via --xtext var + td.xcol CSS
  (!important) so accent-blue link text isn't unreadable on magenta/cyan fills
- td.saved flash forced !important so a write-confirm still shows on colored cells
- hexc() skips near-white greyscale ghosts (#f3f3f3 etc, invisible on panels); keeps #e6e6e6+

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
b159bca · 2026-08-13 · FIX critical data-corruption: combined/multi-sheet view writes went to the wrong tab/row/column (postWrite sent stale GID + combined indices). Server now reverse-maps combined (row,union-col) -> source (gid,tab-row,tab-col); client sends DATA.gid+gids. Verified exact on 157/157 sampled cells.
Found via yoloforever loop (Cody red-team + in-process DTD).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ca6b2ac · 2026-08-13 · rentv :9797: paint EXACT original sheet cell colors in the grid (restore lost color-coding)
snapshot.py now captures every non-white, non-enrichment-green cell's exact hex per
tab (colors map); live_server tab()/combined() pass it through; cellTD paints each
cell its real sheet background (bg-only on link/mail/phone, bg+auto-contrast text on
plain). No legend names needed, no sheet write — the human color-coding is visible again.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1098075 · 2026-08-13 · rentv :9797 draft composer: richer Follow-up (thank-you + questions + scheduling options)
Follow-up purpose now has its own copy across Email/LinkedIn/Phone: thanks them
for taking the time to review, asks 2-3 tailored questions, and offers creative
next steps (15-min call windows, 'name a better week' follow-up date, one-pager).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
dfed233 · 2026-08-13 · Live console: email cells are now clickable mailto links; color-coded Status field (colors pulled from the sheet) + click-to-set status picker that writes the value to the sheet
- snapshot.py: extract Status(color) value->color map + canonical value list from cell fills
- live_server.py meta(): expose status_field/status_colors/status_values
- UI: colored status chips + picker popover, email mailcell

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

File tree

401 files tracked. Click any to browse the source at HEAD.

Other build journals

← Rentv Sheet Enrich  ·  all 4 projects  ·  Rentv Slideshow Canary →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 162ms