Repository navigation
Description
Maintainer decision (2026-08-20), in their own words:
objectui 每次 pin 的时候,对应的 changeset 应该带过来,但是发版本的时候不需要去扫描 objectui 仓库的最新版
更新到哪个版本是 objectstack 的 issue 自己决定的
So the rule this repo wants is:
- Which objectui revision we pin is a decision, recorded in an objectstack issue. It is never derived from objectui's
mainHEAD at release time. - The mechanism that keeps the release record honest is the changeset carried over when the pin moves —
scripts/bump-objectui.sh+scripts/objectui-changeset-digest.mjs, which derive the@objectstack/consoleentry from objectui's own declared changesets overOLD..NEW. That stays, untouched. - Everything that scans objectui at release time to second-guess the pin goes.
This is not "drop the #3340 protection". #3340's real invariant — everything shipped is covered by the changeset record — is delivered by the carry-over at bump time, and cut-rc.yml's own header already says exactly that: "objectui commits landing past the snapshot are simply the next release's record, not a gap in this one." The freshness scan was a second, redundant attempt at the same goal that additionally required reaching into another repo mid-release.
Two things to change, and the second is the one that actually matters
1. The freshness gate — delete
.github/workflows/objectui-pin-freshness.yml— delete..github/workflows/release.yml— remove theConsole pin is fresh (#3340 — enforcing on the publish path)step (~line 475, runspnpm check:objectui-pin-fresh).package.json— remove thecheck:objectui-pin-freshscript.scripts/check-objectui-pin-fresh.mjs— delete, with its self-test. Default is full removal: a script no lane runs is the declared-but-unenforced shape this repo retires on sight.
2. cut-rc.yml — stop deciding the pin target
This is the lane that actually takes the decision away from the issue. Today it:
git ls-remote https://github.com/objectstack-ai/objectui.git refs/heads/main→OBJECTUI_SHA= objectui main at that moment (~line 249),- full-clones objectui, walks
OLD_PIN..OBJECTUI_SHA, - bumps
.objectui-shato that snapshot and emits the console changeset for the range, - then asserts
.objectui-sha == OBJECTUI_SHAand refuses the cut if not (~line 377).
Under the rule above that is backwards: the cut must take the pin as committed and build against it. Concretely — the exact shape is the dev seat's call, but the behaviour is fixed:
- Do not resolve objectui
main. Read.objectui-shaand use it asOBJECTUI_SHA. - Keep the full clone (not shallow) and clone at the pin — the digest's walkability requirement and the
#4731degraded-record lesson are unaffected. - The self-consistency assert becomes trivially true and should go with the resolve step; keep the check that the pinned sha actually exists in the clone, which is still a real failure mode.
- No pin bump happens during a cut any more. The console changeset for the range is produced by the manual bump PR (the Bump the objectui pin to current main — 149 commits of frontend are outside the release record #10129 flow), which is where it belongs.
Consequence, stated plainly: an RC now ships whatever console the committed pin names. If the pin is old, the RC's frontend is old — by design, because the pin is a decision. Nothing will warn about it, which is the point of this card.
3. Text that becomes false and must move in the same PR
A stale comment asserting a gate that no longer exists is worse than no comment.
.github/workflows/cut-rc.yml— the header sections "WHY NOTcheck:objectui-pin-freshHERE (and why that is not a hole)" and the claim that the script "is UNCHANGED and still enforces on the GA path inrelease.yml" (~lines 21, 34, 46, 371–372). The invariant paragraph survives; the comparison to a deleted gate does not..github/workflows/ci.yml(~1389–1391) — the note distinguishingConsole Pin GatefromConsole Pin Freshness.Console Pin Gate(An objectui pin bump reachesmainwithout any PR gate ever building the pinned SHA #4290) stays (different question: does the pinned SHA still build), but its comment must stop pointing at a deleted sibling..github/workflows/prerelease-pin-watch.yml(~line 40) — the "Contrastcheck:objectui-pin-fresh…" aside. That workflow watches the better-auth prerelease overrides and has nothing to do with objectui; comment only.docs/releases-maintenance.md(~185–196, ~310) — rewrite to describe the process that exists: the pin moves by hand, its target is decided in an issue,bump-objectui.shcarries the changeset across, and nothing checks currency.
⛔ Precondition that is NOT this card's to do — the PR must not merge before it
Console Pin Freshness may be in main's branch-protection required set. If it is, deleting the workflow deadlocks the repo: a required context that never reports leaves every PR and every merge-queue generation on Expected — waiting for status (#3622 is the prototype; the workflow's own header and #6121 warn about it). Because pull_request runs use the workflow files from the head branch, the deleting PR is the first to jam.
A maintainer must remove the Console Pin Freshness context from branch protection for main first (Settings → Branches → main → Require status checks to pass). No agent here can read or change branch protection, so it cannot be confirmed from inside the PR. Hold the merge until the maintainer says it is done.
What must NOT change
scripts/bump-objectui.shandscripts/objectui-changeset-digest.mjs— the carry-over is the mechanism being kept.Console Pin Gate(An objectui pin bump reachesmainwithout any PR gate ever building the pinned SHA #4290,ci.yml) — different question, stays.- No release. No publish, no version tag, no release-workflow dispatch, no merging of a Version Packages PR.
- Do not edit
content/docs/releases/**.
Acceptance
git grep -n 'objectui-pin-fresh\|Console Pin Freshness'returns only what the PR deliberately keeps, and the PR body lists what that is and why.cut-rc.ymlno longer contains agit ls-remoteof objectui, and the PR body shows the before/after of howOBJECTUI_SHAis obtained.- A changeset. This is CI/release tooling, not a published package — say whether it publishes anything and use empty frontmatter if not.
- The PR body carries the branch-protection precondition at the top.
Related in flight: #10129 bumps the pin across the 149-commit backlog by hand. It continues, and under this card's rule that manual bump becomes the only way the pin ever moves.
Activity
[-]Retire the objectui pin-freshness gate — the pin is bumped by hand on purpose, and "must equal objectui main" is not the rule this repo wants[/-][+]The objectui pin target is objectstack's decision — stop resolving objectui main at release time (freshness gate + cut-rc auto-bump)[/+]ci(release): the objectui pin is a decision — stop resolving objectui…