Surfaced while building #11, which had to decide "will the repo's Action publish this file?" from local evidence.
The inconsistency
The plugin and the CLI disagree about what .mdx means.
The plugin treats .mdx as the PRIMARY intent-to-publish signal. hooks/lib.sh:is_doc():
*.mdx) return 0 ;; # authoring it IS the intent to publish
*/docs/*.md|*/docs/*/*.md|…) return 0 ;; # .md only under docs/
.mdx qualifies anywhere in the tree; .md only under a docs/ directory.
The CI template the CLI emits publishes .md only. From basalt onboard --print-workflow:
on:
push:
branches: [main]
paths: ['**.md']
...
run: git ls-files '*.md' | xargs basalt publish $FLAGS
Both the paths: filter and the git ls-files glob miss .mdx.
The consequence
A user who follows the plugin's own doctrine — author .mdx, install the emitted workflow — gets docs that the hook considers publishable and the Action never publishes. Nothing errors. The doc simply never appears.
This is not a tail case. It is the default path for a new user: basalt onboard writes that workflow, and .mdx is the extension the plugin signals hardest on.
Observed corroboration: a real repo-backed vault publishing .mdx today only does so because its workflow was hand-edited to add '**.mdx' to both filters. The emitted template would not have.
Why it is filed rather than fixed in #11
#11's hook evaluates the workflow's actual paths: list rather than assuming either extension, so it is correct under both shapes — under the emitted template an .mdx correctly keeps nagging (nothing publishes it), and under a widened one it correctly goes silent. That makes the hook honest about the inconsistency; it does not resolve it.
The decision this needs
One of the two is wrong, and it is a product call, not a hook call:
- the emitted template should publish
**.mdx as well — the plugin's is_doc() is right; or
.mdx should not be the plugin's primary publish signal — the template is right.
Whichever, the two should ship together, since the gap is only visible to a user who follows both.
Surfaced while building #11, which had to decide "will the repo's Action publish this file?" from local evidence.
The inconsistency
The plugin and the CLI disagree about what
.mdxmeans.The plugin treats
.mdxas the PRIMARY intent-to-publish signal.hooks/lib.sh:is_doc():.mdxqualifies anywhere in the tree;.mdonly under adocs/directory.The CI template the CLI emits publishes
.mdonly. Frombasalt onboard --print-workflow:Both the
paths:filter and thegit ls-filesglob miss.mdx.The consequence
A user who follows the plugin's own doctrine — author
.mdx, install the emitted workflow — gets docs that the hook considers publishable and the Action never publishes. Nothing errors. The doc simply never appears.This is not a tail case. It is the default path for a new user:
basalt onboardwrites that workflow, and.mdxis the extension the plugin signals hardest on.Observed corroboration: a real repo-backed vault publishing
.mdxtoday only does so because its workflow was hand-edited to add'**.mdx'to both filters. The emitted template would not have.Why it is filed rather than fixed in #11
#11's hook evaluates the workflow's actual
paths:list rather than assuming either extension, so it is correct under both shapes — under the emitted template an.mdxcorrectly keeps nagging (nothing publishes it), and under a widened one it correctly goes silent. That makes the hook honest about the inconsistency; it does not resolve it.The decision this needs
One of the two is wrong, and it is a product call, not a hook call:
**.mdxas well — the plugin'sis_doc()is right; or.mdxshould not be the plugin's primary publish signal — the template is right.Whichever, the two should ship together, since the gap is only visible to a user who follows both.