Publish registry-hosted plugin README artifacts #199

Closed
opened 2026-06-01 15:19:56 +00:00 by steve · 0 comments
Owner

Route plugin README rendering through registry-hosted static artifacts so app
and browser surfaces are not dependent on third-party README hosts exposing
CORS.

Problem

The registry metadata carries readmeUrl, but direct browser fetches can fail
for valid README URLs when the source host does not expose
Access-Control-Allow-Origin. The public registry site currently links to the
source README instead of rendering plugin detail content inline.

Goal

Fetch README content during the registry site build, publish deterministic
markdown and HTML artifacts, and render README content inline in both the app
plugin registry details and the public registry site.

Scope

  • Add registry-side README artifact publication for readmeUrl values present
    in generated registry metadata.
  • Update the app plugin registry details to fetch README markdown through the
    registry-hosted static artifact before rendering and sanitizing it.
  • Update the Astro registry plugin detail page to render README content inline.
  • Update the plugin registry contract spec.

Non-goals

  • Do not change plugin release manifests or install verification.
  • Do not hash or sign README content.
  • Do not add screenshots/media metadata in this task.

Acceptance Criteria

  • Official and community readmeUrl values route through registry-hosted
    static README artifacts before app rendering.
  • The registry build skips or rejects non-HTTPS, private/local, oversized, and
    non-text README responses.
  • Public plugin detail pages render an inline README panel and retain a source
    README link.
  • README failures fall back to short descriptions and never block install,
    enable, update, or uninstall actions.

Implementation Notes

The registry build should derive artifact generation from generated registry
metadata, not a hard-coded official-host list. App-side caching remains keyed by
the original readmeUrl so README source identity stays visible.

Suggested Files or Specs To Inspect

  • packages/workspace/src/lib/components/configuration/plugin-readme.ts
  • packages/workspace/src/lib/components/configuration/plugins-registry-panel.svelte
  • spec/src/30-cross-package-contracts/plugin-registry.md
  • /Users/stevejuma/code/lapis-plugin-registry/src/pages/plugins/[id].astro
  • /Users/stevejuma/code/lapis-plugin-registry/scripts/lib/readmes.mjs

Validation Commands

  • pnpm --filter @lapis-notes/workspace check:all
  • pnpm --filter @lapis-notes/api check:all
  • make spec-lint
  • mdbook build spec
  • pnpm test:smoke
  • Registry repo: pnpm test
  • Registry repo: pnpm check

Follow-up Tasks

Implementation Summary

Published registry-hosted README artifacts during the registry site build, updated the app plugin details to fetch registry-hosted README markdown and resolve mirrored image assets, documented the static README artifact contract, and verified smoke after a transient first-run timeout.

Route plugin README rendering through registry-hosted static artifacts so app and browser surfaces are not dependent on third-party README hosts exposing CORS. ## Problem The registry metadata carries `readmeUrl`, but direct browser fetches can fail for valid README URLs when the source host does not expose `Access-Control-Allow-Origin`. The public registry site currently links to the source README instead of rendering plugin detail content inline. ## Goal Fetch README content during the registry site build, publish deterministic markdown and HTML artifacts, and render README content inline in both the app plugin registry details and the public registry site. ## Scope - Add registry-side README artifact publication for `readmeUrl` values present in generated registry metadata. - Update the app plugin registry details to fetch README markdown through the registry-hosted static artifact before rendering and sanitizing it. - Update the Astro registry plugin detail page to render README content inline. - Update the plugin registry contract spec. ## Non-goals - Do not change plugin release manifests or install verification. - Do not hash or sign README content. - Do not add screenshots/media metadata in this task. ## Acceptance Criteria - Official and community `readmeUrl` values route through registry-hosted static README artifacts before app rendering. - The registry build skips or rejects non-HTTPS, private/local, oversized, and non-text README responses. - Public plugin detail pages render an inline README panel and retain a source README link. - README failures fall back to short descriptions and never block install, enable, update, or uninstall actions. ## Implementation Notes The registry build should derive artifact generation from generated registry metadata, not a hard-coded official-host list. App-side caching remains keyed by the original `readmeUrl` so README source identity stays visible. ## Suggested Files or Specs To Inspect - `packages/workspace/src/lib/components/configuration/plugin-readme.ts` - `packages/workspace/src/lib/components/configuration/plugins-registry-panel.svelte` - `spec/src/30-cross-package-contracts/plugin-registry.md` - `/Users/stevejuma/code/lapis-plugin-registry/src/pages/plugins/[id].astro` - `/Users/stevejuma/code/lapis-plugin-registry/scripts/lib/readmes.mjs` ## Validation Commands - `pnpm --filter @lapis-notes/workspace check:all` - `pnpm --filter @lapis-notes/api check:all` - `make spec-lint` - `mdbook build spec` - `pnpm test:smoke` - Registry repo: `pnpm test` - Registry repo: `pnpm check` ## Related Issues - Follow-up to #197 — [Render mutable registry README details](../closed/197-render-mutable-registry-readme-details.md) ## Follow-up Tasks ## Implementation Summary Published registry-hosted README artifacts during the registry site build, updated the app plugin details to fetch registry-hosted README markdown and resolve mirrored image assets, documented the static README artifact contract, and verified smoke after a transient first-run timeout. <!-- backlog:task_id=TASK-PLUGIN-REGISTRY-README-PROXY source_spec=spec/src/30-cross-package-contracts/plugin-registry.md related_issue=197 -->
steve added this to the Full Registry V1 milestone 2026-06-01 15:19:56 +00:00
steve changed title from Proxy plugin README rendering through registry API to Publish registry-hosted plugin README artifacts 2026-06-01 15:36:43 +00:00
steve closed this issue 2026-06-01 15:36:44 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lapis-notes/lapis#199
No description provided.