Windows install support + user-only public website - #478
Conversation
The GitHub-release direct-download section only documented the POSIX flow (curl, sha256sum, install -m 0755). Windows users — who have no Homebrew or Flatpak channel — had no actionable path. Add a Windows (PowerShell) subsection covering download via Invoke-WebRequest, Get-FileHash checksum verification against the mdsmith-windows-amd64.exe asset, and adding the binary to the user PATH.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files
☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…ument channel SSOT A Windows user filtering the homepage install picker by platform saw only the GitHub Releases curl row, because the cross-platform CLI channels (Go, npm, npx, PyPI, uvx, pipx) were tagged by ecosystem alone. Tag each with the OSes it actually runs on, so the Windows, macOS, and Linux filters surface every channel a visitor can use. Also document the channel source-of-truth data flow and the meaning of the platforms tags in release-tooling.md, so the install/channel architecture is discoverable instead of needing a code trace.
… picker "Channel" is the maintainer/agent term for a distribution source. On the public frontpage a visitor just wants the install line for their platform, so the two user-visible mentions (the filter aria-label and the verification note) now read in install-method terms instead.
The public Hugo site is for users, but SyncDocs copied the whole docs/ tree — so the maintainer trees (development, research, security, brand) rendered at mdsmith.dev and showed up in the sidebar nav. SyncDocs now prunes those four subtrees at the docs root. Links from a published page into a pruned tree are rewritten to the file's GitHub source at sync time (repoPrunedDocLink), so they resolve instead of 404-ing while staying valid relative links in the repo. Two consumers of the pruned pages are repointed to survive: the homepage logos strip reads the generated channels.yaml data file, and the footer links contributors to the GitHub docs/development tree. The sidebar order drops the development entry. Documented in website-config.md, with TDD coverage for the prune and the link rewrite.
There was a problem hiding this comment.
Pull request overview
Updates mdsmith’s install and website-docs pipeline to better support Windows users and to keep the published site functional after pruning maintainer-only documentation trees.
Changes:
- Add Windows (PowerShell) direct-download install instructions, including checksum verification and PATH setup.
- Expand release-channel
platformstags (and regeneratedwebsite/data/channels.yaml) so OS filters (including Windows) surface applicable channels. - Prune maintainer-only docs (
docs/development|research|security|brand) from the published site while rewriting links into those trees to GitHub, and update Hugo templates to avoid relying on pruned pages.
Reviewed changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| website/layouts/partials/logos-strip.html | Switch logos strip data source from content pages to hugo.Data.channels so it survives docs pruning. |
| website/layouts/partials/install-picker.html | Improve accessibility copy and clarify the verification note text. |
| website/layouts/partials/footer.html | Point “Development” link to GitHub source tree instead of a (now pruned) site section. |
| website/layouts/partials/docs-sidebar.html | Remove the “development” docs section from the sidebar order to reflect pruning. |
| website/data/channels.yaml | Regenerate channel metadata to include OS tags for better platform filtering. |
| internal/release/website.go | Add rewrite support for links into pruned maintainer-doc trees so published docs don’t break. |
| internal/release/website_test.go | Add tests covering the new pruned-doc link rewrite behavior. |
| internal/release/syncdocs.go | Prune maintainer-only docs directories at the docs root during site sync. |
| internal/release/syncdocs_test.go | Update/add tests for pruning behavior and related sync expectations. |
| docs/guides/install.md | Add Windows PowerShell direct-download path and verification guidance. |
| docs/development/website-config.md | Document the maintainer-doc pruning model and how links are routed to GitHub. |
| docs/development/release-tooling.md | Document release-channels/ as the source of truth and clarify platforms semantics. |
| docs/development/release-channels/uvx.md | Add OS tags to platforms to ensure visibility under OS filters. |
| docs/development/release-channels/pypi.md | Add OS tags to platforms to ensure visibility under OS filters. |
| docs/development/release-channels/pipx.md | Add OS tags to platforms to ensure visibility under OS filters. |
| docs/development/release-channels/npx.md | Add OS tags to platforms to ensure visibility under OS filters. |
| docs/development/release-channels/npm.md | Add OS tags to platforms to ensure visibility under OS filters. |
| docs/development/release-channels/go.md | Add OS tags to platforms to ensure visibility under OS filters. |
| CLAUDE.md | Refresh the generated docs catalog entry for the expanded release-tooling summary. |
| AGENTS.md | Refresh the generated docs catalog entry for the expanded release-tooling summary. |
| .github/copilot-instructions.md | Refresh the generated docs catalog entry for the expanded release-tooling summary. |
The prior snippet printed the computed hash on one line and the full checksums.txt line (hash + filename) on the next, so 'the two strings must be equal' was misleading. Extract the expected SHA-256 from checksums.txt and compare programmatically, emitting checksum OK or throwing on mismatch.
- install.md: match the checksums.txt line with -SimpleMatch (literal filename, not a regex) and lowercase the expected hash. - website-config.md: point repoPrunedDocLink at internal/release/ website.go (package release) instead of a vague 'website package'.
|
🔍 Merge Queue — bisecting A larger batch failed CI. Bisection is isolating the culprit: this run tests up to 1 of 1 candidate PRs on Next: No action needed — you'll be notified when the culprit is isolated or this PR merges. |
|
✅ Merge Queue — merged This PR landed on Next: Done — nothing more to do here. |
Scope
This PR started as a fix for unhelpful Windows install notes and grew
into a broader install/website cleanup. Three related changes:
1. Windows install instructions
the install guide: download via
Invoke-WebRequest, programmaticGet-FileHashchecksum verification against themdsmith-windows-amd64.exeasset, and adding the binary to the userPATH. Notes thatgh attestation verify/cosign verify-blobwork unchanged on Windows.
2. OS-aware install picker
with the OSes they actually run on, in addition to their ecosystem
tag, and regenerate
website/data/channels.yaml. The homepage"Windows" filter now surfaces 7 runnable channels instead of one
curl placeholder.
copy (filter aria-label, verification note).
3. Public website is user-only
SyncDocsnow prunes the maintainer-onlydocs/subtrees(
development,research,security,brand) from the publishedsite; they stay in the repo for maintainers.
file's GitHub source at sync time (
repoPrunedDocLink), so theyresolve on the site while staying valid relative links in-repo.
homepage logos strip reads
channels.yaml, and the footer linkscontributors to the GitHub
docs/developmenttree. The sidebarorder drops
development.Docs for maintainers/agents
release-tooling.mddocuments the channel source-of-truth flow andwhat the
platformstags mean.website-config.mddocuments the maintainer-doc prune and the linkrouting.
Verification
go test ./...green; new TDD coverage for the prune and thepruned-doc link rewrite (100% patch coverage per Codecov).
mdsmith check .-> 413 files, 0 failures.golangci-lint-> 0 issues.sync-docs docs/run confirms the four dirs are pruned,the four user dirs are kept, and all cross-links route to GitHub.
https://claude.ai/code/session_01RGBUkRscaPiT5ZfohXWUgL