Exempt Lapis tag lines from markdownlint MD018 #161
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#161
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?
Stock markdownlint MD018 flags valid Lapis tag lines such as
#taskand#project/roadmapas missing-space ATX headings.Problem
In-app markdown lint uses
{ default: true }, so MD018 reports false positives on lowercase tag lines and line-start tag prefixes that Lapis treats as tags, not headings.Goal
Disable stock MD018 and replace it with a Lapis custom rule that preserves MD018 behavior for malformed ATX headings while exempting lowercase tag lines.
Scope
@lapis-notes/language-servicewith tag exemptionNon-goals
.markdownlint-cli2.jsoncCI configAcceptance Criteria
#task,#project/roadmap, indented#task#task Buy milk#Introduction,##Section,###foo,#bad#) preserved for violationsdisabledRules: ["MD018"]suppresses the replacement ruleImplementation Notes
#, lowercase-first name[a-z][a-z0-9_/-]*, followed by EOL or whitespaceMD018,no-missing-space-atx-except-tagsSuggested Files or Specs To Inspect
packages/language-service/src/workers/markdownlint.worker.tspackages/desktop-electron/src-electron/language-service-sidecar-child.tspackages/plugins/plugin-markdown/src/lib/remark-plugins/tag.tsspec/src/20-packages/plugins/markdown-lint/index.mdValidation Commands
pnpm --filter @lapis-notes/language-service testpnpm --filter @lapis-notes/language-service check:allpnpm --filter @lapis-notes/desktop-electron check:typespnpm test:smokeRelated Issues
Follow-up Tasks
Implementation Summary
Disabled stock MD018 in in-app markdownlint config and added a Lapis MD018-lapis custom rule that exempts lowercase tag lines and line-start tag prefixes. Shared createMarkdownlintLintOptions() wires browser worker and Electron sidecar; diagnostics still surface as MD018. Validated with language-service unit tests and package typechecks.