Changelog
Release notes
LeadCognition ships continuously — GitHub signal intelligence, enrichment quality, and developer outreach features get better every week. Every tagged release, newest first.
Latest: v0.167.1 · 416 releases shipped
June 2026
-
reconstruct flattened markdown tables across 15 blog pages (#1802)
-
single Astro homepage + unified collapsible FAQ + credit copy (#1801)
-
simplify homepage hero desc — "who's already evaluating your category" (#1798)
-
refresh live homepage hero — GitHub-intent positioning (#1792)
-
homepage CTA → Book a free consultation with founder + new booking link (#1785)
-
MarketingContentPage redesign — TOC sidebar + TLDR callout (#1782)
-
only main-CI triggers production deploy (kill dedupe-skip spam) (#1790)
-
design-coherence phase 2 — landing semantic-class system + tokens + tests (#1775)
-
delete unused build-image.yml + simplify runner-policy guard (#1789)
-
prevention-first quality gates (shift-left, ubuntu-latest mirror) (#1783)
-
restore prod version + in-app release-notes layout
-
move deploy chain to ubuntu-latest, retire self-hosted deploy pool (#1787)
-
self-serve paid-conversion hardening (checkout errors, coupon UI, event idempotency, billing edges)
-
alternatives converting pSEO template + phantombuster/scarf pages (#1755)
-
CUTOVER — production landing deploys Astro dist/ (#1707)
-
tools schema parity (26) + legal pages — 135/162 full parity (#1706)
-
send discover/admin batch deanon via Inngest instead of dead CF worker (#1754)
-
migrate /who-uses (30) and /blog (23) families to v2 templates (#1704)
-
org activity realtime channel — contract, publisher, useOrgActivity hook (slice 1) (#1742)
-
migrate /vs (9) and /glossary (8) families to v2 templates (#1703)
-
staging Inngest env guard + registration script (keys = manual mint) (#1741)
-
pipeline event envelope {product, apiKeyId, plan} in shared types (#1740)
-
enable Otta Pulse gates — acceptance + review-threads (#1750)
-
align deanon page layout with app shell
-
pipeline watchdog cron — ntfy+Sentry alert on stale funnel stages (#1730)
-
read array-shaped deanon cache rows
-
record API deanon provider costs
-
deliver notifications via Inngest instead of CF queue round-trip (closes #LC-828) (#1726)
-
widen deploy health-verify window + builder acceptance-fence template (#1731)
-
ICP re-score UI picks up terminal job state + numeric skipped counts (#1727)
-
build server image once in CI and push to GHCR (phase 1) (#1732)
-
send onboarding deanon via Inngest events instead of dead CF worker (#1725)
-
leads empty-state action hub + discover batch feedback (#1709)
-
Reply.io LinkedIn channel — linkedInUrl on push + LinkedIn webhook events (#1708)
-
Reply.io KPI metrics (pushed/delivered/opens/replies/bookings/opt-outs) (#1643)
-
explicit discover view param wins + fix(LC-808): settings user-menu dead click (#1683)
-
paywall hardening (plan-name crash, playbook gate, redaction leak, 403 shape) (#1679)
-
gate leads-topbar 'Find your leads' CTA on sources having loaded (#1673)
-
/deanon API tab documents LeadCognition API, not DataForGTM (#1672)
-
Build market dead-click + nav stuck in onboarding focus mode (#1671)
-
de-anon GH username → LinkedIn — in-app /deanon (2 cr/resolve) + DataForGTM surface (#1669)
-
Linear done-on-deploy sync + commit-scope-must-exist PR gate (#1666)
-
2FA enrollment path for OAuth-only users (closes #784) (#1662)
-
hermetic handler-orchestration coverage for 10 workflows + posthog-ai
-
persona-eval screenshots (onboarding + leads/paywall) (#1658)
-
companies list links to detail + surfaced 2FA setup failures (#1657)
-
run cull script with bun (self-hosted node too old for .mjs ESM) (#1660)
-
cull crash-looping PR previews on the health axis (#1659)
-
actionable discover failed state — restart CTA, honest stage states, friendly error copy (#1650)
-
onboarding 5xx error fallback + align signup-onboarding spec to 1-step contract (#1647)
-
consistent locked-list github_bio redaction + plan-aware insufficient-credits copy (#1654)
-
Sentry capture on discover/leads error paths + server-side unlock_completed event (#1646)
-
treat GitHub URLs as GitHub source input, not website domain, in 1-step onboarding (#1649)
-
null-safe discover session names in nav (app-crash on unclassified sessions) (#1653)
-
align Inngest Sentry tags with fnIds + top-level signal-ingest capture (#1644)
-
trigger CI/deploy — squash body inherited [skip ci] from branch chore commit
-
bump vitest 2.1.8 → 3.2.6 (GHSA-5xrq-8626-4rwp) (#1642)
-
fail-closed allow-list redaction for locked leads (#1640)
-
tini as PID1 in dev container to reap orphaned children (#1637)
-
upgrade better-auth suite to 1.6.15 (CVE-2026-41427) (#1635)
-
CJM/JTBD 4-journey bug sweep — 56 bugs (P0 PII/billing + P1 pipeline) [bundle] (#1633)
-
deliver daily digests to all orgs incl. no-prefs-row + cron heartbeat (#1567)
-
widen Playwright timeouts on contended self-hosted runner (#1634)
-
collapse onboarding to one step, move ICP in-app (fixes zero-repo dead-click) (#1582)
-
remove GraphQL email field that nulled every lead (funnel down ~90min) (#1580)
-
harvest free GitHub emails on ingest (profile + commit) (#1579)
-
generate signals.id in raw insert (BUN-1D NOT NULL) (#1577)
-
migrate GitHub signal ingest CF→Inngest (restore dark funnel) (#1576)
-
remove broken FullEnrich cost + count real emails_found from leads (#1575)
-
daily report — signals by loaded_at + estimate disclaimer (#1574)
-
drop deleted apps/web-legacy COPY from Dockerfile — unblocks prod deploys (#1571)
-
de-anon rate %, prev-day deltas, method breakdown in daily report (#1570)
-
held-out precision gate tool (relaxed mode verdict: ~62% → stays strict) (#1568)
-
auto-prune-disk df flag + retire dup script (#1566)
-
delete apps/web-legacy + finish pnpm→Bun CI cleanup (#1565)
-
jean.json worktree automation + auto-free-port dev launcher (#1560)
-
persist auto-refreshed linear token back to vault (#1553)
-
discover-yc --relax-filters eval mode (#1536)
-
use db.json for jsonb inserts — fix serp_cache + audit metadata double-encode (#1552)
-
auto-refresh linear-claude MCP token on 401 (#1551)
-
cache BrightData SERP results so de-anon re-runs never re-pay (#1549)
-
unwrap BrightData /request envelope so SERP de-anon returns matches (#1548)
-
dedupe leads_empty_state_viewed tracking (#1547)
-
visual-review screenshot gate (git pre-push + Claude Stop hook) + batch-results-panel fix (#1541)
-
emit new_lead from Inngest deanon completion (#1537)
-
document DataForSEO credentials (#1535)
-
gitignore output/ runtime cache (#1533)
-
track subscription_started on paid conversion, rename plan_switched intent event (#1501)
-
clarify match_confidence is the product "ICP fit" number (#1491)
-
deanon cost-control — quality gates before paid search (#1525)
-
lead relevance — ingestion gate + signal-strength + best-first deanon (#1524)
-
escape data.login in not-found banner on github-email-finder (#1526)
-
normalize short dispatch SHA to full OID in deploy gate (#1522)
-
rewrite titles/meta + leading-answer blocks on top CTR-anomaly pages (#1518)
-
BrightData SERP discovery — retire Serper from live deanon path (#1517)
-
emit signup_completed deterministically on first authenticated session (#1507)
-
penalize off-ICP audience-mismatch keyword false-positives at higher-tier caps (#1458)
-
wire fullstack auth E2E into web lane on push-to-main / run-e2e (#1482)
-
unify notification template styling with the app design system (#1453)
-
deploy-production hardening — superseded-tolerance, Inngest settle-gate, loud notifications (#1459)
-
automate Inngest re-registration in deploy-production (#1442)
-
how Discover finds buyers — source of truth + marketing
-
notification templates v2 — rich lead card, ICP/signal, reveal CTA + channel click-tracking (#1432)
-
notification deep-link + meter loading flash + digest delta body
-
extract shared mobile-first PlanCards (billing + activation modal) (#1420)
-
tighten Source Map ladder, rename Discoveries, fix pricing drift (#1415)
-
route New Source Map to create flow instead of upgrade wall (#1413)
-
un-gate new-lead notifications + per-event channel routing (#1406)
-
act-as members 500 + dedup view-as banner (#1392)
-
add devops e2e smoke marker (#1391)
-
reconcile previews from Coolify registry
-
deterministic active-org resolution for view-as consistency (#1385)
-
summarize release notes momentum
-
stop stale-org onboarding redirect loop + bounce completed users off /onboarding (#1383)
-
log dispatch label decision on dry-run create path (#1382)
-
harden Sentry auto-fix loop — impact gate, sensitive-path guard, circuit breaker, resolve-verify (#1380)
-
scope view-as-org raw fetches + reject stale active org (#1378)
-
align nav release badge with live version
-
show live release notes version
-
refresh release notes version
-
resolve auth review findings and simplify release workflow
-
gate legacy data-quality admin routes to platform admins (#1124)
-
use staging auth schema columns in signup health (#1246)
-
treat cancelled detect job as no-op in CI umbrella gate (#1373)
-
auto-resolve Sentry issues via API when Fixes BUN-N merges to main (closes #643) (#1367)
-
revert deploy-production concurrency group (broke CI guard) (#1370)
-
remove LLM customer-summary release-notes feature + fix prod deploy/rollback race (#1369)
-
add 15s settle wait before browser smoke check (#1364)
-
CI/CD — Node.js setup for browser smoke, RELEASE_LINE in Coolify, backfill release summaries (#1361)
-
harden Sentry auto-triage cron, threshold, and add SLA enforcement (#1354)
May 2026
-
show Slack-delivery paywall instead of a silently-reverting select (#1350)
-
default notifications to email, not unconnected Slack (#1344)
-
add content safe area top padding in fullscreen mode
-
mount viewport before requestFullscreen in SDK v3
-
Mission Control UI — fix all remaining issues
-
request fullscreen mode in Telegram Mini App
-
Mission Control UI prod URL fix + tab icons + safe-area layout
-
setup-bun.sh version-gate early exit for self-hosted runners (#1336)
-
mission-control MVP — TDD package + superpowers skills (#1299)
-
deduplicate signup_completed for email signups (#1316)
-
CI cancelled-lane flake + CSP missing PostHog/Intercom sources (#1314)
-
hide retry buttons and add exit ramp on invalid invite (#1312)
-
use Linear API key for merge sync
-
Stripe customer crash + startup DNS retry + search tracking (#1307)
-
skip duplicate production deploy runs
-
refresh visible release version
-
add production browser smoke
-
enqueue realtime notification deliveries
-
finish Bun-first runner simplification
-
include CI lane package in production Docker install (#1298)
-
skip deploys for test-only runtime changes (#1295)
-
make Linear release sync idempotent (#1294)
-
repair Bun production deploy commands
-
fetch Sentry triage unit tests in workflow
-
polish notifications and Sentry watch
-
add notification delivery templates
-
run deploy dedupe on GitHub runner (#1286)
-
isolate web CI command cwd (#1281)
-
align lanes with live-health deploy dedupe (#1282)
-
dedupe production deploys from live health (#1280)
-
split CI into reusable lanes (#1276)
-
add notification delivery destinations (#1278)
-
clarify notification delivery settings
-
add Sentry triage manual ops
-
let manual deploy bypass stale dedupe (#1272)
-
harden notification live smoke coverage (#1271)
-
prefer Linear API key for Sentry triage
-
repair Sentry deanon requeue automation
-
E2E notification attribution flow (#1250)
-
preference enforcement (mute + digest batcher) (#1235)
-
add staging db runtime guardrails
-
post-rewrite hook to warn on rebase squash-revert pattern
-
leads + companies analytics events (MEDIUM batch) (#1228)
-
Wires `inngest-cli dev` as a third Playwright webServer when `PLAYWRIGHT_INNGEST=1` (LC-603)
-
wire Inngest dev server into Playwright harness + implement E2E test (#1226)
-
restore getModuleDb singleton + fix inngest.send → step.sendEvent (#1222)
-
fixme → skip on Inngest happy-path E2E test
-
module-level DB singleton + batch size limits + concurrency key + throttle
-
gate matview.refresh.requested emits on actual writes
-
add missing PostHog tracking events + internal email fix (#1214)
-
sync PostHog init + wire optOutIfInternal (#1202)
-
orphan-rate signup health metric (#1196)
-
Sentry bug fixes (BUN-K/S/R) + broaden auto-triage scope (LC-530) (#1186)
-
persist Add source clicks immediately (#1175)
-
disable ml-worker cron while ML classification is frozen
-
backend observability — Sentry on all Inngest workflows + PostHog pipeline events
-
Sentry capture inside email dispatch (supersedes #1164) (#1169)
-
PostHog email_sent + email_failed events (#1167)
-
[MIGRATION] add channel to notification_log unique dedup index (#1165)
-
cap notification retry at 10 attempts (avoid runaway hourly hits) (#1162)
-
remove green bg bleed-through on org logo in team switcher
-
stabilize live source activation UX
-
make LinkedIn URL read-paths dual-column-aware (#1129)
-
poll FullEnrich reverse-email lookups via correct endpoint (#1109)
-
LinkedIn enrichment unlock — paid tier with provenance-aware free signals (#1070)
-
Linear webhook receiver for Claude Code agent assignability (#1099)
-
wire @claude mentions via claude-code-action (#1093)
-
tag AI agent eval sessions in PostHog (#1083)
-
improve Discover paywall UX — PostHog tracking + empty-state copy (#1074)
-
add design-partner / early-adopter framing for founder persona (#1073)
-
add CSV export button to leads toolbar (#1068)
-
track search_performed, unlock_intent, and repo-add friction (LC-373/374/375) (#1061)
-
startup-time assertions for required env vars + DB tables (#1041)
-
restore Serper.dev provider — CSE migration silently disabled search for 6 days (#1039)
-
add PostHog OTel structured logging to discover pipeline
-
bump actions/checkout from 5.0.1 to 6.0.2 (#975)
-
add PostHog tracking for playbook copy, enrichment errors, signal/ICP hover dwell (#1034)
-
PostHog LLM tracking follow-ups — rescore span, cost fallback, session_id (#1031)
-
upload source maps to PostHog for readable exception stack traces (#1025)
-
set name property on PostHog org groups for readable display (#1017)
-
rename login_completed → signed_in for PostHog consistency
-
reduce PostHog telemetry noise, dedupe events, track discover failures
-
make email verification optional — users can log in unverified (LC-479)
-
hotfix(invite+tracking): fix false auth error on invite page and deduplicate pageviews (#1001)
-
switch rate limit storage to memory (fixes intermittent Google OAuth failure) (#999)
-
disable BQ daily cap enforcement (log only, never block) (#998)
-
reload session list from server after single-session revoke (#995)
-
add workflow_dispatch fallback to auto-tag-on-deploy (#994)
-
document Discovery v2 architecture
-
hotfix: React #300 loop, rateLimit schema, dual error reporting, stale-chunk reload, passkey list (#993)
-
filter invalid organizations in switcher
-
hotfix(LC-468): fix session.create.after hook signature — 500 on GitHub/Google OAuth (#985)
-
cap active sessions at 5 per user (#984)
-
persist rate limits to DB — rate_limit table + startup migration (#980)
-
auth hardening — 2FA, scrypt, email verification, JWE, rate limits, session filter (#978)
-
fix Google/GitHub login for existing users + auth error page (#968)
-
simplify discovery activation and source mapping
-
hotfix: revert PR #966 (LC-465 passkeys) — prod React #300 (#969)
-
Settings Auth panel — track auth_provider_linked on confirmed callback (closes #956) (#965)
-
Better Auth email flows — changeEmail config + settings UI (closes #955) (#959)
-
scope Sources query keys by active org ID (#954)
-
MCP discovery flow + repo backfill tools (closes #880) (#951)
-
add /.well-known/mcp-server and /.well-known/mcp/servers.json discovery endpoints (#950)
-
allow owner role cleanup
-
add Better Auth JWKS schema
-
ignore stale auth session cache cookie
-
run auth plugin schema startup migration
-
add organization invites and auth security
-
proxy tracking host through worker
-
route tracking host robots through worker
-
clean up GSC page indexing examples
-
clean up GSC indexing signals
-
prevent stale robots sitemap cache
-
ship AI-ready sitemap and pricing facts
-
unify lead score indicators
-
ICP/signal score consistency + LC-447 plan-gated BQ lookback
-
adaptive BQ backfill window to avoid cost limit errors
-
use org-specific lead_scores in lead detail (ICP match + signal strength) (#918)
-
broaden Discover market source planning (#911)
-
refresh org_lead_data mat view after repo removal (#917)
-
soften ICP coverage icon state
-
add ICP setup workflow and resilient re-score (#914)
-
harden lead avatar fallback for listing and peek
-
polish responsive leads and companies UX
-
auto-deploy release metadata bump
-
release: v0.82.0 Contact & UX hardening
-
keep release metadata aligned
-
sync visible release to v0.81.3
-
sync visible release version
-
align contact enrichment smoke state
-
update actions and repair preview reconcile
-
polish release notes and notifications
-
stop legacy API worker claiming app domain
-
auto-trigger lead enrichment after repo onboarding completes
-
retrigger CF Pages deploy after lockfile sync
-
sync pnpm-lock.yaml after Astro revert (#881)
-
Removed `backfillDiscoverBatchToMatView` from `discover-sessions.ts` — keeps the Discover People tab (batch-based) fully separated from the Leads/Companies surface (organic signals via mat view)
-
restore Technology Comparisons grid after static HTML deletion (#877)
-
CSP headers, mobile pricing, homepage copy, blog comparison table (#876)
-
remove stale static HTML overrides, fix alternative page layout (#874)
-
Astro landing migration — complete implementation (#729)
-
YC outreach export script — CSV per batch for email drip (#866)
-
preserve HTTPException status codes in sentryErrorHandler
-
install wget alongside curl for Coolify healthcheck
-
add /api/dev/sentry-test E2E throw endpoint
-
add Sentry error capture to Bun server
-
clean self-hosted checkout workspace before fetch
-
remove organizations GQL field — stops Inngest read:org storm (#850)
-
document GOOGLE_CSE_API_KEY + GOOGLE_CSE_ID in .env.example
-
add github_status migration + fix JSONB containment in leads auth (#846)
-
add idempotent startup migration for LC-347 companies columns
-
**Lead detail 404 fixed** — `GET /api/leads/:leadId` now falls back to `lead_unlocks` and `discover_batches` ownership checks when `org_lead_data` mat view is stale. Discover-batch leads that hadn'...
-
skip direct-IP TLS cert check on self-hosted runner (hairpin NAT) (#838)
-
fix YAML parse failure in deploy-production.yml Telegram block
-
remaining UX stack — ICP pre-fill, org enrichment, Discover (#834)
-
lower Inngest concurrency to 5 to match plan limit
-
GitHub GraphQL client + lead/company enrichment wiring (#819)
-
regenerate release data — v0.69.1 with LC-274 stack entries (#823)
-
strip @ prefix and null whitespace org_handle values (#822)
-
shared RepoSourceCard + discover owner-grouping toggle (#693)
-
onboarding handoff + empty states + cross-surface drill-down (#687)
-
add ALTER TABLE migration for lead_enrich_runs schema drift (#820)
-
allow Graphite stack + builder date-prefix branch names in CI
-
overnight data-quality enrichment — quick fixes + domain scrape + GitHub-org API
-
dedupe pnpm lockfile to fix drizzle-orm dual-resolution
-
add page_viewed event to /repos (Sources) page
-
keep leads and companies links stable
-
Revert "fix(playbook): separate seller and prospect context"
-
separate seller and prospect context
-
remove cross-repo BQ job cache contamination
-
PostHog foundation — SPA pageviews, internal opt-out, ?posthog=force, tracking gaps (#740)
-
CI preview cert gate, skill updates, and process improvements (#739)
-
Unify admin page headers (#685)
-
entrypoint writes .env.docker so MCP creds reach dev user shell
-
companies cleanup pass — junk, person/URL, fake-bio, trivial dupes (#569)
-
add source + employer_signal_type columns + deterministic backfill (#678)
-
MCP OAuth readiness for ChatGPT and Claude (#621)
-
add agent vault item lookup commands (#721)
-
keep agent vault profile env in parent shell (#710)
-
make dev container healthcheck process-existence based (#708)
-
avoid pgrep in dev container healthcheck (#707)
-
make dev container healthcheck process-based (#706)
-
add agent vault support to dev container (#704)
-
backfill existing Linear releases
-
run Linear backfill workflow from main
-
sync Linear release issue keys explicitly
-
skip Linear resync on release-bump deploys
-
run stack preview validation on opened PRs
-
define linear stack preview workflow
-
add graphite-app to advisory authors + bump-push retry on race (#662)
-
LC-296 release-notes header version + sharper feedback copy (#620)
-
LC-293 customer-facing release notes via LLM + honest pace stat (#618)
-
LC-291 use --notes-file to avoid YAML block-scalar escape (#616)
-
per-version release notes pulled from GitHub Release body (#605)
-
CI/CD redesign — Codex tier + version source-of-truth + Graphite policy
-
LC-516 execute_code Code Mode tool — CF Worker sandbox + pre-injected LeadCognitionClient
-
**LeadEnrichWorkflow** — 8-step weekly Inngest pipeline (Sundays 4am UTC) for enriching leads with AI-generated signals
-
**LC-196**: `lc196-generate-descriptions.ts` — ML.GENERATE_TEXT script to fill ~32K missing company descriptions via Vertex AI Llama 4 Scout (~$5/run, dry-run safe)
-
New `CompanyGitHubRelinkWorkflow` CF Durable Workflow scans companies missing a GitHub alias and probes GitHub's search API to link the correct org
April 2026
-
Follow-up to v0.52.0 and PR #455.
-
This release ships the LC-213 and LC-218 data-script fixes after resolving the accepted Codex P1 review findings.
-
**CSP violations resolved** — Content-Security-Policy report-only was flagging ~1,300 weekly violations from three legitimately-used domains:
-
Rebased and released the useful local pipeline commits for multi-token GitHub App pooling.
-
Ship the LC-146/LC-147 ICP universe expansion and pgvector substrate.
-
Added FullEnrich people/company Search API pilot endpoints.
-
Upgraded AI playbook generation with Discover/customer context and LLMAPI-backed model selection.
-
align v0.46 release metadata
-
Hotfix release for the post-v0.46.0 automated review findings that blocked production deployment.
-
This release ships the R2 public API / MCP stack integration from PR #425.
-
Ships LC-93 via PR #424 as a clean replacement for stale/conflicted draft PR #291.
-
Ships the pending cleanup approval queue and apply pipeline from PR #382, including rollback/audit safeguards and review fixes for table dispatch and archived-state audit snapshots.
-
Fixes the outreach-ready company predicate to use a null-safe description/name comparison so companies with substantive descriptions and missing company names are not hidden by default.
-
**LC-165 M1.2 — Rule-based cleanup proposer** (#366): `lc165-propose-from-findings.ts` reads unresolved rows in `data_quality_findings` (39 findings across 8 check IDs) and stages proposals in `pen...
-
`icp-merge.ts` handles archived-domain collisions (Codex P1 fix applied)
-
Hotfix release.\n\n- Adjusted Intercom launcher placement so normal app pages use the standard lower-right position.\n- Raised the launcher only on the Leads list page so it stays clear of the pagi...
-
Small UX polish follow-up for onboarding repo inputs.
-
Ships the improved onboarding source setup and Lead Supply Check flow.
-
Fixed Discover Market reveal for over-limit free-plan workspaces so they receive a plan-limit upgrade message instead of a generic scan failure.
-
Completes LC-111 notification delivery cutover for email, Slack, webhook, and in-app delivery rows.
-
Closes Linear LC-94. Single-issue release; no other items bundled.
-
This minor release ships the new filtering system for Leads and Companies.
-
**FullEnrich waterfall contact enrichment end-to-end**: work email, personal email, mobile phone unlocked via FullEnrich's waterfall provider chain. Live at `/leads/:id`.
-
Hotfix — fixes misleading Slack deploy notifications from v0.38.5 and consolidates the deploy flow so every surface reports into one atomic message.
-
Hotfix release — closes the manual-deploy and visibility gap across the three deploy substrates.
-
Security patch — closes two open Codex **P1** findings from PR #233 plus one same-shape vulnerability Codex didn't see.
-
Patch release — CSP violations now stream to PostHog (Sheldon's Telegram digest picks them up), plus several landing / tools hotfixes merged alongside.
-
Patch release — Stripe webhook validation helper + CSP report-only observation.
-
Patch release closing out the v0.38.0 edge-case sweep follow-ups.
-
LC-80: Polish Discover workspace, Sources, and billing checkout by @wiselancer in https://github.com/wiselancer/leadcognition_v2/pull/220
-
monitored orgs card, Discoveries quota, Current Plan layout by @wiselancer in https://github.com/wiselancer/leadcognition_v2/pull/218
-
session index at /discover + human-readable status copy (closes #211 #207) by @wiselancer in https://github.com/wiselancer/leadcognition_v2/pull/214
-
When a user entered a popular repo (e.g. `stripe/stripe-js`), the backend would escalate BigQuery lookback to 6 months, exceed the 20 GB per-query cap, throw `BigQueryCostError`, and silently reset...
-
allow retry from batch_failed + surface start-batch errors in UI by @wiselancer in https://github.com/wiselancer/leadcognition_v2/pull/185
-
Ship public release notes and early adopter program by @wiselancer in https://github.com/wiselancer/leadcognition_v2/pull/157
-
**Full Changelog**: https://github.com/wiselancer/leadcognition_v2/compare/v0.31.2...v0.31.3
-
Empty content release — this tag contains a single `chore(release): bump version to v0.31.1` commit and exists because the release-tagging step fired twice. No code changes relative to v0.31.1; kep...
-
repo-intent-score legend centering + Network error UX by @wiselancer in https://github.com/wiselancer/leadcognition_v2/pull/151
-
Top-of-funnel SEO surfaces that work without login. Each uses shallow gating — show one primary number, CTA to signup.
-
**Free tier**: 25 one-time identity unlocks (LinkedIn URL + name + company) — was 5
-
**Pro $99/mo** ($79 annual) · 500 credits
-
Outcome-driven hero on `/discover` and `/onboarding` entry pages — replaces bland "enter your domain" with a sharper pitch about finding developers living in your ecosystem
-
enrich PostHog + Intercom identity with website, role, stage, unlocks
-
Full Intercom Messenger integration with PostHog as single source of truth for events.
-
**Skip inactive-repo leads in retry cron**: `retryDeanonJob` now filters to only leads with at least one signal from an *active* repo. 16,792 leads from deactivated/test repos (`openclaw/openclaw`,...
-
**Fix identify timing in onboarding**: `posthog.identify()` now fires synchronously before `onboarding_started`, ensuring the event is attributed to the identified person rather than an anonymous p...
-
New `retry-deanon` cron job runs every 10 minutes to drain the backlog of unenriched leads (~19k leads/day capacity)
March 2026
-
Fixed `e2e` job: missing frontend dist stub caused all wrangler builds to fail (10/10 CI runs were red)
-
**Production migrated to Bun/Coolify** — `app.leadcognition.io` now serves from Hetzner (was CF Workers). Same runtime as staging, auto-deploys on push to `main`
-
Set up `t.leadcognition.io` as a managed reverse proxy via Cloudflare
-
improve UX — overflow states, accessibility, clarity
February 2026
-
resolve TDZ error in leads refetchInterval
-
**Leads filter optimization:**
-
Identified via Chrome DevTools MCP performance audit (LCP 620ms, render delay 460ms driven by monolithic JS bundle).
-
6e378a9 release: deanon workflow hardening, company affiliations, and admin/web improvements
-
**API: Org-scoped lead detail verification**
-
Security fix: FullEnrich webhook endpoint now requires a shared secret token (`?secret=<token>`) since FullEnrich doesn't provide HMAC signatures. Secret set on both API and pipeline workers.
-
address review findings — NaN validation, dead code removal
-
Full audit and cleanup across pipeline, API, and packages.
-
**Shadow design tokens** — consistent elevation system via CSS variables
-
All 5 AI touchpoints now emit `$ai_generation` events to PostHog for full LLM observability:
-
FullEnrich results now delivered via webhook in ~30-90 seconds (was ~5 min polling)
-
PostHog analytics is now live across all 10 landing pages and the web app, providing comprehensive tracking of user behavior, conversion funnels, and engagement metrics.
-
Full go-to-market strategy at `docs/gtm-strategy.md`
-
Onboarding and dashboard UX improvements following v0.10.1:
-
**Match confidence badge**: was showing `80/5` (wrong scale) — now correctly shows `80% match`. matchScore is stored as 0-100 in DB; UI thresholds updated accordingly.
-
**Hardened validate_match**: score guard now strictly validates integer 1–5; hallucinated template strings fall back to 0 instead of crashing
-
**Unipile company detection**: auto-detects company from signup email via LinkedIn search
-
**Root cause**: `ENRICHMENT_QUEUE.send()` was called in a loop — one call per new GitHub actor. Each `.send()` consumes a Cloudflare subrequest. Popular repos (e.g. `meta-llama/llama-recipes`) can ...
-
**fix(pipeline): crash "events is not iterable" on dirty repo slugs**
-
Replaced sequential repo polling with `Promise.allSettled` batches of 20
-
**`migrate-haystax.ts`** — 4-phase migration from Haystax Heroku Postgres to LCv2 production
-
Full observability for LeadCognition: every external API call is now audited, costs and errors surface in the admin dashboard, and PostHog tracks product analytics.
-
**BigQuery job ID caching**: Cache the BQ job ID after submission so processing failures can retry for free (polling the existing job instead of re-submitting and re-scanning)
-
**Critical auth fix**: Missing Stripe secrets were crashing `createAuth()` on every request (`new Stripe(undefined)` throws). All 10 wrangler secrets now verified and set in production.
-
Plan-aware limits: Free (2 repos), Starter (5), Growth (15), Scale (50)
-
Full subscription management via Better Auth Stripe plugin
-
Lead detail page with locked/unlocked paywall. Tags and favorites system. Leads page v2 redesign (signal strength column, activity, enhanced filters). Companies page v2 (card grid, inline expansion...
-
BigQuery dry-run guards and byte limit enforcement (safeQuery()). UI normalization to shadcn default theme. BigQuery cost analysis and spending guardrails added to CLAUDE.md.
-
Companies page with table view and slide-over detail panel. Company-to-lead grouping from GitHub org signals.
-
Activity tab with day-grouped timeline and per-event-type icons. Signal strength scoring.
-
Leads list with filters (signal strength, event type, date). BigQuery intelligence endpoints: related-repos, tech-stacks, company-map. Materialized view org_lead_data as single read source.
-
Social accounts extraction from GitHub profiles (LinkedIn, Twitter, etc.). Commit email capture from PushEvents. Self-declared LinkedIn trusted without AI validation.
-
Org-scoped data model, lead_unlocks paywall (personal info redacted until unlocked), credits system with 4 plan tiers (Free/Starter/Growth/Scale).
-
GitHub Events polling cron (15-min), LinkedIn discovery via Unipile, AI validation via Claude Haiku, email enrichment via FullEnrich. Leads table unifying GitHub + LinkedIn profiles.
-
BigQuery integration for GitHub Archive data — backfill signals from starred/watched repos. Drizzle schema for signals, leads, and orgs.
-
Initial project scaffold: Hono API on Cloudflare Workers, React + TanStack Router frontend, Drizzle ORM + Postgres, Better Auth with Google OAuth, GitHub Events polling pipeline.
Looking for the in-app changelog? The same history lives inside the product — open the app changelog →