Repository navigation
Commit 41646a5
Fixes #24749
Clause-②: no
This PR moves the console pin from `12dc7b47c340` to `616df6598b42`:
objectui `main` at `616df6598b429d2b3687301a2041198928e68971`. That
commit carries `cbac9d7dde` (objectstack-ai/objectui#13169, the removal
of objectui's last `filterableFields` reader, objectui#13118). It is the
newest objectui `main` commit at or after `cbac9d7dde` that was green at
the move. With it, the Console Pin Gate builds the console at `main`
again, after #24721 retired `ListViewSchema.filterableFields`
(AGENTS.md, Post-Task Checklist step 4).
This PR is not a release act. The Version Packages PR is not touched,
and no release workflow is dispatched. No objectui source changed, and
no `.github/workflows/**` or `scripts/build-console.sh` change is in it.
The F1 re-test at the new pin is not in this PR; that is the epic seat's
call (#15194).
**Tier:** not governed. `node scripts/pm/check-governed-merges.mjs
--branch claude/issue-24749-console-pin-cbac9d7` at `5b8a7dbee5`: "0 of
5 path(s) hit the register (7 surfaces govern objectstack) ... NOT
governed", exit 0. Size: 5 files, +91 / -8.
## The red, reproduced on the base and gone at the new pin
- **Base.** This branch was cut from `origin/main` `9d13b5fc83`, with
`.objectui-sha` = `12dc7b47c340`. The console build there, run the way
the job runs it (below), fails: lock VERDICT `command-exit 1`; the
client closure build exits 0, then `bash scripts/build-console.sh` exits
1 after 222 s. objectui's dependency build stops at `Failed:
@object-ui/plugin-list#build` (24 of 30 tasks done). Its declaration
build reports exactly two type errors, the two the diagnosis names:
- `src/ListView.tsx(4656,58): error TS2339: Property 'length' does not
exist on type '{ '[REMOVED] Key retired: run `os validate` for its
migration.': never; }'.`
- `src/ListView.tsx(4657,27): error TS2769: No overload matches this
call.`
`grep -c 'error TS'` over the log: 2. That is the same package and step
as CI's annotation on run 39384364728 (Console Pin Gate): "command
(.cache/objectui-12dc7b47c340/packages/plugin-list) pnpm run build
exited (1)".
- **New pin.** At this PR's head, the same build exits 0. objectui's
dependency build runs 34 of 34 tasks, 0 cached. `@object-ui/plugin-list`
builds its declarations ("Declaration files built in 11295ms") and
finishes ("built in 11.70s"). The console's own `tsc && vite build`
passes ("8961 modules transformed"). `grep -c 'error TS'` over the log:
0.
## Choosing the pin
- **Green, read at the move.** REST
`repos/objectstack-ai/objectui/commits/SHA/check-runs`, every page, read
by this session at 2026-10-20T07:41:25Z. The bump ran at about 07:48Z,
with objectui `origin/main` at `186b78d8f347` (fetched just before the
bump).
| objectui `main` commit | check-runs at the move | verdict |
|:--|:--|:--|
| `186b78d8f347` (tip) | 95: 58 success, 3 skipped, **34 in progress** |
still running, so passed over. Re-read at 08:01Z: 99 runs: 88 success, 3
skipped, **2 failure** (`Test (coverage)`, `Test (coverage shard 6/8)`),
6 in progress, so it is now red as well |
| **`616df6598b42`** | **29 completed: 27 success, 2 skipped, 0
failure** | **green: the target** (re-read at 08:01Z: unchanged) |
`616df6598b42` was never a push tip. The queue landed it with `186b78d8`
18 s later, so all its runs are `merge_group` runs on
`gh-readonly-queue/main/pr-13177-157694c7b…`: `CI` (Build & E2E, Type
Check, Test 16 shards, dist pins, Build Docs), `Lint`, `Repo Gates`,
`Governed Surface Guard`, `Changeset Presence`. All 5 workflow runs
concluded `success`. Five app check suites (vercel, fly-io, claude,
cloudflare-workers-and-pages, objectstack-fleet) are queued with 0 check
runs.
For the record, the older commits in the window at the same read:
`157694c7b186` 1 cancelled (`Repo Gates`) and 6 in progress;
`4c36eab58b1a` 1 in progress; `91b658a75d64` 2 failure (`Test
(coverage)`, `Test (coverage shard 6/8)`); `5dbc6a579287` 3 cancelled
(`Lint`, `Repo Gates`, `Bundle Analysis`); `cbac9d7ddedb` 99 runs: 96
success, 3 skipped. objectui `main` moved on to `961b69f97`
(`f48a4d554`, `961b69f97`) after the move. This PR does not re-choose.
- **The bump.** `OBJECTUI_ROOT=SCRATCH_CLONE bash
scripts/bump-objectui.sh --no-commit
616df65`, exit 0. It printed
"12dc7b47c340..616df65 walks completely" and "objectui pin:
12dc7b4 → 616df65 (on origin/main)". SCRATCH_CLONE is a full
(non-shallow) clone of objectui from GitHub in the session scratchpad. ⛔
No shared `../objectui` checkout was written. Every objectui read for
the bump, the manifest and the lockstep record came from that scratch
clone or from the build trees made from it. The shared checkout is
shallow, so it could not walk the range.
- **Ancestry,** in that clone (`--is-shallow-repository` false), each
against `616df6598b42`:
- `cbac9d7dde` is an ancestor: exit 0;
- `0b36ffa8cc5c` (objectui#13132, the eleven stale live specs): exit 0;
- `fe11eb12e578` (objectui#13042, the `referenceVia` type half in
`$select`): exit 0;
- the old pin `12dc7b47c340`: exit 0;
- control, the reverse (`616df6598b42` an ancestor of `12dc7b47c340`):
exit 1.
Range: 32 non-merge commits.
- **objectui's own objectstack pin** did not move in this range:
`.objectstack-sha` = `f4755a68a797` at both ends.
- **What the range brings in.** These are the 32 objectui PRs #13079
through #13177. Among them are the ones triage named:
- objectstack-ai/objectui#13169 (`cbac9d7dd`, objectui#13118);
- objectstack-ai/objectui#13170 (`d05f33b2e`, the CSV-declared saved
mapping, objectui#13156);
- objectstack-ai/objectui#13167 (`427e59c9e`, the unnamed RLS policy,
objectui#13113);
- objectstack-ai/objectui#13158 (`a57d80afe`, an ungrouped list asks for
`nameField`, objectui#13116);
- objectstack-ai/objectui#13168 (`96036bdd9`, the backfill checkbox
wait, objectui#13120).
## The console build path, end to end
Each step is run as `ci.yml`'s `console-pin` job runs it, read off the
job and not edited. The heavy steps ran under
`scripts/pm/os-verify-lock.sh`, and each exit code was captured before
any pipe. This is a shared box, so wall-clock figures are shared-box
readings. Deviations from the CI job:
- `--concurrency=2` for the client closure and for objectui's dependency
build (`OBJECTUI_DEPS_BUILD_CMD`), for the container's memory budget;
- `NODE_OPTIONS=--max-old-space-size=4096`;
- `OBJECTUI_ROOT` names the full scratch clone, where CI shallow-clones;
- the cache restore/save steps do not exist locally, so `CACHE_HIT` is
empty.
**Final run, at this PR's head `5b8a7dbee5`.** That is the branch merged
with `origin/main` `6b222464ce`, which brought spec changes into the
packed packages. The build tree `.cache/objectui-616df6598b42` and
`packages/console/dist` were deleted first.
| step | command | exit |
| --- | --- | --- |
| install | `pnpm install --frozen-lockfile` | 0 |
| closure + build | `pnpm exec turbo run build
--filter=@objectstack/client... --concurrency=2` (36/36), then `bash
scripts/build-console.sh` (485 s). Lock VERDICT `command-exit 0`, held
790 s | 0 |
| assert | the job's "Assert a real Console dist is in place" checks,
`CACHE_HIT` empty: "Console dist present (65580 KB, via
scripts/build-console.sh) from objectui@616df6598b42" | 0 |
| stamp | `pnpm check:console-sha`: "Console dist matches the objectui
pin (objectui@616df6598b42)." | 0 |
| injection | `pnpm check:console-injection --require-stamp`: self-test
100 assertions, then "@objectstack/spec: the dist carries this tree's
copy, and not the published one." | 0 |
| manifest | `node scripts/gen-sdui-manifest-node.mjs`: 107 components,
sha256 `d1fde278ffd6…`. The committed pair is byte-identical (`git
status --porcelain`: 0 lines) | 0 |
| manifest check | `OBJECTUI_ROOT=.cache/objectui-616df6598b42 node
scripts/check-sdui-manifest.mjs`: present, intact, recorded at the live
pin `616df6598b42`, `@object-ui 17.7.0` | 0 |
| lockstep | `pnpm check:sdui-lockstep`: byte-identical to
objectui@616df6598b42 over 214 grammar lines, 25 diagnostic codes, the
`not-a-container` predicate | 0 |
**`build-console.sh`'s `.objectstack-sha` branch ran, in this order**
(build log):
1. "objectui@616df65 installs @objectstack/client @objectstack/core
@objectstack/formula @objectstack/lint @objectstack/sdui-parser
@objectstack/spec @objectstack/types by commit — building them here..."
(turbo 36/36, cached);
2. "Building objectui's own @objectstack/* at its .objectstack-sha
f4755a6, the reference the spec assertion judges this bundle
against..." (from the machine's pin store);
3. "OBJECTSTACK_ROOT is set: packing @objectstack/* from
/home/user/objectstack-issue-24749, standing in for the pin
f4755a6.", "pack 7 package(s): 15.4s", then
"node_modules/.cache/objectstack now holds ... from
/home/user/objectstack-issue-24749 (5b8a7db)";
4. the frozen install: "Lockfile is up to date, resolution step is
skipped", "Done in 6.8s";
5. objectui's dependency build, 34/34 tasks, 0 cached, then the
console's `tsc && vite build`: "8961 modules transformed.";
6. the closing checks:
- "Bundle canary 'import/jobs' present";
- "Single-zod canary: exactly one zod version literal
{major:4,minor:6,patch:7}" (2262 `assets/*.js` read);
- "Console bundle carries THIS tree's @objectstack/spec, and only it
(vendored: @objectstack/spec of objectui's own build of objectstack
f4755a6)";
- "Shipped the tracked sdui.manifest.json (recorded at
objectui@616df6598b42, this pin).";
- "@objectstack/console dist ready (65580 KB) from
objectui@616df6598b42".
**All seven `@objectstack/*` packages objectui installs are this
tree's,** read off the build tree after the install at `5b8a7dbee5`:
- `node_modules/.cache/objectstack/.stamp.json`: `source: external`,
`root` this worktree, `sha` = `5b8a7dbee5c8…`, `dirty: false`, all seven
at `18.0.0-next.5`.
- `node_modules/.pnpm`: 7 `@objectstack` entries, all of the
`@objectstack+NAME@file+.objectstack-pin+NAME…` form.
- Each installed package's `dist/` against `packages/NAME/dist/`: `diff
-rq` exit 0 for all seven (spec, core, types, client, formula,
sdui-parser, lint). Control: the installed spec's `dist` against
`packages/core/dist` exits 1.
- The build tree's `pnpm-lock.yaml` is byte-identical to the one
committed at `616df6598b42` (`cmp` exit 0). It has 0 registry-resolved
`@objectstack/*` keys and 14 `file:` keys. Control for the pattern:
objectui's lockfile at `0707b4ae3712` counts 14 registry-resolved keys.
**The in-build injection assertion is NOT vacuous at this pin.** At
`616df6598b42` it found a witness on each side:
- "16 of 22 injected-only descriptions are in the bundle";
- "all 10 pin-only descriptions are absent".
So no independent measurement is owed. A cross-check anyway, `grep -rlF`
over the bundle's `assets/*.js`, with counts of files in this tree's
`packages/spec/dist` and in the `f4755a68a797` reference spec's `dist`
in brackets:
- "NOT EXECUTED by this runtime, and publish REJECTS the key" [18 / 0]:
1 bundle file;
- the stale "NOT EXECUTED in 17.x, and publish REJECTS the key" [0 /
18]: 0 bundle files.
**Earlier runs:**
- At `1ad970cafe` (the bump commit, before the manifest regeneration and
the merge): `build-console.sh` exit 0 after 465 s, lock VERDICT 0, the
same branch order, "dist ready (65580 KB)", "16 of 17 injected-only
descriptions are in the bundle". It warned "Shipped the tracked
sdui.manifest.json, but its record names objectui@12dc7b47c340", as
expected before the regeneration. That run's build tree produced the
committed manifest pair and lockstep record.
- After the merge, `origin/main` moved to `c56115bf96` (#24797, #24554,
#24805). None of those three touches the seven packed packages,
`.objectui-sha`, the SDUI files or the console build scripts (`git diff
--name-only` filter: 0 paths). So the console readings above hold for
the inputs at current `main`.
## The second half: manifest and lockstep record
- `node scripts/gen-sdui-manifest-node.mjs`, exit 0: 107 components,
sha256 `d1fde278ffd6…`. It re-recorded
`scripts/sdui-manifest.record.json` at the pin (`built-tree`,
`.cache/objectui-616df6598b42/apps/console`, `@object-ui/core` 17.7.0).
Re-run at `5b8a7dbee5`: exit 0, byte-identical.
- `sdui.manifest.json` keeps 107 components, none added or removed. One
component changes its inputs: `list-view` gains `requiredPermissions`
(objectui `b0176214a`, objectstack-ai/objectui#13087) and `addRecord`
(objectui `d11174ad1`, objectstack-ai/objectui#13098). No input is
removed. The old manifest names `filterableFields` nowhere (0 hits), so
the retirement moves nothing here.
- `packages/sdui-parser/objectui-lockstep.json`:
- before: `node scripts/check-sdui-lockstep.mjs` exit 1 (`[pin-moved]`);
- re-record: `OBJECTUI_ROOT=.cache/objectui-616df6598b42 pnpm
gen:sdui-lockstep` exit 0;
- after: `pnpm check:sdui-lockstep` exit 0.
objectui's `packages/sdui-parser/src` is unchanged over the range (`git
diff --stat`: empty). Both blobs are unchanged (`0131f27cf86d`,
`76c18fb95d1f`), so no parser port is owed.
## The console changeset
`.changeset/console-616df6598b42.md` was written by
`scripts/bump-objectui.sh --no-commit`, under the generator's own name.
Its list is the generator's, untouched.
- `@objectstack/console` **minor**: the HIGHEST level objectui declared
over the range. Counts: 30 releasing changesets across 32 non-merge
commits, 2 annotated breaking, 1 release-nothing, and 1 commit without a
changeset (`0b36ffa8c`, listed by subject in the changeset).
- The range declares two breaking entries, so the generator wrote its
unanswered ADR-0087 placeholder and said a human must answer it. It is
answered `not-required (no-migration-prescription)` against this tree,
with `Clause-②: no` beside it, as in PR #24660. That is the one
hand-written part of the five files:
- objectui `cbac9d7dd` (objectui#13118) removes the `filterableFields`
reader, and `@object-ui/types` gains a `?: never` tombstone on
`NamedListView`. The spec half is this tree's own and already landed:
conversion `view-list-filterable-fields-removed` in
`packages/spec/src/conversions/registry.ts` (#24721).
- objectui `df7156808` (objectui#13075) types
`NavigationItemSchema.visible` by reference to this tree's
`EvaluatedExpressionInputSchema`, which this tree's spec already uses
for a navigation entry's `visible` (`packages/spec/src/ui/app.zod.ts`).
- No package in this tree imports or depends on an `@object-ui/*`
package: `git grep` for imports finds 0, and for `package.json`
dependencies 0.
- `node scripts/check-adr-0087-registration.mjs --base origin/main`,
exit 0: "1 declared-breaking changeset(s), each carrying an ADR-0087
disposition".
## Gates
Every gate below ran at this PR's head `5b8a7dbee5`, after a workspace
build there. That build was `turbo run build --filter=!@objectstack/docs
--concurrency=2`: 76/76, lock VERDICT `command-exit 0`.
`packages/runtime/.objectstack` was removed before the gates ran. Each
exit code was captured before any pipe.
- `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
--commands`, with no paths, derived **73** commands. It took 5 paths
against merge base `6b222464c`, three-dot. **All 73 exited 0.**
- `--ran` reconciliation over `COMMAND :: exit N` lines: "Run
reconciliation — 73 derived, 73 run, 0 NOT-MEASURED, 0 UNRUN", then "73
derived famil(ies) accounted for — 73 run, 0 NOT-MEASURED (a DERIVED
zero — all 73 recorded an exit code and none of them is 3)". Exit 0.
- Some of those 73 are worth reading out. Each exited 0:
- `check-adr-0087-registration --base origin/main` (the exemption notice
names this changeset);
- `check-empty-changeset --base origin/main`;
- `check-changeset-no-major --base origin/main`;
- `check-sdui-manifest.mjs` and its `--self-test`;
- `pnpm check:sdui-lockstep`, `pnpm check:console-sha` and `pnpm
check:console-injection`;
- `pnpm check:objectui-changeset`, `pnpm check:page-declaration-shape`
and `pnpm check:nul-bytes`;
- `pnpm check:pm-changeset-deadline-census`.
- Added outside the derivation: `pnpm check:objectui-bump`, exit 0 ("20
assertions across 5 cases").
- No package source changed, so no package `test` / `typecheck` is owed.
`test:repo` is CI's (`Test Core`).
## CI
- **The Console Pin Gate does not run on this PR or in the merge
queue.** `ci.yml`'s two speeds apply: the `console-pin` job's `if:`
excludes `pull_request` and `merge_group`. So the **pre-merge full
battery is NOT MEASURED**, and the local run above is the pre-merge
reading.
- **The CI proof is `main`'s first full-battery run after the merge.**
This PR changes `.objectui-sha`, so the console-dist cache key misses,
and that run builds the console fresh at `616df6598b42`. The dispatching
seat reads it. If it is red, it is a `main` red this card owns.
- The fast set (Lint & Repo Gates, TypeScript Type Check, Test Core,
Build Core, Governed Surface Queue Guard and the rest) runs on this PR
as usual.
## Acceptance notes
Observations, not filed:
- The changeset keeps the generator's file name
(`console-616df6598b42.md`), where PR #24660 renamed its changeset to
the card's prefix. No gate reads the name.
- `0b36ffa8c` (objectui#13132) is in this pin. The `domain:ui` pointer
`6284006658` on #24579 says the checklist's `automated.stale` markers
can drop once the pin passes it. `docs/qa/**` is not touched here.
- objectui `main`'s tip at the move, `186b78d8f347`, went red after the
move (`Test (coverage)`, `Test (coverage shard 6/8)`), and so did
`91b658a75d64` earlier, with the same two runs. That is objectui's to
read; nothing here depends on it.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 7c2eab9 commit 41646a5
5 files changed
Lines changed: 91 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 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 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 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
20 | | - | |
| 19 | + | |
| 20 | + | |
21 | 21 | | |
22 | 22 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
270 | 270 | | |
271 | 271 | | |
272 | 272 | | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
273 | 279 | | |
274 | 280 | | |
275 | 281 | | |
| |||
280 | 286 | | |
281 | 287 | | |
282 | 288 | | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
283 | 294 | | |
284 | 295 | | |
285 | 296 | | |
| |||
0 commit comments