Skip to content

chore(console): move the objectui pin 12dc7b47c340 → 616df6598b42, past the filterableFields reader's removal (objectui#13169) - #24829

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-24749-console-pin-cbac9d7
Oct 20, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-24749-console-pin-cbac9d7

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

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

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@616df6598b42 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:

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, feat(plugin-list): page list-view honours requiredPermissions objectui#13087) and addRecord (objectui d11174ad1, feat(app-shell,plugin-list): a page list-view node's addRecord opens the object list's create; publish list-view.addRecord 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 chore(console): move the objectui pin 4016370af3c9 → 12dc7b47c340, regime C for sharing rules (objectui#13050) #24660. That is the one hand-written part of the five files:
  • 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:


Generated by Claude Code

objectui main at 616df6598b429d2b3687301a2041198928e68971, which carries
cbac9d7dde (objectui#13169, the filterableFields reader's removal), so the
Console Pin Gate builds the console against main again.

Written by scripts/bump-objectui.sh --no-commit; the changeset's ADR-0087
disposition and its Clause-② line are the operator's answer the generator
asks for.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
…bjectui 616df6598b42

The pin move's second half: node scripts/gen-sdui-manifest-node.mjs over the
tree pnpm objectui:build left at .cache/objectui-616df6598b42 (107 components;
list-view publishes requiredPermissions and addRecord), and
OBJECTUI_ROOT=.cache/objectui-616df6598b42 pnpm gen:sdui-lockstep (both
blobs unchanged, so no parser port is owed).

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tooling labels Oct 20, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 1 changed file(s) yielded no anchor (packages/sdui-parser/objectui-lockstep.json), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

What this run could not see
  • 1 changed file(s) yielded no anchor (packages/sdui-parser/objectui-lockstep.json) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 3 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json ddb3360a4954c1ccb6878deb3ca0b303c79d3289 → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Seat review

ACCEPT · domain:devx seat 1 · os-warren · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-20T09:41Z · head 5b8a7dbee5 · card #24749 (claim 6285897913)

The maintainer confirmed the landing in this seat's chat (「24829 同意」), after the seat recommended it: holding it keeps main's full battery red, and the release gate refuses the 18.0 publish.

  • Form. Draft, base main, first line Fixes #24749, assignee os-warren. node scripts/pm/check-governed-merges.mjs --pr 24829 → NOT governed. git merge-tree against main is clean. No other open PR touches .objectui-sha or the SDUI manifest files.

  • Scope. PR chore(console): move the objectui pin 4016370af3c9 → 12dc7b47c340, regime C for sharing rules (objectui#13050) #24660's shape, five files:

    • .objectui-sha 12dc7b47c340 → 616df6598b42;
    • sdui.manifest.json;
    • scripts/sdui-manifest.record.json;
    • packages/sdui-parser/objectui-lockstep.json;
    • .changeset/console-616df6598b42.md (@objectstack/console minor, derived from objectui's declared range).

    Everything is generated by bump-objectui.sh, gen-sdui-manifest-node.mjs and gen:sdui-lockstep, except the changeset's ADR-0087 marker line, which the generator leaves for a human, as in PR chore(console): move the objectui pin 4016370af3c9 → 12dc7b47c340, regime C for sharing rules (objectui#13050) #24660.

  • The target pin, re-read by the seat on objectui.

  • The red, reproduced and cleared (the dev's readings).

    • At BASE, build-console.sh exits 1 at @object-ui/plugin-list#build with exactly the diagnosis's two errors: ListView.tsx TS2339 and TS2769.
    • At the head, it exits 0 with 0 error TS.
    • Every Console Pin Gate step passes locally: check:console-sha, check:console-injection --require-stamp (not vacuous at this pin), check-sdui-manifest.mjs and check:sdui-lockstep. The seven @objectstack/* packages are this tree's.
    • The dispatch-gates union is 73 derived, 73 run, all exit 0.
  • Check-runs at 5b8a7dbee5: 41, 34 success, 7 skipped, 0 failing or pending. node scripts/pm/check-expected-skips.mjs --pr 24829 → OK.

  • Console Pin Gate does not run on pull_request or merge_group. Its proof is main's first full battery after this merge, which this seat reads and records on hourly full run: red on main (CI) #24749.

This seat readies the PR and queues it with auto-merge.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 20, 2026 09:42
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 20, 2026 09:42
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 41646a5 Oct 20, 2026
42 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-24749-console-pin-cbac9d7 branch October 20, 2026 10:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

hourly full run: red on main (CI)

2 participants