ci(release): pre-publish backward-compat smoke against live hotcrm (#2035)#2093
Merged
Conversation
…2035) The last layer of the third-party validation strategy from #2035: a live ceiling above the deterministic in-repo floor (@objectstack/downstream-contract, #2089). `scripts/downstream-smoke.sh` clones objectstack-ai/hotcrm at a pinned tag (v1.2.0), installs it against the PUBLISHED @objectstack/* packages, overlays the freshly-built — unreleased — @objectstack/spec dist, and runs hotcrm's own `typecheck` + `objectstack validate`. If the about-to-publish spec breaks a real, independently-authored third-party consumer, the release is blocked. Wired into release.yml between the build and the changesets publish step, so it runs only in the release pipeline (never reddens a feature PR). Mirrors the existing console-SPA step that already clones an external repo at a pinned ref. Verified end-to-end locally: clone hotcrm@v1.2.0 → install → overlay current spec → typecheck + validate both pass (15 objects / 15 pages / 10 reports / 11 actions / 17 flows). Override the pinned ref with HOTCRM_REF. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
xuyushun441-sys
added a commit
that referenced
this pull request
Jun 21, 2026
…ates (#2035) (#2098) Documents the layered strategy built across #2088/#2089/#2092/#2093/#2095/#2097 in one authoritative place: why in-repo consumers can't witness backward compat (they co-evolve with the spec), the six gates and each one's job, and — crucially — the FREEZE CONTRACT: a change that requires editing the fixtures or removing a snapshot entry is by definition breaking (bump major), never a mechanical test-update. Also formalizes `objectstack validate` as the third party's authoritative self-gate. Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.
Follow-up to #2035 / #2088 / #2089 / #2092 — the final layer of the third-party validation strategy. You chose to run the live-hotcrm gate in the pre-publish / release workflow; this implements exactly that.
What
scripts/downstream-smoke.sh:objectstack-ai/hotcrmat a pinned tag (v1.2.0),@objectstack/*packages,@objectstack/specdist,typecheck+objectstack validate.If the about-to-publish spec breaks a real, independently-authored consumer, the release is blocked.
Wired into
release.ymlbetween the build and the changesets publish step — so it runs only in the release pipeline, never on a feature PR. It mirrors the existing console-SPA step that already clones an external repo (objectui) at a pinned ref, so the pattern is established.Where it sits
downstream-contractfixtureThe fixture and snapshot are fast and run on every PR; this heavy, live check is the pre-publish backstop for anything they miss — at the cost of coupling to one external repo, which is why it's release-only and pinned to a tag (override via
HOTCRM_REF).Verified end-to-end (locally, real clone)
Ran the actual script: cloned
hotcrm@v1.2.0→pnpm install→ overlaid the current spec build →typecheck(0 errors) +objectstack validate(✓ — 15 objects / 297 fields / 15 pages / 10 reports / 11 actions / 17 flows / 10 roles). Exit 0. (The only output warnings are hotcrm's own pre-existing dashboard-widget notices, unrelated to the spec.)Notes
pnpm installfalls back to--no-frozen-lockfileif hotcrm's lockfile drifts from current published versions.🤖 Generated with Claude Code