v1.3.1
Fixed
-
v1.3.0 was tagged and released on GitHub but published no packages. Two independent
defects, in sequence.The merge of #29 never triggered
release.ymlat all. Its commit body explained the
skip-ci marker and quoted it verbatim, and GitHub scans the entire commit message for
that marker, not just the subject — so CI was skipped on the merge commit, and with no
completedCIrun there was noworkflow_runevent forrelease.ymlto fire on. The
chain was never wrong; nothing pulled the trigger. Recorded inCONTRIBUTING.mdand
CLAUDE.md. No test can guard this one: CI is the thing that gets skipped.Once dispatched manually, the
releasejob succeeded — tag, GitHub Release and the
deploy-key push all worked — andpublishthen failed on
bun install --frozen-lockfile:lockfile had changes, but lockfile is frozen.
version:syncrewroteversionfields only, butpackages/corepins
@massa-ai/sharedto the exact root version rather thanworkspace:*— a contract
verifyStaticContractinscripts/verify-tree-sitter-grammars.tsasserts. So the bump
left that pin at1.2.1whilesharedbecame1.3.0, the workspace copy stopped
satisfying it, and bun resolved@massa-ai/sharedfrom the registry instead. A
successful install would have been worse than the failure:publish.yml's resolve step
only rewrites the literal"workspace:*", so@massa-ai/core@1.3.0would have shipped
declaring a hard dependency on@massa-ai/shared@1.2.1, violating ARV-R7. The same drift
had already brokenbun run test:scriptsonmain, via that static contract — a gate
the skipped CI run would otherwise have caught before publish ever started.scripts/version-sync.tsnow realigns every non-workspace:@massa-ai/*dependency
spec to the version it is syncing, in the one place bothrelease.ymlandpublish.yml
bump versions. Two guards were added: asyncVersionsunit test for the realignment, and
scripts/__tests__/workspace-dependency-pinning.test.ts, which fails on any
cross-package spec that is neitherworkspace:*nor the current root version, and on any
bun.lockentry resolving a@massa-ai/*package off-workspace.bun.lock's
workspaces[*].versionfields are not validated by bun, so their staleness is
cosmetic and was never the cause.