Replace official plugin release assets with single .lapis-plugin bundles #348
Labels
No labels
abandoned
active
audit
blocked
data-safety
difficulty:easy
difficulty:hard
difficulty:high
difficulty:medium
docs
done
duplicate
notebook-v0
open
priority:high
ready
release-critical
safe-mode
spec
spec-backlog
subsystem:api
subsystem:backlog
subsystem:bases
subsystem:ci
subsystem:command
subsystem:configuration
subsystem:consolidate
subsystem:dependencies
subsystem:desktop-electron
subsystem:diffmerge
subsystem:docker
subsystem:docs
subsystem:fuzzy
subsystem:graph
subsystem:hotkeys
subsystem:lapis
subsystem:maint
subsystem:maintenance
subsystem:markdown
subsystem:markdown-lint
subsystem:md018
subsystem:notebook
subsystem:notifications
subsystem:opfs
subsystem:package
subsystem:plugin-markdown
subsystem:plugin-tasks
subsystem:plugins
subsystem:registry
subsystem:release
subsystem:renovate
subsystem:restore
subsystem:scripts
subsystem:search
subsystem:settings
subsystem:spec
subsystem:tasks
subsystem:testing
subsystem:ui
subsystem:web
subsystem:workspace
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
lapis-notes/lapis#348
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Official plugin releases currently publish a signed manifest, audit metadata,
zip, and every installable file as separate Forgejo release assets. This makes
the download surface confusing and leaves the app/registry maintaining two
distribution concepts.
Problem
Forgejo release pages for official plugins expose many assets for a single
plugin version. Users should see one plugin download, matching VS Code and
Obsidian-style distribution expectations.
Goal
Replace the official registry distribution format with one signed
.lapis-pluginbundle per plugin/version and remove the old file-based releasepath from the app repo and registry repo.
Scope
<plugin-id>-<version>.lapis-pluginasset per official plugin version.bundle metadata only.
official
.lapis-pluginbundle through the same verification path./Users/stevejuma/code/lapis-plugin-registrysyncs deterministic Forgejoreleases from
.lapis-pluginbundles only, updates schemas/generated metadata,removes legacy file-asset sync code, and shows bundle sizes on the registry
site.
contract.
Non-goals
.obsidian/plugins/<plugin-id>/..lapis-pluginbundles.releaseManifest,artifact.json, uploaded.zip,file-*release assets, or optionalpost-install file downloads.
Acceptance Criteria
registry-assets:publish -- --dry-runstages one.lapis-pluginper selectedplugin/version and no signed manifest, artifact JSON, zip, or
file-*assets.bundle: { url, sha256, size }for eachrelease and does not record
releaseManifestor remote per-file URLs.the embedded signed release manifest, validates each embedded file hash/size
and safe path, then installs the plugin folder.
unsafe embedded file paths fail before final install.
and installed views, with installed-size fallback when detail metadata is not
loaded.
.lapis-plugininstall in Plugin registry settings verifies officialsignature and records official provenance.
/Users/stevejuma/code/lapis-plugin-registrysyncs bundle-only releases,removes legacy release-asset sync code, validates generated metadata, and
shows bundle sizes plus a single primary bundle download on plugin pages.
Implementation Notes
official-plugin-assets-<plugin-id>-<version>..lapis-pluginas a deterministic zip-compatible archive containingrelease.signed.jsonand all plugin files at archive root.encrypted, ZIP64, duplicate, or unsafe entries in the bundle reader.
registry repo has no local AGENTS/backlog requirement, but its changes must be
committed separately with
jj.Suggested Files or Specs To Inspect
scripts/plugin-release.mjsscripts/publish-official-plugin-assets.mjspackages/api/src/lib/plugin-distribution/**packages/workspace/src/lib/components/configuration/plugins-registry-panel.sveltespec/src/30-cross-package-contracts/plugin-registry.mdspec/src/80-maintenance/monorepo-scripts.md/Users/stevejuma/code/lapis-plugin-registry/scripts/sync-forgejo-releases.mjs/Users/stevejuma/code/lapis-plugin-registry/schemas/**/Users/stevejuma/code/lapis-plugin-registry/src/pages/plugins/[id].astroValidation Commands
pnpm test:scriptspnpm --filter @lapis-notes/api check:allpnpm --filter @lapis-notes/api testpnpm --filter @lapis-notes/workspace check:allpnpm --filter @lapis-notes/workspace testpnpm check:allpnpm testpnpm test:smokemdbook build spec/Users/stevejuma/code/lapis-plugin-registry:pnpm test/Users/stevejuma/code/lapis-plugin-registry:pnpm checkRelated Issues
Follow-up Tasks
Implementation Summary
Replaced official plugin distribution with deterministic .lapis-plugin bundles, updated app install/update/manual install flows, removed legacy per-file release downloads and notebook lazy release hooks, added bundle size display, and synced specs/tests.