Add update and revocation handling for installed official plugins #181

Closed
opened 2026-05-31 19:20:37 +00:00 by steve · 0 comments
Owner

Problem

Installed official plugins need verified update and revocation handling before Full Registry V1 is complete.

Goal

Add compatible update listing, verified update install, revocation handling, and UI explanations for installed official plugins.

Scope

  • List updates by comparing installed records with verified registry details.
  • Install updates through the same verified staging path as fresh installs.
  • Preserve enabled state across update when safe.
  • Handle revoked official releases distinctly from normal updates.
  • Show incompatible update explanations and keep manual/community provenance separate.

Non-goals

  • Do not implement automatic community plugin updates by default.
  • Do not implement full TUF timestamp/snapshot freshness in v1.

Acceptance Criteria

  • Updates tab lists compatible official updates.
  • Update rejects invalid signatures, hashes, manifest mismatches, and platform-incompatible releases.
  • Revoked official releases are elevated in UI and can be disabled or updated safely.
  • Incompatible updates show a disabled action with a clear reason.
  • Manual and community plugins are not mislabeled as official.

Implementation Notes

  • Official auto-update may be supported only behind an explicit user setting.
  • Active plan:
    • Add signed revoked.json parsing/fetching in the registry client and cache it beside catalog metadata.
    • Have PluginDistributionManager.refreshCatalog() apply revocation policy to installed official records without trusting plugin manifests.
    • Expand update listing so official installs can surface compatible updates, incompatible latest releases with reasons, and revoked installed releases with safe update/disable guidance.
    • Preserve enabled state during verified updates by detecting current runtime enabled state and re-enabling after the staged install when safe.
    • Update the Plugins settings registry UI to elevate revoked releases, disable incompatible update actions with explicit reasons, and keep manual/community rows separate.
    • Cover update, incompatible, invalid metadata, and revocation behavior with focused API tests, then run API/workspace checks, spec lint/build, and smoke because this touches app runtime plugin distribution.

Suggested Files or Specs To Inspect

  • packages/api/src/lib/plugin-manager.ts
  • packages/workspace/src/lib/components/configuration
  • spec/src/50-roadmap/full-registry-v1.md

Validation Commands

  • pnpm --filter @lapis-notes/api check:all
  • pnpm --filter @lapis-notes/workspace check:all
  • pnpm test:smoke
  • Full Registry V1 milestone sequence.

Follow-up Tasks

  • Keep follow-up work in separate backlog issues rather than expanding this scope.

Implementation Summary

Added signed revoked.json fetching and caching, applied revocation policy to installed official plugin records, expanded update listing for compatible, incompatible, and revoked states, preserved enabled state during verified updates, surfaced revoked/update states in Plugins settings, and validated checks plus smoke.

## Problem Installed official plugins need verified update and revocation handling before Full Registry V1 is complete. ## Goal Add compatible update listing, verified update install, revocation handling, and UI explanations for installed official plugins. ## Scope - List updates by comparing installed records with verified registry details. - Install updates through the same verified staging path as fresh installs. - Preserve enabled state across update when safe. - Handle revoked official releases distinctly from normal updates. - Show incompatible update explanations and keep manual/community provenance separate. ## Non-goals - Do not implement automatic community plugin updates by default. - Do not implement full TUF timestamp/snapshot freshness in v1. ## Acceptance Criteria - Updates tab lists compatible official updates. - Update rejects invalid signatures, hashes, manifest mismatches, and platform-incompatible releases. - Revoked official releases are elevated in UI and can be disabled or updated safely. - Incompatible updates show a disabled action with a clear reason. - Manual and community plugins are not mislabeled as official. ## Implementation Notes - Official auto-update may be supported only behind an explicit user setting. - Active plan: - Add signed `revoked.json` parsing/fetching in the registry client and cache it beside catalog metadata. - Have `PluginDistributionManager.refreshCatalog()` apply revocation policy to installed official records without trusting plugin manifests. - Expand update listing so official installs can surface compatible updates, incompatible latest releases with reasons, and revoked installed releases with safe update/disable guidance. - Preserve enabled state during verified updates by detecting current runtime enabled state and re-enabling after the staged install when safe. - Update the Plugins settings registry UI to elevate revoked releases, disable incompatible update actions with explicit reasons, and keep manual/community rows separate. - Cover update, incompatible, invalid metadata, and revocation behavior with focused API tests, then run API/workspace checks, spec lint/build, and smoke because this touches app runtime plugin distribution. ## Suggested Files or Specs To Inspect - packages/api/src/lib/plugin-manager.ts - packages/workspace/src/lib/components/configuration - spec/src/50-roadmap/full-registry-v1.md ## Validation Commands - `pnpm --filter @lapis-notes/api check:all` - `pnpm --filter @lapis-notes/workspace check:all` - `pnpm test:smoke` ## Related Issues - Full Registry V1 milestone sequence. ## Follow-up Tasks - Keep follow-up work in separate backlog issues rather than expanding this scope. ## Implementation Summary Added signed revoked.json fetching and caching, applied revocation policy to installed official plugin records, expanded update listing for compatible, incompatible, and revoked states, preserved enabled state during verified updates, surfaced revoked/update states in Plugins settings, and validated checks plus smoke. <!-- backlog:task_id=TASK-PLUGIN-REGISTRY-011 source_spec=spec/src/50-roadmap/full-registry-v1.md -->
steve added this to the Full Registry V1 milestone 2026-05-31 19:20:37 +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#181
No description provided.