Move Markdown Lint into the official plugin registry #190

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

Problem

Markdown Lint is still a bundled system extension even though it is an optional
official feature. To keep Full Registry V1 consistent, Markdown Lint should be
packaged and distributed as an external official plugin after the remaining
plugin release pipeline is working.

Goal

Move Markdown Lint to the official registry as lapis-markdown-lint while
preserving diagnostics, quick fixes, settings behavior, and safe startup when
the plugin is not installed.

Scope

  • Define the registry plugin ID lapis-markdown-lint.
  • Convert or wrap the current bundled system extension so it can be installed
    and enabled as an official external plugin.
  • Preserve existing markdown lint settings and migrate bundled-era data if any
    is keyed by the old extension/plugin ID.
  • Add official registry metadata, release assets, and signed release manifest.
  • Remove Markdown Lint from workspaceSystemExtensions only after install and
    enable flows work.
  • Update package-local and rendered specs.

Non-goals

  • Moving Markdown itself out of the bundle.
  • Moving Bases out of the bundle.
  • Changing markdown lint rules, diagnostics semantics, or quick-fix behavior
    except where needed for installable-plugin lifecycle.
  • Adding third-party registry support.

Acceptance Criteria

  • lapis-markdown-lint is installable from the verified official registry.
  • Enabling the plugin activates markdown lint diagnostics and quick fixes.
  • Disabling or uninstalling the plugin removes markdown lint behavior without
    breaking Markdown editing.
  • Restart persistence works in browser/PWA and Electron.
  • Existing settings/data are preserved or explicitly migrated.
  • Markdown Lint no longer appears as a bundled system extension after the
    registry install path is proven.
  • The workspace no longer imports or dependency-bundles Markdown Lint as a
    default system extension.
  • Installed Markdown Lint records with provenance: "official" appear under
    Core plugins, not Community plugins, while still loading from
    /.obsidian/plugins/lapis-markdown-lint.
  • Optional-core Safe Mode disables Markdown Lint when installed as an official
    plugin; community-plugin Safe Mode does not disable it.
  • Specs document Markdown Lint as an external official plugin.

Implementation Notes

  • This may need a small adapter because the current implementation is a system
    extension rather than a normal plugin registration.
  • Keep Markdown bundled; only Markdown Lint moves.
  • Coordinate with the registry asset activation follow-up so
    lapis-markdown-lint has a validated release before bootstrap removal.
  • Preserve the markdown-lint.disabledRules configuration key and the existing
    provider behavior, including diagnostics and quick fixes.
  • Use lapis-markdown-lint as the plugin manifest ID and keep any bundled-era
    migration compatible with the old markdown-lint extension ID.
  • Add or adjust e2e helper setup so Markdown Lint tests install the official
    plugin explicitly from local generated registry metadata and local release
    artifacts before exercising enable/disable behavior.

Suggested Files or Specs To Inspect

  • packages/plugins/plugin-markdown-lint/
  • packages/workspace/src/lib/components/app/bootstrap.ts
  • spec/src/20-packages/plugins/markdown-lint/index.md
  • spec/src/50-roadmap/full-registry-v1.md
  • /Users/stevejuma/code/lapis-plugin-registry/entries/official/

Validation Commands

  • pnpm --filter @lapis-notes/markdown-lint check:all
  • pnpm --filter @lapis-notes/workspace check:all
  • pnpm check:all
  • pnpm test:smoke
  • Focused markdown lint diagnostics/quick-fix coverage with install, enable,
    disable, uninstall, and restart

Follow-up Tasks

Implementation Summary

Converted Markdown Lint to installable lapis-markdown-lint plugin form while preserving markdown-lint.disabledRules, provider behavior, and quick fixes.

