Hard-block monday.com apex so it can never be graded#28
Merged
Conversation
The detection layer already rejects monday.com, but the cache lookup runs before detection — a stale cached row would still be served. Add an apex-only block (exact host + www, subdomains excluded) that runs before the cache and scoring, guaranteeing the marketing apex is rejected while developers.monday.com and other docs subdomains stay gradeable. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
kgowru
added a commit
that referenced
this pull request
Jun 5, 2026
* feat: switch category inference from OpenAI to Claude Haiku Replace gpt-4o-mini with claude-haiku-4-5 in the LLM fallback for category classification. Uses ANTHROPIC_API_KEY instead of OPENAI_API_KEY. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat: redirect known duplicate slugs to canonical leaderboard entry Add a slug-alias map so typing a domain like monday.com (which resolves to the weaker "monday" slug) lands on the curated leaderboard entry "developer-monday-com-apps". Applied in the score API and the company page so both search and direct navigation redirect to the canonical slug. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: keep *.ferndocs.com sites distinct from canonical company slug (#23) Fern preview/staging hosts (*.ferndocs.com) now always slug by URL instead of the derived company name, so e.g. docusign.ferndocs.com no longer collapses onto the "docusign" slug and return the cached live entry. These sites are now graded as distinct entries. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: route monday.com to canonical api-reference leaderboard entry (#25) * fix: route monday.com to canonical api-reference leaderboard entry The "monday" alias pointed at developer-monday-com-apps, which has since been hidden (score 68/D). Repoint to developer-monday-com-api-reference, the visible canonical entry (score 91/A). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: make slug alias a lookup redirect, never a scoring target Previously a forced rerun (or dev run) of monday.com would score https://monday.com and upsert it under the aliased slug developer-monday-com-api-reference, clobbering the curated A-grade entry. Now the alias only redirects cache lookups to the existing canonical entry; scoring always stores under the raw slug. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: reject apex marketing sites that ship an llms.txt (e.g. monday.com) (#27) An llms.txt returning 200 short-circuited docs detection, so marketing homepages that now ship one (monday.com) were graded as docs sites. At a bare apex/root, llms.txt is no longer sufficient on its own; we defer to the homepage content check (only a visible marketing page is rejected, and deeper paths / docs subdomains still pass). Also drop the now-unneeded monday slug alias. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: hard-block monday.com apex so it can never be graded as docs (#28) The detection layer already rejects monday.com, but the cache lookup runs before detection — a stale cached row would still be served. Add an apex-only block (exact host + www, subdomains excluded) that runs before the cache and scoring, guaranteeing the marketing apex is rejected while developers.monday.com and other docs subdomains stay gradeable. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: redirect monday.com apex to curated developer-docs entry instead of erroring Hard-blocking monday.com produced a confusing "not eligible for scoring" dead-end. Instead, drop the apex block and restore the SLUG_ALIASES entry (monday -> developer-monday-com-api-reference) so the cache lookup surfaces the existing curated developer-docs entry and the frontend navigates there. The detection fix still rejects the marketing apex as a backstop, so monday.com is never scored; developers.monday.com remains gradeable. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: redirect aliased domains in dev too, before docs detection The monday.com -> developer-docs redirect lived only inside the prod-gated cache block, so in local dev it was skipped and monday.com hit the "not a docs site" detection rejection. Resolve an explicit alias up front (dev and prod, even with force, before detection): if the curated entry exists, return { existing: true, slug } so the frontend navigates straight to it. Falls through to normal scoring only when the curated entry is missing. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: add Vitest framework and cover docs-eligibility / monday behavior Adds Vitest (npm test / test:watch) with no app changes beyond extracting the testable logic into lib modules: - lib/docs-detection.ts: detectDocsUrl + the docs regexes (was inline in the route) - lib/slug.ts: urlToSlug / nameToSlug (was inline in the route) Tests (25) cover the eligibility logic with a stubbed fetch: - docs-detection: subdomain/path/platform acceptance, apex marketing rejection even when an llms.txt is present (the monday.com case), llms.txt nuance, and unreachable-page handling - blocked-domains, slug-aliases, slug derivation - monday-behavior: an executable spec — monday.com apex is not blocked, aliases to the curated developer-docs entry, and is rejected by detection as a backstop; developers.monday.com stays gradeable Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The detection fix in #27 correctly rejects the monday.com marketing apex, but the cache lookup in the score route runs before detection — so a stale cached row (or a future detection flake) would still serve a score. This adds an apex-only entry to
isBlockedDomain, which runs before the cache and before scoring, guaranteeing the marketing apexmonday.com(andwww.) is always rejected. Subdomains are explicitly not matched, sodevelopers.monday.comand other docs subdomains stay gradeable.🤖 Generated with Claude Code