Repository navigation
Commit 06900c9
Fixes #25151
Clause-②: no
This PR moves the console pin from `cf153eb2e535` to `56cf4d8e89b7`:
objectui `main` at `56cf4d8e89b71586e4d9bb9921433d44b03addf3`. That
commit is the merge of objectstack-ai/objectui#13316 (objectui#13315),
objectui's half of #25078's two-repo fix: objectui's Import Wizard and
identity import send a `.csv` / `.tsv` / `.txt` file to the import door
as CSV text. It is also objectui `main`'s tip. With this pin on `main`,
#25078's PR #25130 can merge `main` over it and land.
This PR is not a release act. It does not touch the Version Packages PR
and dispatches no release workflow. No objectui source changed, nothing
was written to objectui, and no product code, `.github/workflows/**` or
`scripts/build-console.sh` is in the diff.
**Tier:** not governed. `node scripts/pm/check-governed-merges.mjs
--branch claude/issue-25151-objectui-pin-13316` at `c331b2c9e`: "0 of 4
path(s) hit the register (7 surfaces govern objectstack) ... NOT
governed", exit 0. Size: 4 files, +40 / -8.
## Choosing the pin
The pin is judged on objectui's **push and merge-group CI** for this
commit, as earlier pin moves were. That is the seat's ruling in claim
amendment `6330756861` on #25151. There is no newer objectui `main`
commit to consider: `56cf4d8e89b7` is the tip.
- **Push CI, all success.** objectui `CI` run **39702726461**, event
`push`, branch `main`, head `56cf4d8e89b7`, attempt 1: all 31 jobs
`success`, coverage shards included. The other push runs on the commit
are also `success`: Lint 39702726493, Repo Gates 39702726453, Changeset
Release 39702726466, Changeset Guard 39702726440 and Bundle Analysis
39702726467.
- **Merge-group CI, all success.** On
`gh-readonly-queue/main/pr-13316-…`: CI 39701528761, Lint, Repo Gates,
Changeset Presence and Governed Surface Guard.
- **The one red is a scheduled run, recorded here, not hidden.** The
scheduled `CI` run **39703234572** (event `schedule`, created 01:01:32Z)
on the same commit concluded `failure` on two jobs. `Test (coverage
shard 5/8)` failed on
`apps/console/src/pages/settings/__tests__/SettingsView.leaveGuard-13163.test.tsx`,
case "after a successful save the page is clean again: no prompt"
(`AssertionError: expected true to be false`). Its aggregator `Test
(coverage)` then reported "Coverage gate did NOT run | shards=failure".
Tally of `commits/56cf4d8e89b7/check-runs` at 2026-10-22T01:38:21Z: 99
check-runs, 94 `success`, 3 `skipped`, 2 `failure` (these two), 0 in
progress.
- **Why this is not taken as a red pin:**
- The range `cf153eb2e535..56cf4d8` does not touch that test file.
In a full clone, it last changed in `7a5f26715`
(objectstack-ai/objectui#13204), an ancestor of the old pin (`merge-base
--is-ancestor` exit 0). The component it tests, `SettingsView.tsx`, last
changed in `0093b2c82` (objectstack-ai/objectui#13298), which is in this
range.
- The same file passed in the push run on this same commit.
- Both of those changes are in `7e9708e632`. I read 11 scheduled `CI`
runs on that commit (13:34Z to 23:32Z on 2026-10-21): 9 passed, and the
2 that failed did so on infrastructure (a test shard with no conclusion,
a `Type Check` timeout), not on this test.
- Rerun locally 5 times at `56cf4d8e89b7`, from the root of the objectui
tree that `build-console.sh` built, under
`scripts/pm/os-verify-lock.sh`: `pnpm exec vitest run --maxWorkers=2
apps/console/src/pages/settings/__tests__/SettingsView.leaveGuard-13163.test.tsx`.
Each run exited 0 with "Test Files 1 passed (1)" and "Tests 12 passed
(12)"; lock VERDICT `command-exit 0`.
- The seat files the flake in objectui, for objectui's own lane.
- **Ancestry,** in a full (non-shallow) scratch clone of objectui
(`--is-shallow-repository` false):
- the old pin `cf153eb2e535` is an ancestor of `56cf4d8e89b7`: exit 0;
- control, the reverse (`56cf4d8e89b7` an ancestor of `cf153eb2e535`):
exit 1;
- `56cf4d8e89b7` is `origin/main`'s tip, and `bump-objectui.sh` reports
it "(on origin/main)".
## What the move carries: 19 commits
`git log cf153eb..56cf4d8` in the full clone: 19 non-merge
commits, 0 merges. One line each, newest first. **FLAG** marks a commit
that changes a contract the console build or a pinned record in this
repo reads.
- `56cf4d8e8` plugin-grid, app-shell: a CSV file reaches the import door
as CSV text (objectstack-ai/objectui#13316). **FLAG, by design:** the
import-door contract, objectui's half of #25078. The CSV import now
sends `format: 'csv'` with CSV text to this repo's import door.
- `7e9708e63` app-shell: register the console home blocks under the
app-shell namespace (objectstack-ai/objectui#13314). **FLAG, SDUI
registry:** `hero`, `stat`, `usage-bar`, `checklist` and `tile-grid`
register under namespace `app-shell`, and objectui's own
`known-schema-types` list gains five `app-shell:` keys. Measured effect
here: none. The regenerated `sdui.manifest.json` is byte-identical (107
components, sha256 `d1fde278ffd6…`), so it is not in this diff.
- `78bd6d732` app-shell: the /data filter bar offers single-value
relation fields (objectstack-ai/objectui#13313)
- `f5e42cad4` types: stop authoring the retired addRecord.mode /
formView in two spec-alignment tests (objectstack-ai/objectui#13312).
Tests only.
- `13c92e78d` data-objectstack: the batch-6 DroppedFieldsEvent reason
pin with stored_expression subtracted (objectstack-ai/objectui#13311).
Tests only.
- `279425409` app-shell: the Position preview lists the permission sets
a position declares (objectstack-ai/objectui#13307). It reads the spec
key `position.permissionSets`, which this tree declares
(`packages/spec/src/identity/position.zod.ts`). The console's `tsc`
build passed against this tree's spec.
- `601c406dd` react: the withholding console line names an element, not
a navigation entry (objectstack-ai/objectui#13306)
- `3aafc0d53` react: a page node whose visibility predicate faults is
withheld (objectstack-ai/objectui#13302)
- `813c3d973` fields: password inputs carry an autocomplete token
(objectstack-ai/objectui#13300)
- `0093b2c82` console: a settings value that misses its declared format
blocks Save (objectstack-ai/objectui#13298). This is the last change to
`SettingsView.tsx`, the component under the scheduled run's red test
above.
- `7c405b73a` components: a page:tabs item whose visibleWhen faults
withholds its tab (objectstack-ai/objectui#13297)
- `f66973232` plugin-detail: show an object-level rule refusal without
the _record label (objectstack-ai/objectui#13296)
- `c8f8b10ad` components: select-all, the row checkboxes and the row
numbers share one centre line (objectstack-ai/objectui#13294)
- `fbb4b23bf` components, plugin-grid: selecting a cell's text neither
opens the record nor starts an edit (objectstack-ai/objectui#13192)
- `8701f1e76` components, fields: head a widget-hinted nameField through
its face (objectstack-ai/objectui#13291). This is the range's one
`minor` changeset.
- `a91f6bbb1` console: the approvals inbox opens a request on its served
page (objectstack-ai/objectui#13290). **FLAG, served-page contract:**
the console now navigates to the standard record route, which mounts
this repo's page `sys_approval_request_detail` (present here:
`packages/plugins/plugin-approvals/src/sys-approval-request.page.ts`).
- `3aa2f5261` release packages (objectstack-ai/objectui#11600). **FLAG,
versions:** `@object-ui/*` moves from 17.7.0 to 18.0.0, and so does
`objectuiWorkspaceVersion` in `scripts/sdui-manifest.record.json`.
`check-sdui-manifest`'s version oracle agrees: 18.0.0. This commit
carries no objectui changeset.
- `53dea27af` app-shell: give the package dialog's Dependencies row a
key/value editor (objectstack-ai/objectui#13284)
- `9e1bff63a` app-shell: the app report index lists the reports its
navigation ships (objectstack-ai/objectui#13283)
**Unchanged over the range:**
- objectui's `.objectstack-sha`: `06cab4849a8a` at both ends.
- `pnpm-lock.yaml`, the root `package.json`, `pnpm-workspace.yaml` and
`apps/console/vite.config.ts`: no diff.
- `packages/sdui-parser/src`: 0 diff lines, so the lockstep blobs stay
as they are and no parser port is owed.
- `packages/types/src`: only two test files change.
## The procedure, as written
No shared objectui checkout was written to. `/home/user/objectui` is
shallow and shared, so every objectui read came from a full scratch
clone that `OBJECTUI_ROOT` names, and `build-console.sh`'s build
worktree registration landed in that clone. Exit codes were captured
before any pipe, and the heavy steps ran under
`scripts/pm/os-verify-lock.sh`.
| step | command and reading | exit |
| --- | --- | --- |
| bump | `OBJECTUI_ROOT=SCRATCH_CLONE bash scripts/bump-objectui.sh
56cf4d8 --no-commit`:
"cf153eb2e535..56cf4d8 walks completely", "16 releasing
changeset(s), 0 breaking (0 declared major, 0 annotated), 2
release-nothing, 1 commit(s) without a changeset — objectui declared
`minor`, recorded as `patch`", "objectui pin: cf153eb →
56cf4d8 (on origin/main)", "wrote changeset console-56cf4d8e89b7.md
(@objectstack/console: patch)". `--no-commit` is used only so the commit
carries this repo's trailer pair; the files are the script's own | 0 |
| build | The seven `@objectstack/*` packages objectui installs by
commit (client, core, formula, lint, sdui-parser, spec, types), with
their closure: `turbo run build ... --concurrency=2`, 37 packages. Then
`OBJECTUI_ROOT=SCRATCH_CLONE OBJECTUI_DEPS_BUILD_CMD='pnpm exec turbo
run build --filter=@object-ui/console^... --concurrency=2' bash
scripts/build-console.sh` (= `pnpm objectui:build`). Lock VERDICT
`command-exit 0`, held 689 s | 0 |
| manifest | `node scripts/gen-sdui-manifest-node.mjs`: "wrote
sdui.manifest.json (107 components, 185019 bytes, sha256
d1fde278ffd6…)", "re-recorded scripts/sdui-manifest.record.json at pin
56cf4d8 — built-tree .cache/objectui-56cf4d8e89b7/apps/console,
@object-ui/core workspace version 18.0.0" | 0 |
| manifest check | `node scripts/check-sdui-manifest.mjs`: "present,
intact (sha256 d1fde278ffd6…, 107 components) and recorded at the live
objectui pin 56cf4d8" | 0 |
| lockstep, before | `pnpm check:sdui-lockstep`: `[pin-moved]` | 1 |
| lockstep record | `OBJECTUI_ROOT=SCRATCH_CHECKOUT_AT_PIN pnpm
gen:sdui-lockstep` (a second full scratch clone, checked out detached at
`56cf4d8e89b7`): "recorded objectui@56cf4d8e89b7
(2026-10-22T00:44:27+00:00) — 214 region line(s), blob 0131f27cf86d, 25
diagnostic code(s), containment predicate 76c18fb95d1f" | 0 |
| lockstep, after | `pnpm check:sdui-lockstep`: "byte-identical to
objectui@56cf4d8e89b7 ... over 214 grammar line(s) [blob 0131f27cf86d],
agrees on all 25 diagnostic code(s) and on the `not-a-container`
predicate [blob 76c18fb95d1f], across 7 non-test source(s)" | 0 |
| bump self-test | `pnpm check:objectui-bump`: "bump-objectui self-test
PASSED — 20 assertions across 5 cases" | 0 |
**The console build's closing checks,** at `aabbc29a3`, the bump commit.
The later commits add the manifest record, the lockstep record and the
merge of `main` `2aaee3b24`. That merge brings #25145 and #25147, which
touch `packages/runtime`, `service-automation`, `plugin-auth`,
`plugin-email` and `verify`, none of them one of the seven packages the
console bundle packs (`git diff --name-only` over those seven: empty).
- "Bundle canary 'import/jobs' present".
- "Single-zod canary: exactly one zod version literal
{major:4,minor:6,patch:7}", over 2261 `assets/*.js` files.
- "Console bundle carries THIS tree's @objectstack/spec, and only it".
All 26 injected-only descriptions are present, and all 5 pin-only
descriptions are absent.
- "@objectstack/console dist ready (65708 KB) from
objectui@56cf4d8e89b7".
- `pnpm check:console-sha`: "Console dist matches the objectui pin
(objectui@56cf4d8e89b7)".
The Console Pin Gate does not run on a PR or in the merge queue
(`ci.yml`'s `console-pin` job excludes `pull_request` and
`merge_group`). So this local build is the pre-merge reading. `main`'s
first full-battery run after the merge rebuilds the console fresh at
`56cf4d8e89b7`, because this PR changes `.objectui-sha` and so misses
the console-dist cache key.
## The regenerated files
- `.objectui-sha`: `cf153eb2e535…` →
`56cf4d8e89b71586e4d9bb9921433d44b03addf3` (`bump-objectui.sh`).
- `.changeset/console-56cf4d8e89b7.md` (`bump-objectui.sh`, untouched):
`@objectstack/console` **patch**. Counts: 16 releasing of 18 changesets
over 19 non-merge commits, 0 breaking, 2 release-nothing, and 1 commit
without a changeset, which the changeset lists by subject. There is no
breaking entry, so the generator wrote no ADR-0087 placeholder and no
line of the changeset is hand-written.
- `scripts/sdui-manifest.record.json` (`gen-sdui-manifest-node.mjs`):
`objectuiSha`, `modulesRoot`, `objectuiWorkspaceVersion` (17.7.0 →
18.0.0) and `generatedAt` move.
- `packages/sdui-parser/objectui-lockstep.json` (`gen:sdui-lockstep`):
only `rev`, `revDate` and `recordedAgainstPin` move. Both blobs
(`0131f27cf86d`, `76c18fb95d1f`) and the 25 codes are unchanged. The
file is not in `@objectstack/sdui-parser`'s `files`, so it publishes
nothing.
- `sdui.manifest.json` is **not** in the diff: the generator rewrote it
byte-identical.
## Gates
Every gate below ran at this PR's head `c331b2c9e`, after the merge of
`origin/main` `2aaee3b24` and a fresh install. A workspace build came
first, with `packages/runtime/.objectstack` removed: `turbo run build
--filter='!@objectstack/docs' --concurrency=2`, 76/76 tasks (22 cached),
lock VERDICT `command-exit 0`. Each exit code was captured before any
pipe.
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack`, with no paths, derived **73** commands from
4 paths against merge base `2aaee3b24` (three-dot). **All 73 exited 0.**
- `--ran` over the `COMMAND :: exit N` record: "Run reconciliation — 73
derived, 73 run, 0 NOT-MEASURED, 0 UNRUN", then "73 derived famil(ies)
accounted for". Exit 0.
- Some of the 73, each exit 0:
- `check-sdui-manifest.mjs`: "present, intact (sha256 d1fde278ffd6…, 107
components) and recorded at the live objectui pin 56cf4d8"; its
`--self-test` too.
- `pnpm check:sdui-lockstep`: "byte-identical to objectui@56cf4d8e89b7".
- `check-adr-0087-registration --base origin/main`: "this PR adds no
declared-breaking changeset (1 non-breaking changeset(s) seen)".
- `check-empty-changeset --base origin/main`: "1 declaring changeset(s)
added".
- `pnpm check:dts-closure`: "76 built package(s) swept - 179/179
declared declaration file(s) present".
- `pnpm check:published-files`, `pnpm check:objectui-changeset` and
`pnpm check:merge-driver`.
- `pnpm check:nul-bytes`: "scanned 11736 text file(s) ... no raw ASCII
control bytes".
- `pnpm check:console-sha` and `pnpm check:console-injection` exit 0 at
this head, but only by skipping: there is no `packages/console/dist` in
this worktree. Their real readings were taken at `7ab800f7d`, with the
dist built at the pin, and are quoted in the procedure section above.
- Added outside the derivation: `pnpm check:objectui-bump`, exit 0.
- `@objectstack/sdui-parser` (its directory holds the lockstep record):
`test` gave "Test Files 14 passed (14)", "Tests 225 passed (225)", and
`typecheck` (`tsc --noEmit`) exited 0, both under the lock. No package
source changed, so nothing else is owed locally. `test:repo` is CI's
(`Test Core`).
## Acceptance notes
- **The scheduled-run red above is objectui's.** No test in this repo
runs it, and objectui's push CI on the same commit passed it. The seat
files it in objectui.
- **#25130 still owes its own landing steps.** After this lands, PR
#25130 merges `main` over it, and its new head owes a new review of
record. Nothing in this PR touches #25130's files.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01AFrKwndmrCLtF5V9hNtrw3)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 6b44efa commit 06900c9
4 files changed
Lines changed: 40 additions & 8 deletions
File tree
- .changeset
- packages/sdui-parser
- scripts
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
10 | | - | |
| 9 | + | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | | - | |
17 | | - | |
| 16 | + | |
| 17 | + | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
0 commit comments