Skip to content

fix(site): correct stale package index and broken page metadata - #57

Merged
jbdevprimary merged 1 commit into
mainfrom
fix/directory-drift-guard
Jul 27, 2026
Merged

fix(site): correct stale package index and broken page metadata#57
jbdevprimary merged 1 commit into
mainfrom
fix/directory-drift-guard

Conversation

@jbdevprimary

Copy link
Copy Markdown
Contributor

Two independent defects, both currently shipping on the live site.

1. The package index was advertising a stale version

src/data/directory/directory.json is generated from the package manifests but committed to the repo. Nothing regenerated it when #22 bumped paranoid-passwd to 3.7.0, so the site kept advertising 3.6.5 for chocolatey, homebrew-formula, and scoop.

Regenerated — and added a CI step that re-runs the generator and fails on any diff, so the committed copy can no longer drift silently. Tested both directions:

  • in sync → passes
  • manifest bumped without regenerating → fails with a diff

2. <head> metadata inherited from the upstream Astro template

Problem Before After
OG images /og/<slug>.pngno OG images are generated at all, every page advertised a 404 tags removed; twitter:cardsummary
Home page literal og/undefined.png (no slug prop) n/a — removed
og:url every page → site root real per-page canonical
canonical absent <link rel="canonical"> emitted
favicon / sitemap root-absolute, 404 under /pkgs base-aware
description hardcoded "Astro description" real per-page description
twitter:domain codeagents.dev jonbogaty.com

getOGImage.ts and the unused @vercel/og dependency are deleted rather than left orphaned, and slug — threaded through Article/Listing only to feed getOGImage — is removed end-to-end.

Verification

Emitted HTML confirmed, not just assumed:

canonical: https://jonbogaty.com/pkgs/paranoid-passwd/
icon:      /pkgs/favicon.svg
og:url:    https://jonbogaty.com/pkgs/paranoid-passwd/
desc:      Local-first password manager and generator with CLI and TUI
og:image present? -> 0
undefined refs?   -> 0

astro check clean · build green · node 2/2 · ruby 5/5 · homebrew + scoop validators pass.

Note: radioactive-ralph deliberately NOT bumped

The tap ships ralph 0.8.2 while tags exist up to v0.25.0 — but every release above 0.8.2 is a draft or has zero assets. Draft assets are not publicly downloadable, so bumping would produce a manifest whose URL 404s for users. 0.8.2 still resolves HTTP 200. This needs fixing in jbcom/radioactive-ralph's release pipeline, not here.

Two independent defects, both shipping on the live site.

1. Stale generated directory. src/data/directory/directory.json is generated
   from the package manifests but committed, and nothing regenerated it when
   PR #22 bumped paranoid-passwd to 3.7.0 — so the index kept advertising
   3.6.5 for all three packagers. Regenerated, and added a CI step that
   re-runs the generator and fails on any diff, so the committed copy can no
   longer drift from the manifests silently. The step pins Node via .nvmrc.

2. Broken <head> metadata inherited from the upstream Astro template:
   - og:image / twitter:image pointed at /og/<slug>.png, but this site
     generates no OG images at all — every page advertised a 404, and the
     home page emitted literal "og/undefined.png" (no slug prop). Removed the
     image tags and switched twitter:card to `summary`, which renders
     correctly without an image. getOGImage.ts and the unused @vercel/og
     dependency are deleted rather than left orphaned.
   - og:url pointed every page at the site root; now a real per-page
     canonical URL, and <link rel="canonical"> is emitted.
   - favicon and sitemap used root-absolute paths that 404 under the /pkgs
     base; now base-aware.
   - description was the template's hardcoded "Astro description"; now the
     per-page description callers already passed.
   - twitter:domain was the template's leftover codeagents.dev.

   `slug` was threaded through Article/Listing solely to feed getOGImage, so
   it is removed end-to-end rather than left as an unused prop.

Verified: astro check clean, build green, node 2/2, ruby 5/5, homebrew +
scoop validators pass, and the emitted HTML confirmed to contain per-page
canonicals, /pkgs-based asset paths, real descriptions, and zero og:image or
"undefined" references. Drift guard tested both ways: passes in sync, fails
on a simulated manifest bump.
@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Warning

Review limit reached

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

Next review available in: 36 minutes

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 for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7f77d2bb-68b8-4546-b067-67a460427737

📥 Commits

Reviewing files that changed from the base of the PR and between 9c10543 and bc7e8e6.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (7)
  • .github/workflows/validate-packages.yml
  • package.json
  • src/data/directory/directory.json
  • src/layouts/Article.astro
  • src/layouts/BaseLayout.astro
  • src/layouts/Listing.astro
  • src/util/getOGImage.ts
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/directory-drift-guard

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@amazon-q-developer amazon-q-developer 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.

Review Summary

This PR successfully addresses two production defects with comprehensive fixes:

1. Package Index Synchronization
The CI step added in .github/workflows/validate-packages.yml properly guards against directory.json drift by regenerating and comparing with git diff. This prevents the exact issue where paranoid-passwd showed 3.6.5 when 3.7.0 had shipped.

2. Metadata Corrections
The BaseLayout changes fix multiple SEO and metadata issues inherited from the Astro template:

  • Per-page canonical URLs now work correctly instead of all pointing to site root
  • Base-aware asset paths prevent 404s under the /pkgs subdirectory
  • Twitter card downgraded to summary (appropriate since no OG images are generated)
  • Description metadata now uses actual page descriptions instead of hardcoded "Astro description"
  • Unused @vercel/og dependency and related code properly cleaned up

All changes are well-structured and the implementation correctly achieves the stated goals. No blocking issues found.


You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.

@jbdevprimary
jbdevprimary merged commit 635abf8 into main Jul 27, 2026
10 checks passed
@jbdevprimary
jbdevprimary deleted the fix/directory-drift-guard branch July 27, 2026 05:44
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