Skip to content

Commit bd7240e

Browse files
jedudenclaude
andauthored
Plan 130: Binary distribution via npm, PyPI, asdf, mise, and VS Code (#237)
* Add plan 130: binary distribution via npm/PyPI/asdf/mise + tag-based versioning Plans how to publish prebuilt mdsmith binaries through npm (optionalDependencies pattern), PyPI wheels (consumed by pip and uv), an asdf plugin, and the mise registry on every v* tag, and how to drive every manifest's version from the git tag instead of a hard-coded literal. * plan/130: also publish the VS Code extension to Marketplace and Open VSX Adds a sixth distribution channel covering the Visual Studio Marketplace and Open VSX (for VSCodium, Cursor, Theia, Gitpod). Both registries upload the same .vsix that the GitHub release attaches, keeping all three artifacts byte-identical. Documents the VSCE_PAT and OVSX_PAT secrets and rotation cadence. * plan/130: address Copilot review feedback - Background: correct windows/arm64 claim — release.yml builds linux+darwin on amd64/arm64 plus windows on amd64 only. - npm: rename platform source dirs to use Node conventions (matching the published package name) and add an explicit asset → npm-package mapping table so the GOOS→Node translation is unambiguous. * plan/130: clarify asdf list-all tag parsing Copilot review: list-all needs to strip refs/tags/, drop ^{} deref entries, and remove the leading v so asdf sees plain X.Y.Z versions matching the acceptance-criteria install command. * plan/130: use --packagePath consistently for ovsx publish Copilot review: task 3 used positional <vsix> for ovsx but --packagePath for vsce, contradicting the strategy section's claim that both forms use --packagePath. Switch ovsx to --packagePath to keep the byte-identical guarantee unambiguous. --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 5e36d99 commit bd7240e

2 files changed

Lines changed: 362 additions & 45 deletions

File tree

PLAN.md

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,49 +14,50 @@ footer: |
1414
1515
?>
1616

17-
| ID | Status | Model | Title |
18-
|-----|--------|--------|------------------------------------------------------------------------------------------------------|
19-
| 100 || sonnet | [build config block and MDS040 recipe-safety rule](plan/100_build-config-and-mds040.md) |
20-
| 101 || sonnet | [build directive and MDS039 lint rule](plan/101_build-directive-mds039.md) |
21-
| 102 | 🔲 | opus | [Builder interface and mdsmith build subcommand](plan/102_build-subcommand.md) |
22-
| 103 | 🔲 | opus | [Build target staleness and dependency tracking](plan/103_build-staleness-and-deps.md) |
23-
| 104 | 🔲 | sonnet | [Build lifecycle hooks (before/after)](plan/104_build-lifecycle-hooks.md) |
24-
| 105 || sonnet | [No inline HTML rule](plan/105_no-inline-html.md) |
25-
| 106 || sonnet | [Emphasis style rule](plan/106_emphasis-style.md) |
26-
| 107 || opus | [No reference-style links rule](plan/107_no-reference-style.md) |
27-
| 108 || sonnet | [Horizontal rule style rule](plan/108_horizontal-rule-style.md) |
28-
| 109 || sonnet | [List marker style rule](plan/109_list-marker-style.md) |
29-
| 110 || sonnet | [Ordered list numbering rule](plan/110_ordered-list-numbering.md) |
30-
| 111 || sonnet | [Ambiguous emphasis rule](plan/111_ambiguous-emphasis.md) |
31-
| 112 || opus | [Markdown convention bundles for MDS034](plan/112_flavor-profiles.md) |
32-
| 113 | 🔲 | sonnet | [User-defined Markdown conventions](plan/113_user-defined-profiles.md) |
33-
| 114 || sonnet | [MDS034 message clarity and flavor-vs-rule docs](plan/114_mds034-message-and-flavor-vs-rule-docs.md) |
34-
| 120 || sonnet | [Unify glob matcher and field naming across mdsmith](plan/120_glob-unification.md) |
35-
| 121 || opus | [Expose mdsmith to VS Code via Language Server Protocol](plan/121_vscode-integration.md) |
36-
| 121 || sonnet | [Review and centralize YAML handling](plan/121_yaml-handling-review.md) |
37-
| 122 | 🔲 | sonnet | [VS Code hover help and palette commands](plan/122_vscode-hover-and-palette.md) |
38-
| 124 || sonnet | [No space inside code spans rule](plan/124_no-space-in-code-spans.md) |
39-
| 125 || sonnet | [No space inside link text rule](plan/125_no-space-in-link-text.md) |
40-
| 126 || sonnet | [Proper-name capitalization rule](plan/126_proper-names.md) |
41-
| 127 || sonnet | [Single H1 per file rule](plan/127_single-h1.md) |
42-
| 128 || sonnet | [Reject undefined reference-link labels](plan/128_no-undefined-reference-labels.md) |
43-
| 129 || sonnet | [Flag unused or duplicate link reference definitions](plan/129_no-unused-link-definitions.md) |
44-
| 52 || | [Archetype / Template Library for Agentic Patterns](plan/52_archetype-template-library.md) |
45-
| 61 || | [Required Structure Rule Hardening](plan/61_required-structure-hardening.md) |
46-
| 65 || | [Spike WASM-Embedded Weasel Inference](plan/65_spike-wasm-embedded-inference.md) |
47-
| 78 || | [Query subcommand for front-matter filtering](plan/78_query-command.md) |
48-
| 83 || | [Security hardening batch](plan/83_security-hardening-batch.md) |
49-
| 84 || | [Symlink default-deny for file discovery](plan/84_symlink-default-deny.md) |
50-
| 85 || | [Increase test coverage to 95% by extracting shared rule helpers](plan/85_coverage-to-95-percent.md) |
51-
| 86 || | [Markdown flavor validation](plan/86_markdown-flavor-validation.md) |
52-
| 89 || | [TOC generator directive and MDS035 auto-fix](plan/89_toc-generator-directive.md) |
53-
| 90 || | [Isolate corpus test git config from host signing](plan/90_corpus-test-git-config-isolation.md) |
54-
| 91 || | [MDS037 skips paragraphs inside generated sections](plan/91_mds037-skip-generated-sections.md) |
55-
| 92 || sonnet | [File kinds — config schema, assignment, merge](plan/92_file-kinds.md) |
56-
| 93 || sonnet | [Placeholder grammar — opt-in token vocabulary](plan/93_placeholder-grammar.md) |
57-
| 94 || sonnet | [Lint-once for `<?include?>` and `<?catalog?>` embeds](plan/94_lint-once-for-embeds.md) |
58-
| 95 || opus | [Kind/rule resolution observability via `kinds` subcommand](plan/95_kind-rule-resolution-cli.md) |
59-
| 96 || sonnet | [Adopt kinds in mdsmith repo and ship the docs](plan/96_kinds-adoption-and-docs.md) |
60-
| 97 || opus | [Deep-merge for kinds and overrides](plan/97_deep-merge-config.md) |
61-
| 98 || sonnet | [Replace `archetypes` with `kinds`](plan/98_replace-archetypes-with-kinds.md) |
17+
| ID | Status | Model | Title |
18+
|-----|--------|--------|---------------------------------------------------------------------------------------------------------------------------------------|
19+
| 100 || sonnet | [build config block and MDS040 recipe-safety rule](plan/100_build-config-and-mds040.md) |
20+
| 101 || sonnet | [build directive and MDS039 lint rule](plan/101_build-directive-mds039.md) |
21+
| 102 | 🔲 | opus | [Builder interface and mdsmith build subcommand](plan/102_build-subcommand.md) |
22+
| 103 | 🔲 | opus | [Build target staleness and dependency tracking](plan/103_build-staleness-and-deps.md) |
23+
| 104 | 🔲 | sonnet | [Build lifecycle hooks (before/after)](plan/104_build-lifecycle-hooks.md) |
24+
| 105 || sonnet | [No inline HTML rule](plan/105_no-inline-html.md) |
25+
| 106 || sonnet | [Emphasis style rule](plan/106_emphasis-style.md) |
26+
| 107 || opus | [No reference-style links rule](plan/107_no-reference-style.md) |
27+
| 108 || sonnet | [Horizontal rule style rule](plan/108_horizontal-rule-style.md) |
28+
| 109 || sonnet | [List marker style rule](plan/109_list-marker-style.md) |
29+
| 110 || sonnet | [Ordered list numbering rule](plan/110_ordered-list-numbering.md) |
30+
| 111 || sonnet | [Ambiguous emphasis rule](plan/111_ambiguous-emphasis.md) |
31+
| 112 || opus | [Markdown convention bundles for MDS034](plan/112_flavor-profiles.md) |
32+
| 113 | 🔲 | sonnet | [User-defined Markdown conventions](plan/113_user-defined-profiles.md) |
33+
| 114 || sonnet | [MDS034 message clarity and flavor-vs-rule docs](plan/114_mds034-message-and-flavor-vs-rule-docs.md) |
34+
| 120 || sonnet | [Unify glob matcher and field naming across mdsmith](plan/120_glob-unification.md) |
35+
| 121 || opus | [Expose mdsmith to VS Code via Language Server Protocol](plan/121_vscode-integration.md) |
36+
| 121 || sonnet | [Review and centralize YAML handling](plan/121_yaml-handling-review.md) |
37+
| 122 | 🔲 | sonnet | [VS Code hover help and palette commands](plan/122_vscode-hover-and-palette.md) |
38+
| 124 || sonnet | [No space inside code spans rule](plan/124_no-space-in-code-spans.md) |
39+
| 125 || sonnet | [No space inside link text rule](plan/125_no-space-in-link-text.md) |
40+
| 126 || sonnet | [Proper-name capitalization rule](plan/126_proper-names.md) |
41+
| 127 || sonnet | [Single H1 per file rule](plan/127_single-h1.md) |
42+
| 128 || sonnet | [Reject undefined reference-link labels](plan/128_no-undefined-reference-labels.md) |
43+
| 129 || sonnet | [Flag unused or duplicate link reference definitions](plan/129_no-unused-link-definitions.md) |
44+
| 130 | 🔳 | opus | [Distribute mdsmith binaries via npm, PyPI, asdf, mise, and the VS Code marketplaces](plan/130_binary-distribution-and-versioning.md) |
45+
| 52 || | [Archetype / Template Library for Agentic Patterns](plan/52_archetype-template-library.md) |
46+
| 61 || | [Required Structure Rule Hardening](plan/61_required-structure-hardening.md) |
47+
| 65 || | [Spike WASM-Embedded Weasel Inference](plan/65_spike-wasm-embedded-inference.md) |
48+
| 78 || | [Query subcommand for front-matter filtering](plan/78_query-command.md) |
49+
| 83 || | [Security hardening batch](plan/83_security-hardening-batch.md) |
50+
| 84 || | [Symlink default-deny for file discovery](plan/84_symlink-default-deny.md) |
51+
| 85 || | [Increase test coverage to 95% by extracting shared rule helpers](plan/85_coverage-to-95-percent.md) |
52+
| 86 || | [Markdown flavor validation](plan/86_markdown-flavor-validation.md) |
53+
| 89 || | [TOC generator directive and MDS035 auto-fix](plan/89_toc-generator-directive.md) |
54+
| 90 || | [Isolate corpus test git config from host signing](plan/90_corpus-test-git-config-isolation.md) |
55+
| 91 || | [MDS037 skips paragraphs inside generated sections](plan/91_mds037-skip-generated-sections.md) |
56+
| 92 || sonnet | [File kinds — config schema, assignment, merge](plan/92_file-kinds.md) |
57+
| 93 || sonnet | [Placeholder grammar — opt-in token vocabulary](plan/93_placeholder-grammar.md) |
58+
| 94 || sonnet | [Lint-once for `<?include?>` and `<?catalog?>` embeds](plan/94_lint-once-for-embeds.md) |
59+
| 95 || opus | [Kind/rule resolution observability via `kinds` subcommand](plan/95_kind-rule-resolution-cli.md) |
60+
| 96 || sonnet | [Adopt kinds in mdsmith repo and ship the docs](plan/96_kinds-adoption-and-docs.md) |
61+
| 97 || opus | [Deep-merge for kinds and overrides](plan/97_deep-merge-config.md) |
62+
| 98 || sonnet | [Replace `archetypes` with `kinds`](plan/98_replace-archetypes-with-kinds.md) |
6263
<?/catalog?>

0 commit comments

Comments
 (0)