Repository navigation
Conversation
…#300) The 0.3.1 release notes headed the asset table "Target | SHA-256" and listed the worker digest; 0.3.2 kept the same heading and listed the ZIP digest, so a reader comparing an archive against the worker reports a false mismatch. Record the contract instead of the numbers: the SHA256SUMS asset is authoritative for the released tarballs, every tarball carries its native worker digest in runtime/<target>/provenance.json, and the Release body defines neither. Releases published from a maintainer machine have no run summary and did not always carry SHA256SUMS, so their record is the in-package receipt. The troubleshooting guides gain the in-package checker, which needs no platform-specific hashing tool, and docs/PROVENANCE.md records the historical mismatch rather than editing a published Release.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #300
What was wrong
The 0.3.1 and 0.3.2 release notes both headed their asset table
Target | SHA-256, but the column meant different bytes: 0.3.1 listed the worker digest (89b8e1e9…forwin32-x64— the value the archive'sruntime/win32-x64/provenance.jsonrecords) while 0.3.2 listed the ZIP digest (10e29a8f…, equal to the GitHub asset digest). Checked against both release bodies and both asset lists; all three targets drifted the same way, so it is a changed convention rather than a typo.A reader following the table literally gets a false result in either direction: compare the 0.3.1 value against the ZIP and the archive looks corrupted; compare the 0.3.2 value against the worker and a healthy install fails its own check. 0.3.1 has no npm channel to fall back on (
registry.npmjs.org/dsh-ops/0.3.1→ 404) and carried noSHA256SUMSasset, so those notes were its only record.Since 0.4.0 the artifact shape changed (main tarball + Windows Bash payload +
SHA256SUMS; no runtime ZIPs and no digest table in the body), so the table itself is gone. What remained is the gap that produced it: nothing said what a published checksum refers to, or where its authority lives. That is why this PR does not rename a column — it states the contract and gives readers a command that resolves the question on their own machine.The change
docs/release-process.md: one bilingual pair in the existing lead blockquote stating the contract — theSHA256SUMSasset is authoritative for released tarballs, each tarball records its worker digest inruntime/<target>/provenance.json, and the Release body defines neither. The run summary is only a copy; releases from a maintainer machine have no run summary and did not always carrySHA256SUMS, so their record is the in-package receipt. Every published checksum must name its object.docs/troubleshooting.md+docs/常见问题.md: a new "how do I verify what I downloaded" section with the checker that needs no platform-specific hashing tool —tar -xzf dsh-ops-<version>.tgz, thennode package/bin/native-runtime.mjs check --root package --platform <target>. It records the three traps found while testing it:SHA256SUMSlists every tarball of the release, sosha256sum -cneeds all of them side by side; macOS has nosha256sum; and Git for Windows' GNU tar reads aC:\...argument as a remote host.docs/PROVENANCE.md: the 0.3.1 section now records the worker-vs-ZIP mismatch instead of leaving it silent.docs/CHANGELOG.md: one[Unreleased]entry, EN + ZH.test/docs-facts.test.mjs: asserts the contract is stated and that the checker the docs recommend still exists. The matched fragments appear only in the new text —SHA256SUMSalone already occurred as a build artifact, so matching that word would have stayed green on a revert.Deliberately not done:
release.ymlis untouched (itspublishjob runs only whengithub.ref_type == 'tag', so a notes/asset comparison there could not be exercised by a dry run); no second checksum manifest (the per-target receipt already ships inside the tarball);pack.js/check.jsuntouched.docs/release-0.3.1.mdand the published Release bodies are left as they were; the correction is recorded indocs/PROVENANCE.md, which is how this repository has handled notes-only Releases before, and rewriting a published release is not reviewable.Validation
Behavior-level red/green: the four fragments the new assertions match are absent from
main's versions of the three documents (checked withgit show HEAD:<file>), so reverting the change turnsdocs-factsred; with the change it passes.The documented command was exercised against the real v0.4.1 asset before being written down:
The five failures are environment gaps in this checkout, not regressions: no pinned Bash payload (
bash-ipc), no staged native worker (bundle-startup,discovery's host-loop suite,presentation-readiness,resident-tools), and no dsh-TUI checkout. That is the same five-suite set recorded against unmodifiedmainin #336. The 50 skips are the worker-absence skips this environment cannot avoid (staging the worker needs Rust 1.97.1), so this local run is not gate-equivalent —CI requiredis.CI requiredis an aggregate job that starts only after the matrix legs report, so its URL appears after the per-platform checks; the Windows leg is non-blocking since #316 and the gate isvalidate-posix.Environment
Windows 11 x64, Node v24.13.0, npm 11.6.2, base
ef7f8d6. Existing checkout; the optional@dsh-ops/[email protected]payload is absent, which is what thebash-ipcfailure above reports.