Platform updates and legal-monitor detections, in reverse chronological order. Each entry has its own structured-data anchor so search engines and AI assistants can cite specific changes by date.
When admin approves a detected legal change with field updates, the laws table now updates accordingly — closing the loop between the cron monitor and the plaintiff-facing rights engine.
The legal-monitor cron has been detecting law amendments for months, but the "approve" action in the admin review queue only flipped the change-row status without patching the laws table. That meant detected changes didn't flow through to plaintiff-facing rights advice — only the cron-detected timestamp updated. The review API now wires the apply path end-to-end via applyChangeToLaw(), and the admin UI surfaces three distinct actions: "Apply patch to <lawId>" (real DB change), "Mark applied (no DB change)" (informational ack), and "Dismiss". Reviews happen on a bi-weekly cadence.
Eliminated a class of sitemap duplicate-URL bugs by switching from offset-based pagination to deterministic ID-range buckets. A ruling's sitemap page is now determined by its own ID — stable across cache cycles and ingest churn.
A Screaming Frog scan flagged 9 ruling URLs appearing in two different sub-sitemaps each. Root cause: offset-based pagination shifted ruling positions whenever rows were hidden between cache renders, so the same URL could land in two pages over a 24-hour window. The fix partitions rulings into fixed 500K-wide ID buckets — a ruling's bucket is determined by its own ID and never moves. As a side effect, sub-sitemaps now grow uniformly with the corpus instead of always emitting exactly 10K URLs.
Variants like "/rulings/claim/Disability%20Discrimination" and "/rulings/claim/disability_discrimination" now redirect to a single canonical hub. Non-employment claims that were leaking into the URL space (Bivens action, antitrust) now 404 instead of rendering empty pages.
Ruling detail pages, employer profiles, state hubs, and industry hubs were all building claim hub URLs with raw, unsanitized claim_types strings from Supabase. A new claimSlug() helper normalizes case, punctuation, and aliases (e.g., "FLSA" → "wage_theft", "Title VII" → "discrimination") and the route handler 308-redirects non-canonical inbound URLs. SEO authority that was fragmented across thousands of near-duplicates now consolidates onto the canonical hubs.
The "Similar Rulings" widget on every ruling detail page now applies the same trust filters the hub pages use: extraction confidence ≥ 0.4, known outcome, and at least one strong-employment claim type. Non-employment rulings (immigration, antitrust) no longer surface as suggestions.
Similar Rulings is the largest single source of internal links on the site (5 per ruling × ~146K rulings ≈ 700K links), so even a small fraction of non-employment rulings here distorts Google's topical understanding of the domain. One immigration case had attracted 2.7K cross-links before this filter shipped. The new filter aligns Similar Rulings with the trust standard used elsewhere — when an attorney reviews a ruling page, the suggestions they see are now on-topic.