Skip to content

fix(public): guard live llms.txt coverage in both live-site checkers - #109

Closed
nish3451 wants to merge 8 commits into
mainfrom
fix/live-llms-txt-coverage-check
Closed

fix(public): guard live llms.txt coverage in both live-site checkers#109
nish3451 wants to merge 8 commits into
mainfrom
fix/live-llms-txt-coverage-check

Conversation

@nish3451

Copy link
Copy Markdown
Collaborator

Why

The live llms.txt at tinystudio.in lists only 7 of the 12 public URLs — the five per-app support/privacy trust pages are missing:

  • /privacy-choices/
  • /promptly/support/ and /promptly/privacy/
  • /drishti/support/ and /drishti/privacy/

The repo source was already fixed in #68 (public/llms.txt + the bundle generator both list all 12), but the live site still serves the June-20 bundle because the release lane cannot publish until a Cloudflare Pages-scoped token is provisioned (repo has no secrets; the fleet Workers token lacks Pages:Edit). While that provisioning is pending, the regression must be loudly detectable instead of silent.

What

  • scripts/lib/public-pages.mjs — new single source of truth for the 12 public page URLs, so the generator and the live guards cannot drift apart again (drift between lists is how the June-20 bundle shipped with 7 URLs).
  • scripts/check-public-live-deploy.mjs — the release-lane post-deploy verifier now asserts /llms.txt lists every public page (new proof E).
  • scripts/check-public-live-soft-404.mjs — the nightly stale-bundle net now reports exactly which URLs the deployed llms.txt is missing (new check E).
  • scripts/prepare-static-site-bundle.mjs — uses the shared list; behavior unchanged.

Verification

  • node --check clean on all four files.
  • Public test suite green: deploy-bundle 62/62, brand-disambiguation 11/11, heading-hierarchy 62/62, conversion-signal 126/126, structured-data 127/127, link-targets 77/77, social-preview 137/137, soft-404 19/19.
  • Both live guards now fail against the current June-20 bundle with the exact missing list — the loud signal to re-deploy once the Pages token is provisioned:
E. the deployed llms.txt lists every public page (PR #68 live)
  ok GET /llms.txt returns HTTP 200
  FAIL llms.txt lists all 12 public pages (missing: https://tinystudio.in/privacy-choices/, https://tinystudio.in/promptly/support/, https://tinystudio.in/promptly/privacy/, https://tinystudio.in/drishti/support/, https://tinystudio.in/drishti/privacy/)

Follow-up (out of this PR's scope)

The live site itself leaves the June-20 bundle only after the one-time Cloudflare dashboard step: create a Cloudflare Pages: Edit token, then gh secret set CLOUDFLARE_API_TOKEN and gh secret set CLOUDFLARE_ACCOUNT_ID -b f670a698e17bf160c8e4679823e68916 on this repo; the deploy lane then publishes on the next main merge.

…ve-site guards

The June-20 bundle's llms.txt lists only 7 of the 12 public URLs; the
five per-app support/privacy trust pages (privacy-choices, Promptly
support/privacy, Drishti support/privacy) are missing. The repo source
was fixed in #68, but the deploy lane cannot leave the June-20 bundle
until a Pages-scoped token is provisioned, and neither live guard
checked llms.txt coverage - so a stale or truncated llms.txt shipped
silently.

Add a single source of truth (scripts/lib/public-pages.mjs) for the
public page set and assert llms.txt coverage from:
- check-public-live-deploy.mjs: the release-lane post-deploy verifier
  now fails loudly when the deployed llms.txt misses any public page
- check-public-live-soft-404.mjs: the nightly stale-bundle net now
  reports exactly which URLs llms.txt is missing
- prepare-static-site-bundle.mjs: the generator uses the shared list,
  so generator and guards cannot drift again

verify: node --check all four files; public test suite green (test-public-
deploy-bundle 62/62, brand-disambiguation 11/11, heading-hierarchy 62/62,
conversion-signal 126/126, structured-data 127/127, link-targets 77/77,
social-preview 137/137, soft-404 19/19); both live guards now FAIL against
the current June-20 bundle with the exact missing-URL list

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@nish3451, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 12 minutes

Limit details: You’ve used the included review currently available.

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 989ad7d2-de45-4e1e-bed3-bd0dab09c999

📥 Commits

Reviewing files that changed from the base of the PR and between 7b74e1f and 5a9e1af.

📒 Files selected for processing (4)
  • scripts/check-public-live-deploy.mjs
  • scripts/check-public-live-soft-404.mjs
  • scripts/lib/public-pages.mjs
  • scripts/prepare-static-site-bundle.mjs

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8d538629a0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

{
const { status, body } = await get("/llms.txt")
ok(status === 200, `/llms.txt returns 200 (got ${status})`)
const missing = PUBLIC_PAGE_URLS.filter((url) => !body.includes(url))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Match complete llms.txt URL entries

Using body.includes(url) treats parent URLs as present whenever a child URL is listed: for example, https://tinystudio.in/promptly/support/ satisfies checks for both the homepage and /promptly/. Consequently, both live-site guards can pass even if the Home, Promptly, or Drishti entries are absent, defeating the coverage check this commit adds. Parse the file into complete URL tokens or lines and compare exact entries instead.

Useful? React with 👍 / 👎.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

…erage-check

# Conflicts:
#	scripts/check-public-live-deploy.mjs

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@nish3451

Copy link
Copy Markdown
Collaborator Author

Superseded by #154 — 98% of this PR's changes are contained in it, with wider llms.txt coverage across both live checkers. Closing in favour of #154.

@nish3451 nish3451 closed this Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant