Skip to content

Commit 2a871e1

Browse files
Copilotjeduden
andauthored
docs: use catalog directive for README comparison link; fix review issues; add Obsidian
Agent-Logs-Url: https://github.com/jeduden/mdsmith/sessions/3991a7bc-82a8-4cb8-bcc2-78a21b8fe49a Co-authored-by: jeduden <1117699+jeduden@users.noreply.github.com>
1 parent dac2844 commit 2a871e1

5 files changed

Lines changed: 51 additions & 21 deletions

File tree

.github/copilot-instructions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ row: "- [{summary}](../{filename})"
2929
- [Shared patterns (archetypes) reused across multiple linting rules.](../docs/background/archetypes/README.md)
3030
- [How "flavor" (a property of the renderer), "rule" (a single check), "convention" (a project-wide bundle), and "kind" (a per-file role tag) differ in mdsmith, the cases where they overlap, and how the four concepts compose.](../docs/background/concepts/flavor-rule-convention-kind.md)
3131
- [How the placeholder vocabulary lets rules treat template tokens as opaque rather than flagging them as content violations.](../docs/background/concepts/placeholder-grammar.md)
32-
- [Comparison of mdsmith with other Markdown linters and formatters.](../docs/background/markdown-linters.md)
32+
- [How mdsmith compares to other Markdown linters.](../docs/background/markdown-linters.md)
3333
- [Codecov coverage gate and CI status checks.](../docs/development/coverage.md)
3434
- [Where to place Markdown files and documentation types.](../docs/development/file-placement.md)
3535
- [Build commands, project layout, code style, test fixtures, coverage gate, and merge conflicts.](../docs/development/index.md)

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ row: "- [{summary}]({filename})"
3535
- [Shared patterns (archetypes) reused across multiple linting rules.](docs/background/archetypes/README.md)
3636
- [How "flavor" (a property of the renderer), "rule" (a single check), "convention" (a project-wide bundle), and "kind" (a per-file role tag) differ in mdsmith, the cases where they overlap, and how the four concepts compose.](docs/background/concepts/flavor-rule-convention-kind.md)
3737
- [How the placeholder vocabulary lets rules treat template tokens as opaque rather than flagging them as content violations.](docs/background/concepts/placeholder-grammar.md)
38-
- [Comparison of mdsmith with other Markdown linters and formatters.](docs/background/markdown-linters.md)
38+
- [How mdsmith compares to other Markdown linters.](docs/background/markdown-linters.md)
3939
- [Codecov coverage gate and CI status checks.](docs/development/coverage.md)
4040
- [Where to place Markdown files and documentation types.](docs/development/file-placement.md)
4141
- [Build commands, project layout, code style, test fixtures, coverage gate, and merge conflicts.](docs/development/index.md)

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ row: "- [{summary}]({filename})"
2121
- [Shared patterns (archetypes) reused across multiple linting rules.](docs/background/archetypes/README.md)
2222
- [How "flavor" (a property of the renderer), "rule" (a single check), "convention" (a project-wide bundle), and "kind" (a per-file role tag) differ in mdsmith, the cases where they overlap, and how the four concepts compose.](docs/background/concepts/flavor-rule-convention-kind.md)
2323
- [How the placeholder vocabulary lets rules treat template tokens as opaque rather than flagging them as content violations.](docs/background/concepts/placeholder-grammar.md)
24-
- [Comparison of mdsmith with other Markdown linters and formatters.](docs/background/markdown-linters.md)
24+
- [How mdsmith compares to other Markdown linters.](docs/background/markdown-linters.md)
2525
- [Codecov coverage gate and CI status checks.](docs/development/coverage.md)
2626
- [Where to place Markdown files and documentation types.](docs/development/file-placement.md)
2727
- [Build commands, project layout, code style, test fixtures, coverage gate, and merge conflicts.](docs/development/index.md)

README.md

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,19 +68,14 @@ binary. No network calls. Drop the output into
6868
`.cursor/rules`, `AGENTS.md`, or `CLAUDE.md` and your
6969
agent knows the rules without an extra fetch.
7070

71-
**🆚 How does it compare?**
72-
See
73-
[Markdown linters compared](docs/background/markdown-linters.md)
74-
for a rule-by-rule breakdown. It covers
75-
[markdownlint](https://github.com/DavidAnson/markdownlint),
76-
[remark-lint](https://github.com/remarkjs/remark-lint),
77-
[Prettier](https://prettier.io/),
78-
[Vale](https://github.com/errata-ai/vale),
79-
[textlint](https://github.com/textlint/textlint), and
80-
[Hugo](https://gohugo.io/). It also notes the
81-
differences in autofix, the merge driver, the `query`
82-
subcommand, security posture, and future plans
83-
tracked in [PLAN.md](PLAN.md).
71+
**🆚 How does it compare?** See:
72+
<?catalog
73+
glob:
74+
- "docs/background/markdown-linters.md"
75+
row: "- [{summary}]({filename})"
76+
?>
77+
- [How mdsmith compares to other Markdown linters.](docs/background/markdown-linters.md)
78+
<?/catalog?>
8479

8580
## 📦 Installation
8681

docs/background/markdown-linters.md

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
summary: Comparison of mdsmith with other Markdown linters and formatters.
2+
summary: How mdsmith compares to other Markdown linters.
33
---
44
# Markdown Linters Comparison
55

@@ -136,7 +136,38 @@ To ease migration, mdsmith maps common Hugo template
136136
fields to placeholders. See the
137137
[Hugo migration guide][hugo-migration] for that mapping.
138138

139-
### LLM as Linter
139+
### [Obsidian][]
140+
141+
Electron app. Markdown note-taking tool with local-first
142+
storage. ~60k stars. Included here because teams that
143+
write docs in Obsidian often want structural linting on
144+
the same `.md` files.
145+
146+
- Uses its own [Obsidian Flavored Markdown][obsidian-fm]
147+
(OFM): wikilinks (`[[Page]]`), callouts (blockquote
148+
with `[!type]` prefix), embed syntax (`![[file.png]]`),
149+
and inline metadata (`key:: value`)
150+
- No built-in linter — community plugins (e.g. [Linter
151+
plugin][obsidian-linter]) add YAML front matter fixes,
152+
heading normalisation, and whitespace rules
153+
- Files are plain `.md` on disk and are committed to Git
154+
like any other source; CI can run mdsmith over the vault
155+
156+
| Aspect | Obsidian | mdsmith |
157+
|--------------------|-----------------------------------|--------------------------------------|
158+
| Purpose | Note-taking editor | Linter / fixer |
159+
| Linting | Community plugin only | Built-in, CI-ready |
160+
| Wikilinks | Native (`[[Page]]`) | Treated as text; no validation |
161+
| Callouts | Native (`> [!note]`) | Treated as blockquotes |
162+
| Front matter | YAML or Dataview inline (`key::`) | YAML only (inline not recognized) |
163+
| Agent friendliness | Editor-centric, manual saves | Direct file access, no editor needed |
164+
165+
mdsmith can lint the Markdown subset that Obsidian and
166+
standard parsers share. Wikilinks and callouts pass
167+
through without errors (they look like valid Markdown
168+
to CommonMark parsers). Dataview inline fields are not
169+
front matter and will not be read by mdsmith's
170+
`require`/`schema` directives.
140171

141172
Using language models (GPT-4, Claude, etc.) directly to
142173
check prose quality, conciseness, and style. This is
@@ -517,8 +548,8 @@ current posture:
517548
| Hardening | mdsmith | markdownlint | remark-lint | Prettier | Vale |
518549
|------------------------------------|------------------------|-----------------|------------------|------------------|-----------|
519550
| File-size cap on input | yes | no | no | no | no |
520-
| YAML billion-laughs guard | yes (anchor cap) | n/a (no FM) | parser-dependent | parser-dependent | n/a |
521-
| ANSI escape sanitisation | yes | no | no | n/a | no |
551+
| YAML billion-laughs guard | yes (alias rejection) | n/a (no FM) | parser-dependent | parser-dependent | n/a |
552+
| ANSI escape sanitization | yes | no | no | n/a | no |
522553
| Symlinks denied by default | yes | follows | follows | follows | follows |
523554
| Cross-file links sandboxed to repo | yes ([MDS027][mds027]) | n/a | plugin-dependent | n/a | n/a |
524555
| Include size cap | yes | n/a | n/a | n/a | n/a |
@@ -555,7 +586,7 @@ items most relevant to this comparison are:
555586
[104][plan104]) — a `mdsmith build` subcommand with
556587
a `<?build?>` directive, staleness tracking, and
557588
lifecycle hooks. This will close part of the gap
558-
with Hugo: deriving artefacts from Markdown sources
589+
with Hugo: deriving artifacts from Markdown sources
559590
without leaving the linter.
560591
- **Closing rule gaps with markdownlint** — plans
561592
[105][plan105] (no-inline-html / MD033),
@@ -693,6 +724,10 @@ you need a stable rule set while these land.
693724
[Hugo]: https://gohugo.io/
694725
[hugo-shortcodes]: https://gohugo.io/content-management/shortcodes/
695726
[hugo-migration]: ../guides/directives/hugo-migration.md
727+
<!-- obsidian links -->
728+
[Obsidian]: https://obsidian.md/
729+
[obsidian-fm]: https://help.obsidian.md/Editing+and+formatting/Obsidian+Flavored+Markdown
730+
[obsidian-linter]: https://github.com/platers/obsidian-linter
696731
<!-- mdsmith plan + security + reference links -->
697732
[mdsmith-sec]: ../security/2026-04-05-adversarial-markdown.md
698733
[conventions]: ../reference/conventions.md

0 commit comments

Comments
 (0)