Repository navigation
chore(console): move the objectui pin 4016370af3c9 → 12dc7b47c340, regime C for sharing rules (objectui#13050) - #24660
Conversation
…IP: manifest pending) Claude-Session: https://claude.ai/code/session_017QnMGFC4agzW9DVBSwQ6Cc Co-authored-by: Claude <noreply@anthropic.com>
…at objectui 12dc7b47c340 Claude-Session: https://claude.ai/code/session_017QnMGFC4agzW9DVBSwQ6Cc Co-authored-by: Claude <noreply@anthropic.com>
…nsole-pin-12dc7b47
📓 Docs Drift Check
What this run could not see
Coarse fallback — 3 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
Seat review ·
|
| file | change |
|---|---|
.objectui-sha |
4016370af3c9 → 12dc7b47c340 (objectui#13050's merge) |
packages/sdui-parser/objectui-lockstep.json |
rev, revDate and recordedAgainstPin |
scripts/sdui-manifest.record.json, sdui.manifest.json |
the recorded renderer manifest at the new pin |
.changeset/24644-console-pin-12dc7b47c340.md |
the move's record |
- Pin choice.
12dc7b47has 29 check-runs: 27 success, 2 skipped, 0 failure. The tip2493e85a3992was passed over because its Board Snapshot run failed;cc4ae3e144e3had 3 runs cancelled. The choice meets the card's green rule. - Not governed.
check-governed-merges --pr 24660reads 0 of 5 paths. 306 changed lines. - Build path. The dev's readings show the
.objectstack-shabranch ran, the 7 installed packages are this tree's (diff -rqequal, control exit 1), and every pin gate exits 0. Its injection witness was measured independently: injected 1/1/1, control 0/0/0. - F1: still absent on the new pin (os-dev-report 6277654282 on [epic] ADR-0131 — total organization ownership: no NULL organization_id (v18 line) #15194).
- Regime C smoke: 5/5 PASS (os-dev-report 6278269372 on chore(objectui): move the console pin from 4016370af3c9 to the newest green objectui main past objectui#13050 (12dc7b47), and re-run F1 on it #24644).
VERDICT: ACCEPT. The seat sets the PR ready with auto-merge on; it lands when CI is green.
Follow-ups the seat files from the dev's report:
- (a) objectui: at 1440px the declared-rules table pushes Clone off-screen.
- (b) this repo: the in-build injection assertion's describe probe is vacuous at this pin.
Fixes #24644
Clause-②: no
This PR moves the console pin from
4016370af3c9to12dc7b47c340: objectuimainat12dc7b47c340d9bd80b35406d890c2d27c8017dc, the merge of objectstack-ai/objectui#13050 (the console half of regime C for sharing rules, objectui#12982). It is the newest objectuimaincommit that contains12dc7b47and was green at the move. The card's F1 re-test is posted on #15194 (os-dev-report 6277654282), and the regime C smoke run is below.This PR is not a release act. The Version Packages PR is not touched, and no release workflow is dispatched. No objectui source changed.
Tier: not governed.
node scripts/pm/check-governed-merges.mjs --branch claude/issue-24644-console-pin-12dc7b47at0b45222fef: "0 of 5 path(s) hit the register ... NOT governed". Size: 5 files, +283 / -23.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-19T20:29:52Z and again at 20:31:01Z, just before the bump (git ls-remotetip2493e85a3992both times):maincommit2493e85a3992(tip)Snapshot the board to the archive branch), 26 in progresscc4ae3e144e3Repo Gates,Lint,Bundle Analysis), 15 in progress12dc7b47c34012dc7b47c340was never a push tip (the queue landed it withcc4ae3e114 s later), so all its runs are themerge_groupones:CI(Build & E2E, Type Check, Test 16 shards, coverage, dist pins),Lint,Repo Gates,Governed Surface Guard,Changeset Presence, allsuccess. objectuimainmoved on todf71568080e2after the move; this PR does not re-choose.The bump.
OBJECTUI_ROOT=SCRATCH_CLONE bash scripts/bump-objectui.sh --no-commit 12dc7b47c340d9bd80b35406d890c2d27c8017dc, exit 0: "objectui pin: 4016370af3c9 → 12dc7b47c340 (on origin/main)", and "4016370af3c9..12dc7b47c340 walks completely" in a full (non-shallow) scratch clone. ⛔ No shared../objectuicheckout was read or written: every objectui read and build tree came from that scratch clone.Ancestry, in that clone (
--is-shallow-repositoryfalse): the old pin4016370af3c9is an ancestor of12dc7b47c340(exit 0); objectui#12957's merge749ed7607614too (exit 0); control, the reverse (12dc7b47c340an ancestor of4016370af3c9): exit 1. Range: 32 non-merge commits.objectui's own objectstack pin moved in this range:
.objectstack-sha=f4755a68a797(objectui8aa8e3e1e), was2c9bf9430a11.f4755a68a797is an ancestor of this branch's base14ccb1da9(exit 0), 29 commits behind it.The console build path, end to end
Run as
ci.yml'sconsole-pinjob runs it, heavy steps underscripts/pm/os-verify-lock.sh, each exit code captured before any pipe. Shared box, so wall-clock figures are shared-box readings. Deviations from the CI job:--concurrency=2(the container's resource rule), andOBJECTUI_ROOTnames a full scratch clone where CI shallow-clones.Final run, at this PR's head
0b45222fef(the branch merged withorigin/mainf89d29e382, which brings #24629's@objectstack/formulaandcorechanges into the packed packages). The build tree and the dist were deleted first.pnpm install --frozen-lockfilepnpm exec turbo run build --filter=@objectstack/client... --concurrency=2 && bash scripts/build-console.sh(lock VERDICTcommand-exit 0, held 733 s)CACHE_HITempty: index.html, assets and.objectui-shapresent, 65492 KB, objectui@12dc7b47c340pnpm check:console-sha:✓ Console dist matches the objectui pin (objectui@12dc7b47c340).pnpm check:console-injection --require-stamp(self-test 84 assertions; "Nothing assertable in this stamp; the dist was not contradicted")node scripts/gen-sdui-manifest-node.mjs: 107 components, sha256b7a53e34856f…; byte-identical to the committed pair (git status --porcelain: 0 lines)OBJECTUI_ROOT=.cache/objectui-12dc7b47c340 node scripts/check-sdui-manifest.mjs: present, intact, recorded at the live pin,@object-ui 17.7.0pnpm check:sdui-lockstep: byte-identical to objectui@12dc7b47c340 over 214 grammar linesThe
.objectstack-shabranch ran, in this order (build log):→ objectui@12dc7b47c340 installs @objectstack/client @objectstack/core @objectstack/formula @objectstack/lint @objectstack/sdui-parser @objectstack/spec @objectstack/types by commit — building them here...(turbo 36/36);→ Building objectui's own @objectstack/* at its .objectstack-sha f4755a68a797, the reference the spec assertion judges this bundle against...(from the pin store);→ OBJECTSTACK_ROOT is set: packing @objectstack/* from /home/user/objectstack-issue-24644, standing in for the pin f4755a68a797.,pack 7 package(s): 17.6s,✓ node_modules/.cache/objectstack now holds ... from /home/user/objectstack-issue-24644 (0b45222fef98);Lockfile is up to date, resolution step is skipped,Done in 7.6s;✓ 8959 modules transformed.;✓ Bundle canary 'import/jobs' present;✓ Single-zod canary: exactly one zod version literal {major:4,minor:6,patch:7}(2261assets/*.jsread);✓ Injected and vendored @objectstack/spec declare the same descriptions (vendored: @objectstack/spec of objectui's own build of objectstack f4755a68a797) — no observable skew;✓ Shipped the tracked sdui.manifest.json (recorded at objectui@12dc7b47c340, this pin).;✓ @objectstack/console dist ready (65492 KB) from objectui@12dc7b47c340.All seven
@objectstack/*packages objectui installs are this tree's, read off the build tree after the install at0b45222fef:node_modules/.cache/objectstack/.stamp.json:source: external,sha=0b45222fef98…,dirty: false.node_modules/.pnpm: 7@objectstackentries, all in the@objectstack+NAME@file+.objectstack-pin+NAME…form.dist/againstpackages/NAME/dist/:diff -rqexit 0 for all seven (spec, core, types, client, formula, sdui-parser, lint). Control: the installed spec'sdistagainstpackages/core/dist: exit 1.pnpm-lock.yaml(byte-identical to the one committed at12dc7b47c340,cmpexit 0): 0 registry-resolved@objectstack/*keys, 14file:keys. Control for the pattern: objectui's lockfile at0707b4ae3712counts 14 registry-resolved keys.The in-build injection assertion is vacuous at this pin, so injection is measured independently. Since #24532 the assertion judges the bundle against objectui's own build of its
.objectstack-sha(f4755a68a797). Its probes are the.describe()literals 32 to 160 characters long with no escape (describeCandidates,scripts/console-spec-probes.mjs). The one spec describe that changed betweenf4755a68a797and this tree, the flowrunAstext, is longer than 160 characters and carries an escape in the built dist, so the assertion finds no skew and the stamp recordsskew: falsewith null witnesses. Independent witnesses,grep -lFover the bundle'sassets/*.js(counts in brackets: files in this tree'spackages/spec/dist/ in thef4755a68a797reference spec'sdist):system flows keep system privileges; after(flowrunAs, [20 / 0])A rule a package declares to share records; organizations author their own in Setup(thesharing_ruletype-registry entry from #24599, [16 / 0])the trigger user until a human decision([20 / 0])Execution identity for the run: system = elevated (bypasses RLS), user = the triggering user([0 / 20])So the bundle carries this tree's spec as of this PR's head, and only these witnesses tell it from objectui's own build. The control bundle is the one F1 built (os-dev-report 6277654282). On it the in-build assertion also exits 0; the release path's second check,
check:console-injection --require-stamp, exits 1 (no stamp). Two earlier readings: against npm@objectstack/spec@18.0.0-next.3the two-sided assertion passes this bundle with 16 of 16 injected-only descriptions present and 0 of 2 published-only present, and against npm18.0.0-next.5it sees no skew either.An earlier run, at
e730837(the bump commit, before the manifest regeneration and the merge):build-console.shVERDICT 0, held 719 s, the same branch order,dist ready (65484 KB), sevendiff -rqexit 0, control exit 1, 0 registry-resolved keys. It warned "Shipped the tracked sdui.manifest.json, but its record names objectui@4016370af3c9", as expected before the regeneration. That run produced the committed manifest pair and lockstep record.The second half: manifest and lockstep record
node scripts/gen-sdui-manifest-node.mjs, exit 0: 107 components, sha256b7a53e34856f…, re-recordedscripts/sdui-manifest.record.jsonat the pin (built-tree,@object-ui/core17.7.0). Re-run at0b45222fef: exit 0, byte-identical.sdui.manifest.json: 107 → 107 components, none added or removed. Six change their inputs:list-viewpublishes the spec keys its renderer honours on a page node (33 inputs added;columns,filter,sortandoptionsre-described) — objectuia244a172a, objectui#13047;record:details,record:highlightsandrecord:quick_actionsgainemptyState— objectuic2191654a, objectui#12932;action:buttonandaction:icondrop thepatchinput and re-describeoperation— objectui61ed5ada6. No page in this tree authorspatchon those nodes (git grepoverexamples/: 0), andcheck:page-declaration-shapepasses.packages/sdui-parser/objectui-lockstep.json:node scripts/check-sdui-lockstep.mjsexit 1 before ([pin-moved]),OBJECTUI_ROOT=.cache/objectui-12dc7b47c340 pnpm gen:sdui-lockstepexit 0, thenpnpm check:sdui-lockstepexit 0. Both blobs are unchanged (0131f27cf86d,76c18fb95d1f), so no parser port is owed.The console changeset
.changeset/24644-console-pin-12dc7b47c340.mdwas written byscripts/bump-objectui.sh --no-commitand renamed to this card's prefix, as PR #24476 did. Its list is the generator's, untouched.@objectstack/consoleminor: 28 releasing changesets across 32 non-merge commits, 1 annotated breaking, 0 release-nothing, 4 commits without a changeset (listed by subject in the changeset).not-required (no-migration-prescription)against this tree, withClause-②: nobeside it, as in PR chore(objectui): move the console pin from 0707b4ae3712 to 4016370af3c9, the newest green objectui main and the first pin past objectui#12957 #24476. That is the one hand-written part of the five files:a928aaa61(objectui#13015) makesfailuresa required member of@object-ui/types'ImportJobUndoResultand widens@object-ui/i18n'sTranslationKeys.@object-ui/*package (git grepfor imports: 0). The route side of the shape is this tree's own:UndoImportJobResponseSchemaalready requiresfailures.F1 on the new pin
Posted on #15194 as os-dev-report 6277654282, method of 6263864885 / 6262553400, every value re-measured. Verdict: F1 absent. Tombstone byte probe 0 of 2261 assets in both builds; 0 banners on the 4
permissionSetseditor pages and the 3 finance pages of a fresh showcase undersingle, for both builds; positive control 0 → 1 banner (2 errors) on both; of the two release refusals, the assertion passes the control bundle at this pin (vacuous, above) andcheck:console-injection --require-stamprefuses it (exit 1).Regime C console smoke
Fresh showcase (
OS_PORT=36417 pnpm dev -- --fresh -p 36417,Tenancy: single, health 200), serving this PR's injected console atb1abdca6(check:console-shaat boot: matches objectui@12dc7b47c340). Playwright 1.63.0, Chromium/opt/pw-browsers/chromium, 1440×1000, signed in through the console form./apps/setup/metadata/sharing_rule?scope=environment: bothshare_new_inquiries_with_field_opsandshare_key_account_qualified_contacts_with_managerslisted, Package columncom.example.showcase, the declared-only hint shown, no New, an "Organization rules" link.GET /api/v1/meta/sharing_rule: 2 items,_packageIdcom.example.showcase,_provenancepackage. The rule's detail page shows "This item is locked and cannot be edited or deleted. com.example.showcase@0.1.0" and offers no Edit or SavePOST /api/v1/security/_activation/sharing_rule/:name; the rule stays listed, switched offshare_new_inquiries_with_field_ops(aria-checkedtruebefore) sentPOST /api/v1/security/_activation/sharing_rule/share_new_inquiries_with_field_ops, body{"enabled":false}, 200, the only write. After a reload the rule is still listed and its switch readsfalse;sys_metadata_activationholds one row for it,active: falseshare_key_account_qualified_contacts_with_managerspre-filledshare_key_account_qualified_contacts_with_managers_copywith criteria{"$and":[{"stage":"qualified"},{"company":"Northwind"}]}; submit sentPOST /api/v1/data/sys_sharing_rule, 201, the only write. Thesys_sharing_rulerow exists under that name,object_nameshowcase_contact, with the showcase organization'sorganization_idsys_sharing_rulecreate grant sees no ClonePOST /api/v1/auth/admin/create-user) and bound to showcase'sopsposition (it carriessetup.access):POST /api/v1/data/sys_sharing_ruleas that user answers403 PERMISSION_DENIED; the same Setup page lists both rules with 0 Clone buttons (the admin, same page: 2), and shows "Read-only for your account: switching a declared item on or off requires themanage_metadatacapability." Control: the same user without a position is refused the Setup app ("You don't have access to this app"), which is why theopsbinding was needed for a non-vacuous readingPUT /api/v1/meta/sharing_rule/NEW_NAMEanswers403 NOT_CREATABLEPUT /api/v1/meta/sharing_rule/share_key_account_qualified_contacts_with_managers_copyas the admin:403,code: NOT_CREATABLE, "Metadata type 'sharing_rule' is code-only ... Author an organization rule instead (POST /api/v1/sharing/rules) ...". With?mode=draft:403 NOT_CREATABLEThe server was stopped through its recorded process group (group read empty, port refused).
Gates
All at this PR's head
0b45222fef, after a workspace build there (turbo run build --filter=!@objectstack/docs, 76/76, lock VERDICT 0) andrm -rf packages/runtime/.objectstack. Each exit code captured before any pipe.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands(no paths: 5 paths vs merge basef89d29e382, three-dot) derived 72 commands. All 72 exited 0.--ranreconciliation overCOMMAND :: exit Nlines: "72 derived famil(ies) accounted for — 72 run, 0 NOT-MEASURED (a DERIVED zero — all 72 recorded an exit code and none of them is 3)", exit 0.b1abdca6(before the merge): 71 exit 0, andnode scripts/check-plugin-teardown-shape.mjs --self-testexit 3 because this shallow checkout lacked its pinned fixture commit; aftergit fetch --depth=1of that commit it exited 0.check-adr-0087-registration --base origin/main0 (the exemption notice names this changeset),check-empty-changeset --base origin/main0,check-changeset-no-major --base origin/main0,check-sdui-manifest.mjs0 and--self-test0,pnpm check:sdui-lockstep0,pnpm check:console-sha0,pnpm check:console-injection0,pnpm check:objectui-changeset0,pnpm check:nul-bytes0,pnpm check:dual-build-cjs-loads0.pnpm check:objectui-bump0 ("20 assertions across 5 cases").test/typecheckis owed.CI
ci.yml's two speeds; theconsole-pinjob'sif:excludespull_requestandmerge_group), and the fleet-write relay cannot dispatchci.yml. So the pre-merge full battery is NOT MEASURED, and the local run above is the pre-merge reading.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 at12dc7b47c340. The dispatching seat reads it; if it is red, it is amain-red this card owns.Acceptance notes
Observations, not filed:
f4755a68a797and this tree's spec. Raised for the seat to decide; not changed here.catalog-clone-*button's box starts at x = 1515 (outside the viewport), and the table's scroll container is 1323 px wide in a 1134 px box, so the Active switch is also cut at the right edge until the user scrolls the table sideways. At 1920 px the button is inside the viewport (x = 1806). Screenshots in the session scratchpad. The card bars objectui source changes here; the seat files it on objectui if it judges it a defect.opsuser above), the Active column shows?for each rule.scripts/build-console.shdefaults to the sibling../objectuiwhenOBJECTUI_ROOTis unset; every run here named a scratch clone, as PR chore(objectui): move the console pin from 0707b4ae3712 to 4016370af3c9, the newest green objectui main and the first pin past objectui#12957 #24476 did.Generated by Claude Code