What we shipped.
New signals, coverage expansions, throughput wins, and the bug fixes that earned them. We publish on the day work lands, not on the day it was planned.
- Improved
Dashboard reliability: error boundary + skeleton + empty-state convergence
Every /dashboard view now sits behind a render-time error boundary that surfaces a graceful "try again" fallback instead of a blank shell. Twenty-plus dashboard sub-pages converged onto the canonical Skeleton, EmptyState, and ErrorState primitives with consistent ARIA labelling and visible focus rings throughout.
- Fixed
Password reset links land on a real page
New /reset-password route shipped. Reset emails sent since 2026-05-20 had been 404-ing on the click because the route did not exist — the link minted by the backend now resolves to a token-validation + new-password form with the same HMAC contract the backend issues.
- New
Per-tier quotas now enforced on every gated route
Tier promises on the pricing page now have teeth at the route layer. Briefing regenerations, alert rules, watchlist size, due-diligence reports, API keys, team seats, battlecards, and side-by-side compare all return a structured 402 with retry-after when a tier limit is reached. Scale tier upgraded to unlimited tracked companies (fair use) — the pricing page no longer under-promises.
- Fixed
Trial expiry sweeper backstop
Daily 07:00 UTC cron now sweeps users whose trial has expired without an active Polar subscription and drops them to the free tier. Closes a gap where a missed Polar downgrade webhook could leave a non-paying user on a paid tier indefinitely. Sweep emits a "trial ended" email per affected user and increments observability counters so the cadence is auditable.
- New
Public health probe endpoints
Three new probe endpoints under api.pulsesignal.co for status monitors and integration partners: /api/v1/health (pure-Python liveness with version + commit + uptime), /api/v1/readiness (DB ping; returns 503 if degraded), and /api/v1/auth/session (always-200 anonymous; reports authenticated:true when called with a valid bearer). Frontend mirror paths at /api/health, /api/readiness, /api/auth/session route through the marketing host. All three are exempt from per-tier rate limits so external probes never consume a customer quota.
- New
Zapier, Make.com, and n8n integration docs
Added /integrations/zapier, /integrations/make, and /integrations/n8n walkthroughs alongside a new /integrations index page. Wire PulseSignal change events, narratives, GTM leads, and alert-rule triggers into 6,000+ Zapier apps, 1,800+ Make.com modules, or any n8n node today via the existing Standard-Webhooks-v1 outbound surface. No marketplace install required; each walkthrough is four steps end-to-end with HMAC signature-verification guidance.
- New
Compliance certification tracking
Added a new compliance.cert.gained signal sourced from FedRAMP Marketplace and trust-page scans. Over 130 providers now surface SOC 2, ISO 27001, HIPAA, and FedRAMP status changes inside the signal feed, with cohort patterns that fire when peer groups certify together.
- Improved
Stage 2 narrative emission, 10x faster
Rewrote the cross-axis fetch path in the Stage 2 narrative engine to anchor on rare event types before fanning out. Previously-timing-out cohort patterns now complete in under four seconds each, and total wall-time on the 06:30 UTC run dropped roughly 10x.
- Fixed
ProductHunt launches behind Cloudflare
Product launches ingestion now falls back to a headless browser when ProductHunt returns a Cloudflare challenge. Twenty-eight launches landed in the feed on the first run, including ships from Anthropic, Stripe, Notion, Linear, and Figma.
- Improved
Tighter org-name matching for compliance feeds
Compliance certification ingest now does a trigram pass after exact match, with legal-suffix tolerance for LLC, Inc, and Corp variants. Match rate on FedRAMP rows rose from roughly 0% to 45% against the existing company graph.
- New
Cohort patterns for security hiring waves
Stage 1 now ships eight new cohort-scope patterns covering security hiring waves, enterprise pricing waves, and certification-rooted motions. First-ever candidates emitted across cert x security_hiring and cert x enterprise_logos cohorts.
- Fixed
Async scheduler no longer wedges on trust-page ingest
Moved the trust-page ingestion path off the synchronous scheduler thread. A previous fifty-minute scheduler wedge during the 01:30 UTC run is resolved; downstream crons now fire on their published schedule.
- Improved
Privacy gate classification for entity-only modules
Refined the privacy gate so modules that only carry organization-level names (certifications, product launches, integrations) short-circuit ahead of the named-individual heuristic. Eliminates a class of false-positive grounding rejections that suppressed legitimate signals.
- New
Positioning data via Playwright fallback
Positioning extraction now falls back to a Playwright-rendered fetch when a marketing page ships content client-side. Picks up hero copy, value props, and audience signals on sites that previously returned an empty static document.
- Improved
Coverage telemetry on the audit runner
The internal audit runner now records per-module coverage and emission counts on every cron tick. Operators see when a source goes quiet without waiting for the daily report.
- Fixed
Stable column reference in cohort lookup
Cohort bucket queries previously referenced a column name that did not exist on the companies table, causing silent failures on a subset of daily runs. Now reads the correct website column and runs clean.
See the next one first