Skip to content

The vendored packages/console/dist is built from a pin two days behind .objectui-sha — QA runs measure a console the repo no longer pins #7752

Description

@huangyiirene

Symptom

The console served to a QA run is not the console the repo pins, and the gap is large enough to invalidate findings.

Measured in this run:

  • served bundle — packages/console/dist/.objectui-sha = 09987b680, built 2026-08-09 02:35 UTC
  • repo-root pin — .objectui-sha = 6314e87f2, 2026-08-11 04:17 UTC

Two days and a substantial range of objectui work separate them, and the run's page-variables-and-actions item was marked blocked(dependency) rather than FAIL because of it.

The blocked clauses

page-variables-and-actions clauses 4-5: the submit POSTs a literally empty body, because bodyExtra is dropped by ElementButtonRenderer's key whitelist at the served pin. objectui origin/main forwards it end-to-end via 7e5bb5d4e"fix(actions): forward bodyExtra end-to-end through the action chain (#3924)" — and git merge-base --is-ancestor 09987b680 7e5bb5d4e confirms the fix landed after the served pin (fix 2026-08-09 05:38 UTC; pin 02:35 UTC). The repo-root pin already contains it.

The server half is proven healthy independently — a real POST created a showcase_inquiry with source:'web', status:'new'. So there is nothing to fix in the framework here; there is a bundle to rebuild and clauses to re-run.

Everything else that passes in that item is genuine and unaffected: page variables initialize empty and gate dependent blocks, a ref-targeted picker selection flips the gate live with 0 main-frame navigations, one text input's write drives another component's visibility, and a reload with no selection re-initializes empty.

Root cause / remediation

packages/console/dist is a gitignored, locally-built artifact (packages/console/.gitignore = dist/). It is rebuilt only by scripts/build-console.shpnpm objectui:build — and not by turbo run build, so pulling a branch that moves .objectui-sha updates the pin and leaves the old dist serving.

Remediation is pnpm objectui:build (rebuild at the pinned SHA), notobjectui:refresh — the pin is already correct, and refresh would re-bump it to the local ../objectui HEAD.

Worth a second look while fixing: the drift guard for exactly this condition already exists. scripts/check-console-sha.mjs compares the dist stamp against the pin and exits 1 with that remediation, and it is wired into pnpm dev / dev:showcase / dev:crm / dev:todo via check:console-sha. A run that served a drifted dist therefore booted the app by a path that does not pass through it. Either the QA boot path should route through the guarded script, or the guard needs a second seat on whatever path the runner uses — otherwise the next run silently repeats this.

What to re-run after the rebuild

Related

Console-pin cards are a recurring lane: #7411 (bump, closed), #7268 (bump, closed), #6813 (bump, closed). All of those move the pin; this one is the other half — the pin moved and the dist did not follow.

Source

Extracted from the QA run #7695 (framework 92f26f7, console 09987b680).

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions