fix(platform): coherent linux-arm baseline and release tag/version validation#692
Merged
Conversation
The linux-arm package bundles the linux-armv6l Go SDK but cross-compiled its ttsc/ttscserver/ttscgraph executables with no GOARM, which the toolchain defaults to ARMv7. The SDK and executables then targeted different ARM generations, so ARMv6 hardware could install a package whose primary executables might not run. Resolve one coherent Go target record per platform package that ties GOOS/GOARCH/GOARM to the bundled SDK archive suffix, force GOARM=6 for all three arm executables, and derive the archive from the same record. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HYCpGEc14zxD99ZPPzAnpz
The release workflow triggers on every pushed tag and publishes to the VS Code
Marketplace and npm before any tag-derived smoke test runs, so a malformed tag
or a tag whose version disagrees with the workspace manifests could create
irreversible external releases and only then fail. Add a side-effect-free
preflight gate that runs before build and any publication step: the tag must be
exactly v${version} for a valid semver, every non-private packages/* manifest
must carry that version, and the @ttsc/vscode manifest naming the VSIX must
agree. Registry-existence detection is deliberately left to the publish step to
keep the gate offline and independently testable.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HYCpGEc14zxD99ZPPzAnpz
Owner
Author
Self-Review — round 1Reviewed the whole declared surface of both fixes against the development contract (Consequence Analysis, Testing contract, Forbidden list). RA-06 (ARM baseline)
RA-08 (release preflight)
Result: no findings requiring remediation. All three focused tests green on win32; scripts pass |
Owner
Author
Final verification (local, win32)=> Success (3/3):
Both issues implemented and verified. Marking ready. Do NOT merge — lead merges after recheck. |
samchon
marked this pull request as ready for review
July 15, 2026 12:55
Owner
Author
|
Squash-merged as |
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.
Bundle b11 — linux-arm ARM baseline + release tag/version validation
Part of the
repository-audit-2026-07campaign (tracker #667 / #682). Two independent P1 platform/release correctness fixes.RA-06 — one coherent ARM baseline in
@ttsc/linux-arm(#667)@ttsc/linux-armbundles thelinux-armv6lGo SDK but cross-compiled itsttsc/ttscserver/ttscgraphexecutables with noGOARM, which the current toolchain defaults to ARMv7. The SDK and executables then targeted different ARM generations, so ARMv6 hardware could install a package whose primary executables might not run.scripts/platform-target.cjs::resolveGoTargetresolves one coherent Go target record per platform package, tyingGOOS/GOARCH/GOARMto the bundled SDK archive suffix.scripts/build-platform-package.cjsnow forcesGOARM=6for all three arm executables and derives the archive target from the same record (single source of truth).armCPU contract is preserved (no support-boundary narrowing).RA-08 — validate release tag and package versions before publication (#682)
release.ymltriggers on every pushed tag (on.push.tags: ["*"]) and publishes to the VS Code Marketplace and npm before any tag-derived smoke test runs, so a malformed tag or a tag/manifest version mismatch could create irreversible external releases and only then fail.scripts/release-preflight.cjsruns as the first release step, before build and any publication. Side-effect free (reads files, never mutates a registry).v${version}for a valid semver (prerelease allowed); every non-privatepackages/*manifest (the exact setpackage:latest:publishpublishes) carries that version; the@ttsc/vscodemanifest that names the VSIX/Marketplace artifact agrees.release.ymlinvokes the preflight beforepnpm run build, the Marketplace publish, the npm publish, and any credential use.Tests
test_platform_target_matrix_pins_linux_arm_to_armv6— asserts the resolved matrix pins linux-arm toGOARM=6/linux-armv6land that arm64 / non-ARM negative twins never acquire aGOARM; structural guard that all three executables flow through onebuildGoTarget.test_release_preflight_rejects_incoherent_tag_and_versions— synthetic workspaces exercised via the real script: canonical + prerelease pass; malformed tag, missingv, tag/manifest mismatch, per-package npm skew, VSIX skew, and missing@ttsc/vscodeall fail with the offending reason. Private package proven skipped; no case mutates state.test_release_workflow_runs_preflight_before_publication— locks workflow ordering: preflight appears exactly once and strictly before build, both publishes, and credential use.Closes #667, #682