Skip to content

chore(console): move the objectui pin 616df6598b42 → cf153eb2e535, past objectui's stored_expression toast row (objectui#13233), so PR #24778 can land - #24982

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-24928-objectui-pin
Oct 20, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-24928-objectui-pin

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #24928
Clause-②: no

This PR moves the console pin from 616df6598b42 to cf153eb2e535: objectui main at cf153eb2e5351505abf3b82fb76bfdc9a841bbde. That commit carries 8803ca54ac (objectstack-ai/objectui#13233, objectui#13178), which adds the stored_expression row to objectui's STRIPPED_LINE in packages/app-shell/src/providers/writeWarningToast.ts. It is the newest objectui main commit at or after 8803ca54ac whose objectui push CI run had concluded success, coverage lane included, when the pin moved. With it, the domain:spec lane's PR #24778 (#24690) can land without reddening the Console Pin Gate.

This PR is not a release act. The Version Packages PR is not touched, and no release workflow is dispatched. No objectui source changed, nothing was written to objectui, and no product code, .github/workflows/** or scripts/build-console.sh change is in it.

Tier: not governed. node scripts/pm/check-governed-merges.mjs --branch claude/issue-24928-objectui-pin at a1c663ae62: "0 of 4 path(s) hit the register (7 surfaces govern objectstack) ... NOT governed", exit 0. Size: 4 files, +87 / -6.

Choosing the pin

  • The green push run. objectui CI (workflow 223145786), run 39483449911, event push, branch main, head cf153eb2e535, attempt 1, created 2026-10-20T19:26:17Z, completed 19:52:18Z, conclusion success. All 31 jobs concluded success: Test (coverage) and all eight Test (coverage shard N/8), the sixteen Test (shard N/16), Test, Type Check, Build & E2E, Test (dist pins), Build Docs and Changeset Fixed Group Check. Read off repos/objectstack-ai/objectui/actions/runs/39483449911/jobs at 2026-10-20T20:03Z.

  • The read at the move (actions/workflows/223145786/runs?branch=main&event=push, 20:03:24Z, re-read 20:04:58Z, just before the bump at about 20:05Z):

    objectui main commit push CI run at the move
    53dea27afab5 (tip, the commit the PM read) 39487454858 in progress, so passed over
    9e1bff63ad2d 39486510889 in progress, so passed over
    cf153eb2e535 39483449911 success: the target
    5235d6d57b47 39479142157 success
    8803ca54ac26 (the row) 39412104445 success

    Re-read at 20:36:19Z: both newer runs have since concluded success (9e1bff63ad2d at 20:16:10Z, 53dea27afab5 at 20:21:54Z). This PR does not re-choose; see Acceptance notes. The two commits it passes over are 9e1bff63a (fix(app-shell): the app report index lists the reports its navigation ships, module contributions included objectui#13283) and 53dea27af (fix(app-shell): give the package dialog's Dependencies row a key/value editor objectui#13284), both app-shell fixes.

  • Ancestry, in a full (non-shallow) scratch clone of objectui (--is-shallow-repository false), each against cf153eb2e535:

    • 8803ca54ac (the row) is an ancestor: exit 0;
    • the old pin 616df6598b42 is an ancestor: exit 0;
    • cf153eb2e535 is on origin/main: exit 0;
    • control, the reverse (cf153eb2e535 an ancestor of 616df6598b42): exit 1.

    Range: 69 non-merge commits, 33 of them past 8803ca54ac.

  • The row is in the pin. git show cf153eb2e535:packages/app-shell/src/providers/writeWarningToast.ts: line 145 declares STRIPPED_LINE: Record keyed by DroppedFieldsEvent['reason'] | 'stored_expression', and line 173 holds the stored_expression entry.

  • objectui's own objectstack pin moved in this range: .objectstack-sha f4755a68a797 → 06cab4849a8a (objectstack chore: version packages (#24524), an ancestor of this branch's base, exit 0).

The procedure, as written

No shared objectui checkout was written: /home/user/objectui is shallow and shared, so every objectui read came from the full scratch clone, which OBJECTUI_ROOT names. build-console.sh then makes its build worktree from that clone, so its worktree registration lands in the clone, not in the shared checkout. Exit codes were captured before any pipe; the heavy steps ran under scripts/pm/os-verify-lock.sh.

step command exit
bump OBJECTUI_ROOT=SCRATCH_CLONE bash scripts/bump-objectui.sh --no-commit cf153eb2e5351505abf3b82fb76bfdc9a841bbde: "616df6598b42..cf153eb2e535 walks completely", "objectui pin: 616df6598b42 → cf153eb2e535 (on origin/main)", "wrote changeset console-cf153eb2e535.md (@objectstack/console: minor)". --no-commit only so the commit carries this repo's trailer pair; the files are the script's 0
build pnpm exec turbo run build --filter=@objectstack/client... --concurrency=2 (36/36), then OBJECTUI_ROOT=SCRATCH_CLONE bash scripts/build-console.sh (= pnpm objectui:build). Lock VERDICT command-exit 0, held 931 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 cf153eb2e535 — built-tree .cache/objectui-cf153eb2e535/apps/console, @object-ui/core workspace version 17.7.0" 0
manifest check node scripts/check-sdui-manifest.mjs: "present, intact (sha256 d1fde278ffd6…, 107 components) and recorded at the live objectui pin cf153eb2e535" 0
lockstep, before pnpm check:sdui-lockstep: [pin-moved] 1
lockstep record OBJECTUI_ROOT=.cache/objectui-cf153eb2e535 pnpm gen:sdui-lockstep 0
lockstep, after pnpm check:sdui-lockstep: "byte-identical to objectui@cf153eb2e535 ... over 214 grammar line(s) [blob 0131f27cf86d], agrees on all 25 diagnostic code(s) and on the not-a-container predicate [blob 76c18fb95d1f]" 0
bump self-test pnpm check:objectui-bump: "bump-objectui self-test PASSED — 20 assertions across 5 cases" 0

The regenerated files

  • .objectui-sha 616df6598b42… → cf153eb2e5351505abf3b82fb76bfdc9a841bbde (bump-objectui.sh).
  • .changeset/console-cf153eb2e535.md (bump-objectui.sh, untouched): @objectstack/console minor, the highest level objectui declared over the range. Counts: 65 releasing of 66 changesets across 69 non-merge commits, 0 breaking (0 declared major, 0 annotated), 1 release-nothing, and 3 commits without a changeset, listed by subject in the changeset. With no breaking entry, the generator wrote no ADR-0087 placeholder, so no line of it is hand-written.
  • scripts/sdui-manifest.record.json (gen-sdui-manifest-node.mjs): objectuiSha and modulesRoot move to the new pin.
  • packages/sdui-parser/objectui-lockstep.json (gen:sdui-lockstep): rev, revDate and recordedAgainstPin move. objectui's packages/sdui-parser/src is unchanged over the range (git diff --stat: empty), and both blobs are unchanged (0131f27cf86d, 76c18fb95d1f), so no parser port is owed.
  • sdui.manifest.json is not in the diff: the generator rewrote it byte-identical (107 components, sha256 d1fde278ffd6… before and after).

Proof that the pin carries the row, against PR #24778's spec

Staging: PR #24778's head 56cac787cbe5 was fetched (pull/24778/head) into a scratch objectstack worktree, installed, and its seven packed packages built (turbo run build of the client, formula, lint, sdui-parser and types closures, 36/36, lock VERDICT 0). A second objectui worktree at cf153eb2e535 was made from the scratch clone, and OBJECTSTACK_ROOT=PR24778_WORKTREE node scripts/objectstack-pin.mjs build packed those packages into it ("from ... os-pr24778 (56cac78…)"), then pnpm install --frozen-lockfile, exit 0. From packages/app-shell there, @objectstack/spec/data resolves to the packed copy, and DroppedFieldsEventSchema.shape.reason.options reads ["readonly","readonly_when","primary_key","computed","stored_expression"]. Control: the same probe in this branch's build tree reads the four-member list.

Command, from the objectui worktree root: pnpm exec vitest run --maxWorkers=2 --reporter=verbose packages/app-shell/src/providers/writeWarningToast.test.ts.

leg spec installed result exit
A PR #24778 56cac787cb (five reasons) 20 passed, 1 failed (21) 1
B, control this branch (four reasons) 21 passed (21) 0
  • gives every reason the pinned spec declares its own wording (#3935), the test that drives each reason: passed on leg A, over all five reasons the PR feat(spec,objectql): report a caller value a stored expression replaced, as DroppedFieldsEvent reason stored_expression #24778 spec declares, stored_expression included. Passed on leg B too.
  • words reason \stored_expression` as a computed value saved in place of the one sent, in en and zh (objectui#13178)`: passed on both legs.
  • The one red on leg A is objectui's designed tripwire, reminds the pin bump that carries \stored_expression` to retire the widening (objectui#13178). It asserts the installed spec does NOT declare stored_expression, with the message "the spec pin now declares stored_expression: delete | 'stored_expression'from STRIPPED_LINE's key type and make spec-symbol-batch6.test.ts's_ReasonIsTheEnumpin the five-member union". It fires once objectui's OWN.objectstack-sha` reaches a spec that declares the arm. It is objectui's suite, and objectstack's Console Pin Gate does not run it.

And the console build against PR #24778's tree, at this pin. bash scripts/build-console.sh run from the PR #24778 worktree with its .objectui-sha set to cf153eb2e535 (a scratch edit) and OBJECTUI_ROOT naming the scratch clone: exit 0, lock VERDICT 0. objectui's dependency build ran 34/34, the console's tsc && vite build transformed 8966 modules, and grep -c 'error TS' over the log is 0. The injection assertion found PR #24778's own text: "present (injected only): ') written with the computed value in place of the caller'", "5 of 5 injected-only descriptions are in the bundle". So the Console Pin Gate's build holds at this pin both before and after PR #24778.

The Console Pin Gate

  • It does not run on this PR or in the merge queue. ci.yml's console-pin job has github.event_name != 'pull_request' && github.event_name != 'merge_group' in its if:. So the pre-merge full battery is NOT MEASURED on GitHub, and the local run below 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 cf153eb2e535.
  • Local run, as the job runs it, at a1c663ae62 (the build itself ran at af060f0855; the later commit changes only the two records): install (pnpm install --frozen-lockfile, exit 0); the client closure (36/36); build-console.sh (exit 0). Deviations from the job: --concurrency=2 for the closure and for objectui's dependency build, NODE_OPTIONS=--max-old-space-size=4096, OBJECTUI_ROOT names the full scratch clone where CI shallow-clones, and there is no cache restore, so CACHE_HIT is empty.
    • build-console.sh's .objectstack-sha branch ran in order: objectui's own @objectstack/* built at its .objectstack-sha 06cab4849a8a as the reference, then "OBJECTSTACK_ROOT is set: packing @objectstack/* from /home/user/objectstack-issue-24928", 7 packages from af060f0855, then the frozen install ("Lockfile is up to date"), objectui's dependency build 34/34 (0 cached), and the console's tsc && vite build ("8966 modules transformed"). grep -c 'error TS': 0.
    • Closing checks: "Bundle canary 'import/jobs' present"; "Single-zod canary: exactly one zod version literal {major:4,minor:6,patch:7}" (2261 assets/*.js read); "Console bundle carries THIS tree's @objectstack/spec, and only it (vendored: @objectstack/spec of objectui's own build of objectstack 06cab48)", "2 of 2 injected-only descriptions are in the bundle"; "@objectstack/console dist ready (65684 KB) from objectui@cf153eb2e535".
    • "Assert a real Console dist is in place": index.html, assets/ and the .objectui-sha stamp are present.
    • pnpm check:console-sha: "Console dist matches the objectui pin (objectui@cf153eb2e535).", exit 0.
    • 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.", exit 0.

Checklist-cited objectui specs whose blob changes over 616df6598b42..cf153eb2e535

Read, not edited: every *.spec.ts, *.test.ts and *.test.tsx path cited anywhere in docs/qa/platform-checklist/areas/*.json (at origin/main 3a7a60af8f), resolved against objectui's tree at both pins. 89 objectui paths resolve, 21 of them the e2e/live/*.spec.ts live specs. Each one's blob was compared at the two pins (git ls-tree -r):

That is the only one. The other 88 are byte-identical at both pins, every e2e/live/*.spec.ts among them: over the range, e2e/live/ changes only e2e/live/ci/backend.env. No checklist file is touched here; the checklist anchor #24579 reads this list.

Gates

Every gate ran at this PR's head a1c663ae62, after a workspace build there: turbo run build --filter='!@objectstack/docs' --concurrency=2, 76/76, lock VERDICT command-exit 0. packages/runtime/.objectstack was removed first. 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 from 4 paths against merge base 6440cf163, three-dot. All 73 exited 0.
    • --ran 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 the 73, each exit 0:
    • 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";
    • check-sdui-manifest.mjs and its --self-test; pnpm check:sdui-lockstep; pnpm check:console-sha; pnpm check:console-injection;
    • pnpm check:objectui-changeset, pnpm check:published-files, pnpm check:pm-changeset-deadline-census;
    • pnpm check:nul-bytes: "scanned 11523 text file(s) ... no raw ASCII control bytes".
  • Added outside the derivation: pnpm check:objectui-bump, exit 0.
  • No package source changed, so no package test / typecheck is owed. test:repo is CI's (Test Core).
  • git merge-tree --write-tree origin/main HEAD against origin/main 3a7a60af8f: exit 0, clean. None of the four paths is routed to the os-regen merge driver (git check-attr merge: unspecified), so the local answer is GitHub's too. The three commits main gained since the base (test(driver-sql): pin the NODE_ENV=production auto-migrate guard with a safe drift, beside a dev control #24967, liveness(webhook): a declared webhook's label and description are live on the Studio metadata list #24972, docs: give the @objectstack/skills install line for the project's own package manager #24973) touch none of the four files and none of the console build scripts. Inside the seven packed packages they change only packages/spec/liveness/webhook.json, packages/spec/liveness/state-counts/webhook.md and one packages/lint test file, none of them under dist/, which is what the console bundles.

Acceptance notes

Observations, not filed:


Generated by Claude Code

fix(app-shell): retire the permission-set clone notice once the copy is held or saved (#13282)

objectui@cf153eb2e5351505abf3b82fb76bfdc9a841bbde

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
…er lockstep at objectui cf153eb2e535

node scripts/gen-sdui-manifest-node.mjs re-recorded the provenance record at the
new pin (sdui.manifest.json itself is byte-identical: 107 components, sha256
d1fde278ffd6), and pnpm gen:sdui-lockstep re-recorded objectui's sdui-parser
side, unchanged over the range.

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 3a7a60af8f02682aba10c8ad1aaa8d4d238066eb → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Seat review

ACCEPT · domain:devx seat 1 · os-warren · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-20T21:27Z · head a1c663ae62 · card #24928 (claim 6300209115)

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


Generated by Claude Code

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

2 participants