feat(release): publish localized changelog metadata - #5520
Conversation
🚀 Landing page previewThis PR is deployed to a Cloudflare Pages preview — not staging or production:
|
mrcfps
left a comment
There was a problem hiding this comment.
@PerishCode Thanks for putting together the channel-neutral release-note pipeline and its focused validation coverage. The overall flow is well structured; I found one merge-safe byte-integrity edge for an accepted UTF-8 input variant.
🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.Generated-By: looper 0.10.3 (runner=fixer, agent=codex)
|
Looper fixer round complete — c398981
🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos. |
mrcfps
left a comment
There was a problem hiding this comment.
@PerishCode I reviewed the channel-neutral localized release-note pipeline across all five release workflows, source/front-matter validation, immutable storage publication, metadata projection and verification, and the stable pre-build locale gate. The follow-up raw-byte fix correctly preserves BOM-prefixed content through immutable reuse and integrity verification. Focused release, storage-fixture, workflow-topology, typecheck, guard, and actionlint validation all pass. Thank you for the careful end-to-end implementation and for promptly closing the prior edge case. 🙌
🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.
AmyShang-alt
left a comment
There was a problem hiding this comment.
QA 验收通过。
验证范围:
- PR head: c398981
- 本地 isolated worktree: /Users/mac/open-design/pr-5520-electron
- Electron/runtime namespace: pr5520,desktop/web/daemon 均 running,windowVisible=true,首页 readyState=complete
- tools-release:
pnpm --filter @open-design/tools-release test通过,3 files / 16 tests - tools-release typecheck:
pnpm --filter @open-design/tools-release typecheck通过 - release metadata fixture:
pnpm --filter @open-design/tools-serve exec vitest run tests/release-metadata-publish.test.ts通过,2 tests - workflow release-note coverage:
pnpm --filter @open-design/e2e exec vitest run -c vitest.config.ts tests/packaged-smoke-workflow.test.ts -t "release notes"通过,2 tests - GitHub checks 当前 head 全绿,mergeStateStatus=CLEAN
结论:该 PR 属于发布链路 feature,localized release-note source validation、immutable publication、metadata projection/verification 和 workflow wiring 的核心验收项已覆盖;未发现阻塞问题。
















































Related to #5071 and #5343.
Why
The updater and release work exposed a missing delivery contract: release notes had no channel-consistent source convention, immutable publication path, public metadata projection, or strict stable gate. That left release operators and future consumers to couple source discovery, storage layout, metadata assembly, and rendering decisions together.
This PR establishes that mechanism in
tools-releaseafter the product team split the lightweight What's New experience into an independent path. The goal is to make localized changelog delivery deterministic now while keeping source format, storage, metadata, and eventual rendering independently replaceable.What users will see
There is no new updater UI in this PR. Release operators can author localized Markdown at
docs/CHANGELOG/v<full-release-version>/<locale>.md; successful releases publish immutable locale assets and expose their URL, media type, SHA-256, and byte size throughmetadata.json.releaseNote.content.Stable releases now fail before platform builds when required
enandzh-CNnotes are missing or malformed. Beta, prerelease, and preview use the same pipeline but may explicitly publish without notes when no matching version directory exists.Surface area
apps/weborapps/desktop(including Electron menu bar)odsubcommand or flag, newtools-dev/tools-pack/tools-prflag, or newOD_*env var/api/*endpoint, new SSE event, or changed shape inpackages/contractsskills/,design-systems/,design-templates/, orcraft/, or change to the skills protocolTRANSLATIONS.mdfor the locale workflow)package.json(dependenciesordevDependencies); workspace-packagepackage.jsonfiles are out of scope. Include a paragraph on what we get vs. what bytes we ship (seeCONTRIBUTING.md→ Code style)Screenshots
Not applicable. This PR has no UI diff against
main; release-note rendering remains a separate consumer concern.Bug fix verification
Not applicable; this is a release delivery feature rather than a bug fix.
Validation
pnpm installpnpm guard(78 checks passed after the latestmainmerge)pnpm typecheckpnpm --filter @open-design/tools-release test(16 tests)pnpm --filter @open-design/tools-serve exec vitest run tests/release-metadata-publish.test.ts(2 tests)pnpm --filter @open-design/tools-pack exec vitest run tests/release-workflows.test.tspnpm --filter @open-design/e2e exec vitest run -c vitest.config.ts tests/packaged-smoke-workflow.test.ts(46 tests)actionlintfor all five changed release workflows0.14.1dry-run: planned bilingual immutable uploads, candidate metadata assembly, and verification passed without storage accesstools-serve+tools-packpackaged loops:0.14.1-beta.1000 -> .1001 -> .1002and.2000 -> .2001 -> .2002, including build, install, update, restart, stop, uninstall, and cleanuprelease-betapublishes:0.14.1-beta.3and0.14.1-beta.4, including macOS arm64 and Windows x64 builds/smokes, bilingual immutable note publication, metadata verification, and latest promotionNix is not installed locally, so
nix flake checkwas not rerun. The lockfile hash path remains covered by the repository's PR validation/autofix gate.