Repository navigation
Description
Measured on origin/main, not recalled:
.objectui-sha (objectstack) |
82a94170c4058d45 — objectui, 2026-08-17 21:51 |
objectui origin/main |
0fd11444a89e5711 — 2026-08-20 04:51 |
| commits in between | 149 |
Why this matters beyond "it's old"
The platform ships as one version-locked train and the frontend enters the changesets pipeline exactly once: when .objectui-sha moves and bump-objectui.sh writes the @objectstack/console changeset for the range it crossed. Everything objectui merged after the pin is, by construction, in no changeset, no CHANGELOG and no release page. That is the failure scripts/check-objectui-pin-fresh.mjs exists for (#3340) — cutting v16 that way lost four frontend changes, two of them minor features.
That gate is enforcing on the Version Packages / release PR. So this is not cosmetic staleness: at the next GA cut it is red, and 149 commits of frontend are missing from the record.
Procedure — use the script, do not hand-edit the pin
scripts/bump-objectui.sh # bumps .objectui-sha to ../objectui HEAD + writes the changeset
pnpm sdui:manifest # the other half (ADR-0082 D4 parity ratchet)
scripts/bump-objectui.sh --help prints the full contract. Two things it does that a manual edit does not: it derives the @objectstack/console changeset from objectui's own declared changesets over the range (package names decide inclusion, declared level decides the bump — nothing inferred from commit subjects, #4731), and it refuses to pretend a truncated walk is a complete one.
The trap that is live right now
The local objectui checkout is shallow — git -C ../objectui rev-parse --is-shallow-repository returns true. This is exactly the shape of objectstack#9408: a walk that stops inside the range still answers, and the oldest visible commit (shown as parentless, diffed against the empty tree) absorbs a whole batch. On the bump that produced the current pin's changeset, that credited 36 of 119 entries to a single commit that adds exactly one.
So:
- Do NOT set
OBJECTUI_NO_DEEPEN=1. Let the script deepen (git fetch --unshallow, measured ~6 s / ~4 MB on objectui). - After the bump, verify the changeset is not the degraded one. The degraded path labels itself —
⚠️ Degraded list— and names only the tip subject. A degraded entry becomes permanent published CHANGELOG text. If you get one, deepen and re-run rather than editing the table by hand. - The range is long enough that
CONSOLE_CHANGES_MAX(default 100) may fire. If it caps, the script says so with the real count — carry that number into the PR body rather than letting it read as a complete list.
A free correctness check on the digest
The range contains objectui's @changesets/cli v3 migration (objectui e7c3b3e91, PR objectui#5307). That PR ships a changeset with empty frontmatter — changesets' own "releases nothing". So it must not appear in the @objectstack/console list. If it does, the digest is reading commit subjects instead of declarations and the whole list is suspect.
Acceptance
.objectui-shaequals objectui'smaintip at bump time; record which SHA and its date in the PR body.- Exactly one
@objectstack/consolechangeset, derived (no⚠️ Degraded listbanner), with the resolved bump level and why it resolved that way. pnpm sdui:manifestactually run — Playwright chromium is pre-installed in this environment at/opt/pw-browsersandPLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1is set, so do not runplaywright install. If it produces parity changes, include them; if it cannot run, say so explicitly rather than skipping in silence (the gate exits 1 on a missing manifest since check:react-declaration-parity 是唯一没接进任何 workflow 的源码审计门禁,且无 MANIFEST 时静默 skip 退出 0 —— 它现在永远不可能红 #4690, so "it passed" without running it is not a thing).- CI's Console Pin Gate green (does the pinned SHA still build) — note this is a different question from freshness; both must be green.
Non-goals
- No release. No publish, no version tag, no release-workflow dispatch, no merging of a Version Packages PR.
- Do not touch
.github/workflows/cut-rc.yml— it has its own pin handling and its own gate. - Do not edit
content/docs/releases/**. The changeset is this PR's input to the release notes; release notes are written centrally at release time. - objectui's own version PR (objectui#4655, would cut 17.6.0) is open and unmerged and is none of this card's business — the pin is a SHA, not an npm version.
Activity
os-project-manager commentedon Aug 20, 2026
Claimed and dispatched by the PM loop.
session_01HDA9nN6nXQngoQUAAzRdMbclaude/issue-10129-objectui-pin../objectstack-issue-10129(dedicated, per repo — no edits in the shared checkout, nogit stash)opus. The contract-review tier (claude-fable-5) measured unavailable on quota twice today; the 2026-08-13 exemption applies, and this is a scripted pin bump with a verification step, not a contract review.Routing authority, verbatim from the maintainer: "objectui 最新版更新到 objectstack".
File territory this claim covers
.objectui-sha, one.changeset/console-<sha>.md, and whateverpnpm sdui:manifestlegitimately regenerates. Nothing else.Explicitly not covered:
.github/workflows/cut-rc.yml,scripts/bump-objectui.shitself,content/docs/releases/**, and anything in the objectui repo.Serial constraints handed to the dev seat
scripts/bump-objectui.sh. Hand-editing.objectui-shaskips the changeset derivation, which is the entire point of the pin bump.OBJECTUI_NO_DEEPEN=1is forbidden here. A truncated walk does not fail, it answers wrong, and the answer becomes published CHANGELOG text.⚠️ Degraded listbanner in the emitted changeset is a failed run, not a partial success. Deepen and re-run; never hand-edit the list.pnpm sdui:manifestmust actually run. Chromium is pre-installed at/opt/pw-browsers— do not runplaywright install. "Skipped it" is a reportable blocker, not a quiet omission.Self-check available for free: objectui
e7c3b3e91(the@changesets/cliv3 migration) is inside the range and ships an empty-frontmatter changeset, so it must be absent from the console list. Its presence would prove the digest is reading subjects rather than declarations.Generated by Claude Code
os-project-manager commentedon Aug 20, 2026
Re-dispatched. The first dev seat died to an API error (connection lost mid-response) before doing any work.
State verified before re-dispatching, rather than assumed:
../objectstack-issue-10129exists onclaude/issue-10129-objectui-pin, working tree cleangit log origin/main..HEAD— empty;git diff --stat origin/main..HEAD— empty.objectui-shaon the branch is still82a94170c405, i.e. unchangedSo there is nothing half-done to clean up and nothing to reconcile. The second seat reuses the existing worktree and branch (a fresh
git worktree addwould fail on the occupied path), brings it up to currentorigin/mainfirst, and carries the same constraints — same model tier, same file territory, same non-goals.Recording it here because a dispatch that dies at launch and one that dies mid-edit need different handling, and the difference is only visible if someone checked.
Generated by Claude Code
os-project-manager commentedon Aug 20, 2026
Generated by Claude Code
os-project-manager commentedon Aug 20, 2026
Notes on the two findings the first run filed: #10136 is closed out in substance by objectui#5390 and this PR's green build — it is the PM's call whether to close it; #10138 (
sdui:manifestENOENT on a missingpackages/console/dist/) is still live as filed, it simply did not fire this time because the console build now succeeds and creates the directory. No new findings this round.Generated by Claude Code
Generated by Claude Code
os-project-manager commentedon Aug 20, 2026
Landed. PR #10137 went through the merge queue.
Verified by content on
origin/main(7f0cfdba92a1), not by sha ancestry — the queue lands as a squash, so ancestry proves nothing:.objectui-sha=9a3daf8d37ad973a621e5edd276fe32467f90684.changeset/console-9a3daf8d37ad.mdpresent, range line82a94170c405...9a3daf8d37ad, no⚠️ Degraded listbanner.changeset/console-0fd11444a89e.mdabsent — the superseded first-attempt changeset was deleted rather than left alongside151 commits crossed,
@objectstack/console: minor, derived from objectui's own declarations (108 releasing changesets: 20 minor, 88 patch, 0 major). The list is capped at 100 of 108 byCONSOLE_CHANGES_MAX's default and says so in its own line — read the range, not the list, if you need all of them.Three things this card got wrong, all corrected by measurement
origin/main. Wrong instruction: the branch tip was already pushed, and rebasing a pushed branch needs a force-push, which AGENTS.md branch hygiene forbids. The dev seat used a merge commit and pushed fast-forward. Net diff stayed two files.What this card actually turned up
The first attempt failed CI on Console Pin Gate —
scripts/build-console.shcould not build objectui at any pin at or after objectui6d5368ac8, because that repo'sassert-lazy-linter-stays-lazycounter-probe carried a private module-id regex our ownOBJECTSTACK_SPEC_DISTinjection abolishes. Filed as #10136, fixed upstream in objectui#5390, and invisible to objectui's own CI because objectui never builds in injected mode. A routine pin bump is what surfaced a cross-repo build contract defect; that is the argument for bumping the pin regularly rather than letting it drift 149 commits.Both gates are green on the landed commit —
Console Pin Freshness(is the pin current) andConsole Pin Gate(does the pinned SHA build). They ask opposite questions and this card needed both.Follow-ups left open: #10138 (
pnpm sdui:manifestENOENT), objectui#5391 (resolveSpecDistInjectiondoes not validate the override's own dependency resolution). No release was performed.Generated by Claude Code