Skip to content

fix(public): guard the live site against missing social preview imagery - #153

Merged
nish3451 merged 35 commits into
mainfrom
fix/lane1-live-social-preview-guard-20260814
Aug 19, 2026
Merged

fix(public): guard the live site against missing social preview imagery#153
nish3451 merged 35 commits into
mainfrom
fix/lane1-live-social-preview-guard-20260814

Conversation

@nish3451

Copy link
Copy Markdown
Collaborator

The item

Social preview imagery missing on 7 of 12 public pages — class gap after the closed /promptly work.

Finding

The source fix is already merged to main (PR #26, ffe6e1f): all 12 pages in public/ declare the full og:image + twitter:image blocks, and scripts/test-public-social-preview.mjs guards the static files. The gap is live-only: the deployed tinystudio.in is a stale bundle and exactly the 7 pages from the item (privacy, privacy-choices, terms, promptly/support, promptly/privacy, drishti/support, drishti/privacy) still ship with no og:image and a summary-only twitter card. Live deploy is blocked by the missing CLOUDFLARE_API_TOKEN secret (NEEDS-NISH, canonical deploy-pipeline item).

What this PR adds

A live-site guard so the stale state can never silently recur:

  • scripts/check-public-live-social-preview.mjs — fetches all 12 public pages from the live site and requires the complete og:image block (secure_url, type, 1200x630, alt), the summary_large_image card, matching twitter:image, and that every referenced image is served.
  • Wired as npm run site:check-live-social-preview.
  • New live-social-preview job in the nightly live-site-check.yml, following the fix(public): keep live-site soft-404 check out of the blocking ci chain #84 pattern (live-only, network-tolerant, SKIP_LIVE_CHECKS=1 escape hatch, deliberately not in npm run ci so the blocking chain stays green on repo state).

Verification

  • Guard run against the live site: fails with exactly the 7 stale pages (21 failures) while all three social images are served (200) — the staleness alarm is live and accurate.
  • node --check passes; all public-site tests pass (test-public-social-preview.mjs and the other 9 public tests).
  • npm test's retention failure is pre-existing and unrelated (reproduces on a clean origin/main checkout; it inspects the canonical main worktree's private state, not this lane).
  • The workflow header's stale "June-20 bundle" comment was updated to describe the current deployment accurately.

Live delivery is still blocked

This PR makes the stale deployment loud (nightly red run until the token exists), matching how the soft-404 and heading-hierarchy gaps are guarded. The actual byte-level delivery of the merged imagery fix needs the Cloudflare token: gh secret set CLOUDFLARE_API_TOKEN -R nish3451/tinystudio-in — then the deploy lane publishes on the next main push.

nish3451 and others added 2 commits August 14, 2026 18:36
The repo fix for the 7 pages missing og:image/twitter:image is already in
main (#26), and test-public-social-preview.mjs guards the static files. But
nothing guards the DEPLOYED site: the live tinystudio.in still serves a
stale bundle, and exactly the 7 pages from the class-gap item (privacy,
privacy-choices, terms, promptly/support, promptly/privacy, drishti/support,
drishti/privacy) ship with no og:image and a summary-only twitter card, so
shared links render as bare text cards.

Add scripts/check-public-live-social-preview.mjs, which fetches all 12
public pages from the live site and requires the complete og:image block
(secure_url, type, 1200x630, alt), the summary_large_image card, matching
twitter:image, and that every referenced image file is served. It runs as
npm run site:check-live-social-preview and from the nightly
live-site-check workflow, following the #84 pattern for live-site guards
(live-only, network-tolerant, SKIP_LIVE_CHECKS escape hatch, deliberately
NOT part of npm run ci so the blocking chain stays green on repo state).

Verified against the live site: the guard fails with exactly the 7 stale
pages (21 failures) while all three social images are served, so the
staleness alarm is live. All public-site tests pass; npm test's unrelated
retention failure pre-exists on clean origin/main.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
…ive blocked on missing Cloudflare token

Lane 1 verification report: the 7-page social preview imagery fix is already
merged to main (PR #26, ffe6e1f) and test-public-social-preview.mjs guards the
static files. The live tinystudio.in still serves the stale bundle with exactly
the 7 pages from the item missing og:image, and live delivery is blocked only by
the missing CLOUDFLARE_API_TOKEN secret (NEEDS-NISH, deploy-pipeline item).

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
@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.

@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.

@coderabbitai

coderabbitai Bot commented Aug 14, 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: 22 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: 797769da-982d-4ba5-b6a0-74cafe736cc3

📥 Commits

Reviewing files that changed from the base of the PR and between b61b6a9 and 80de20f.

📒 Files selected for processing (4)
  • .github/workflows/live-site-check.yml
  • .lane/reports/fix-lane1-live-social-preview-guard-20260814.md
  • package.json
  • scripts/check-public-live-social-preview.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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

@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.

PR #152 landed a live-tap-targets job in live-site-check.yml at the same
place this branch adds live-social-preview. Kept both as separate jobs with
the same scaffolding; YAML re-validated.

@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.

@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.

@nish3451
nish3451 merged commit b958318 into main Aug 19, 2026
4 checks passed
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