## Problem Markdown Lint is still a bundled system extension even though it is an optional official feature. To keep Full Registry V1 consistent, Markdown Lint should be packaged and distributed as an external official plugin after the remaining plugin release pipeline is working. ## Goal Move Markdown Lint to the official registry as `lapis-markdown-lint` while preserving diagnostics, quick fixes, settings behavior, and safe startup when the plugin is not installed. ## Scope - Define the registry plugin ID `lapis-markdown-lint`. - Convert or wrap the current bundled system extension so it can be installed and enabled as an official external plugin. - Preserve existing markdown lint settings and migrate bundled-era data if any is keyed by the old extension/plugin ID. - Add official registry metadata, release assets, and signed release manifest. - Remove Markdown Lint from `workspaceSystemExtensions` only after install and enable flows work. - Update package-local and rendered specs. ## Non-goals - Moving Markdown itself out of the bundle. - Moving Bases out of the bundle. - Changing markdown lint rules, diagnostics semantics, or quick-fix behavior except where needed for installable-plugin lifecycle. - Adding third-party registry support. ## Acceptance Criteria - `lapis-markdown-lint` is installable from the verified official registry. - Enabling the plugin activates markdown lint diagnostics and quick fixes. - Disabling or uninstalling the plugin removes markdown lint behavior without breaking Markdown editing. - Restart persistence works in browser/PWA and Electron. - Existing settings/data are preserved or explicitly migrated. - Markdown Lint no longer appears as a bundled system extension after the registry install path is proven. - The workspace no longer imports or dependency-bundles Markdown Lint as a default system extension. - Installed Markdown Lint records with `provenance: "official"` appear under Core plugins, not Community plugins, while still loading from `/.obsidian/plugins/lapis-markdown-lint`. - Optional-core Safe Mode disables Markdown Lint when installed as an official plugin; community-plugin Safe Mode does not disable it. - Specs document Markdown Lint as an external official plugin. ## Implementation Notes - This may need a small adapter because the current implementation is a system extension rather than a normal plugin registration. - Keep Markdown bundled; only Markdown Lint moves. - Coordinate with the registry asset activation follow-up so `lapis-markdown-lint` has a validated release before bootstrap removal. - Preserve the `markdown-lint.disabledRules` configuration key and the existing provider behavior, including diagnostics and quick fixes. - Use `lapis-markdown-lint` as the plugin manifest ID and keep any bundled-era migration compatible with the old `markdown-lint` extension ID. - Add or adjust e2e helper setup so Markdown Lint tests install the official plugin explicitly from local generated registry metadata and local release artifacts before exercising enable/disable behavior. ## Suggested Files or Specs To Inspect - `packages/plugins/plugin-markdown-lint/` - `packages/workspace/src/lib/components/app/bootstrap.ts` - `spec/src/20-packages/plugins/markdown-lint/index.md` - `spec/src/50-roadmap/full-registry-v1.md` - `/Users/stevejuma/code/lapis-plugin-registry/entries/official/` ## Validation Commands - `pnpm --filter @lapis-notes/markdown-lint check:all` - `pnpm --filter @lapis-notes/workspace check:all` - `pnpm check:all` - `pnpm test:smoke` - Focused markdown lint diagnostics/quick-fix coverage with install, enable, disable, uninstall, and restart ## Related Issues - Follow-up to #185 — [Migrate remaining installable first-party plugins to the official registry](../open/185-migrate-remaining-installable-first-party-plugins-to-the-official-registry.md) ## Follow-up Tasks ## Implementation Summary Converted Markdown Lint to installable lapis-markdown-lint plugin form while preserving markdown-lint.disabledRules, provider behavior, and quick fixes. <!-- backlog:task_id=TASK-PLUGIN-REGISTRY-MARKDOWN-LINT-OFFICIAL source_spec=spec/src/50-roadmap/full-registry-v1.md related_issue=185 -->
steve added this to the Full Registry V1 milestone 2026-06-01 07:32:19 +00:00
steve 2026-06-02 15:55:03 +00:00
  • closed this issue
  • added
    done
    and removed
    open
    labels
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#190
No description provided.