You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore(objectui): bump the console pin past objectui c096f03 — it carries objectui#11611, #11614 and #11619, which unlock #21714, #21765 and #21768 #21772
Filed by the triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U: the foreseen follow-up of three blocked cards whose unlock is the install face. ⛔ Not a claim, ⛔ not a dispatch.
Why
Three objectstack cards wait on .objectui-sha, not on objectui merging (the cross-repo unlock reads the install face):
Release first. objectstack 17.7.0's version PR (#21352) is ready and waits on the maintainer. A pin bump merged before that release would force another version-PR refresh. So this lands after 17.7.0 is published, unless the maintainer wants these three in 17.7.
tooling · priority:p2 (it unblocks three cards) · domain:devx (the pin lane, as #21696) · area:devpath.
Claim: director takeover round 1 (the maintainer's order: the release no longer holds this card)
Session: session_016tKoy8NJa35Yih1FdzrVmn
Account: hotlong (the session's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-21772-objectui-pin-bump, cut from main
Worktree: objectstack-issue-21772
Domain: domain:devx
Seat: the director seat, summon #32.
The maintainer's order, in the live director chat on 2026-10-05T00:48Z, verbatim: 「浏览器测试已经在运行,还有很多问题在处理,服务端开发不应该被阻塞」.
What it lifts: the card's "Order against the release" hold, release first, is lifted. The pin bump lands when it is ready, independent of 17.7.0's version PR chore: version packages #21352.
Release PR effect: the version PR is regenerated by the release workflow on the next push to main. ⛔ This PR does not touch chore: version packages #21352, and does no tag, publish or Release.
{
"issue": 21772,
"status": "done",
"branch": "claude/issue-21772-objectui-pin-bump",
"pr": "https://github.com/objectstack-ai/objectstack/pull/21800",
"session": "session_016tKoy8NJa35Yih1FdzrVmn — the dispatching director seat's id (subagent run; the container's CLAUDE_CODE_REMOTE_SESSION_ID resolves to the same id, and the relay envelope carried it)",
"premise_still_valid": true,
"head_sha": "4b9519ea23d31a3b7eb688f32bb52a895f8f7533",
"new_pin": "9dfaca654311cddd81714153c4f82c241d7cdc54",
"summary": "Moved .objectui-sha from 2e818d0b51ec to objectui main 9dfaca654311cddd81714153c4f82c241d7cdc54 (ls-remote read 2026-10-05T00:51:29Z and again before pr_create) through scripts/bump-objectui.sh --no-commit; merge-base --is-ancestor exits 0 for b508ac50d9 (#11611), 2abec3a96c (#11614) and c096f03279 (#11619). The range is 17 commits, 24 releasing changesets, 4 BREAKING-annotated plus one more `!` subject (objectui#8347); the console changeset carries a written ADR-0087 not-required (no-migration-prescription) disposition answering all five, including the honest #11614 interim (the spec refuses snake_case by name and camelCase as undeclared until #21768). Fallout fixed with the repo's own tooling: SDUI manifest regenerated (107 components; 11 inputs lose required:true per objectui#11605/#11613/#11569, now agreeing with the spec rows), lockstep re-recorded (unchanged parity), all 54 asserting pin citations re-measured through git diff -U0 and re-read (3 quoted anchors re-pointed), six migration corpus counts re-taken (method reproduced every old number), registry and view.mdx regenerated, spec patch changeset added. Browser smoke: Field Zoo record header draws the record picture from imageField at this pin (temporary local imageField edit, restored to HEAD and proven clean).",
"tests": "All at head 4b9519ea23. dispatch-gates --commands: 127 derived from 22 paths; --ran: '127 derived, 127 run, 0 NOT-MEASURED, 0 UNRUN' (check:skill-examples and check:dual-build-cjs-loads first exited 3 PREREQUISITE NOT MET, then 0 after `turbo run build --filter=!@objectstack/docs`, 71/72 cache hits). check:objectui-pin-citations --verify-anchors: '54 asserting objectui pin citation(s) match .objectui-sha (9dfaca654) … 7 anchor content assertion(s) verified'. check:objectui-bump: '20 assertions across 5 cases'. check-adr-0087-registration --base origin/main: '1 declared-breaking changeset(s), each carrying an ADR-0087 disposition'; check-changeset-no-major: 'no major bump'. spec check:generated: 1 stale (check:docs) → --fix → re-check ✓. Console build (build-console.sh after turbo build --filter=@objectstack/client..., under the verify lock, exit 0, 9m02s shared box): 'Bundle canary import/jobs present', 'Single-zod canary: exactly one zod version literal {major:4,minor:6,patch:5}', 'Console bundle carries THIS tree's @objectstack/spec, and only it'. @objectstack/spec vitest (local+repo): 668 files, 19259 passed, 1 todo; spec typecheck exit 0. sdui-parser: 14 files/225 passed, typecheck 0. Manifest readers: lint 119 files/5627 passed; metadata-protocol protocol.runtime-authoring-gate.test.ts 70 passed; cli --project unit sdui-manifest.test.ts + validate-build-gate-parity.test.ts 79 passed; test/jsx-gate-manifest-notice.e2e.test.ts NOT MEASURED, reason: in neither CLI tier (nightly population), left to CI. eslint --no-inline-config --format json on the 15 changed TS files: 15 files, 0 errors, 0 warnings; population eslint.config.mjs:971, no type-aware linting (:327-328). Browser smoke (showcase, `pnpm dev -- --fresh --ui --no-watch --compile -p 41877`, headless /opt/pw-browsers/chromium): Specimen — Full [data-record-picture]=1, img src /api/v1/storage/files/b1f4e384-…, naturalWidth 64, rounded-md; Specimen — Minimal 0; 0 page errors; only 401 get-session (pre-login) and 404 /favicon.ico; no /usage/storage 404. Screenshots: scratchpad dev-21772/smoke-with-cover.png, smoke-header-closeup.png, smoke-without-cover.png. Temporary edit proof: ablation-replace --restore 'blob == HEAD (4130858b8f8b) and git diff HEAD is empty'; showcase dist restored to sha256 cc1034dd9d23…. No ablation/reverse-verification applies (no behaviour change authored here).",
"mcp_calls": "0 — no MCP GitHub tool was called",
"api_writes": "2 REST writes, both through scripts/pm as objectstack-fleet[bot]: (1) relay pr_create — POST /repos/objectstack-ai/objectstack/dispatches (204) executed by fleet-write run 37253086350 as POST /repos/objectstack-ai/objectstack/pulls → #21800 draft, read back 21163/21163 bytes identical; (2) this os-dev-report comment — POST /repos/objectstack-ai/objectstack/issues/21772/comments via post-stamped.mjs. git push (not REST) on the branch only. No label, PR assignee, ready or auto-merge write: the dispatch's budget names none (the os-dev default label-write/PR-assignee step was narrowed to zero by 'no labels').",
"open_questions": [],
"out_of_scope_findings": [
"carrier: #21768 · the spec's snake_case grid-key prescription in packages/spec/src/ui/component.zod.ts ('these come in once the widget reads a camelCase spelling') now describes a condition this pin makes true; #21768 retargets it when it declares the camelCase keys · noted in PR Acceptance notes, not filed",
"carrier: #21765 · no showcase object declares imageField, so the reference app cannot show the record picture without an edit (this smoke used a temporary, reverted imageField on showcase_field_zoo); whoever flips imageField to live may want a declaring example · noted, not filed",
"carrier: 承接者:无 · anchors in spec records that cite no asserting sha (e.g. ui/component.zod.ts containers.tsx docblock anchors; component.test.ts plugin-dashboard/src/index.tsx:204) sit outside check:objectui-pin-citations' population and were not re-measured; several point into files this bump changed · noted in PR Acceptance notes only"
]
}
Method. Everything here was read, not run. The sources are the card, PR #21800, PR #21710 and git blobs: objectstack from merge-base e83c9f615441 to the head (8 commits), and objectui at 2e818d0b51ec and 9dfaca654311. Behaviour was judged two ways: by comparing each changed packages/spec/src file's AST with comments stripped (the TypeScript printer run over the base and head blobs), and by git grep counts. Nothing in the repo was built, run or tested.
Spec source outside tests: no accept set, key, type, default, optionality, refinement or export moves. No hunk changes behaviour.
ui/component.zod.ts (+262/−91), ui/action.zod.ts, ui/dataset.zod.ts and kernel/functional-completeness.ts have the same AST at base and head once comments are stripped.
Every hunk re-points a pin in a JSDoc or line comment and adds a dated 2026-10-05 hop sentence.
The earlier history is kept.
ui/view.zod.ts differs in exactly one AST node: the FormField.span.describe() string, where 2e818d0b51ec becomes 9dfaca654311.
The enum, .default('auto') and every other member are untouched.
The other hunks are in the map record's docblock: three quoted anchors re-pointed.
In the six step-18 entries only the reason string changes. id, surface, replacement and acceptanceCriteria are untouched, and the AST differences are string-literal lines only.
The .describe() change and view.mdx.
The span sha is the only describe change. view.mdx makes the same one-token edit in both span rows (lines 216 and 346), so the docs and the source agree.
The sentence is true at 9dfaca654:
plugin-form/src/autoLayout.ts, fields/src/field-type-alias.ts and components/src/renderers/form/form.tsx are byte-identical across the range.
WIDE_FIELD_TYPES still lists textarea, markdown, html, grid and richtext.
repeater still maps to field:grid.
spanLadderFor still emits one clamped class per multi-column tier.
Re-pointed anchors. I spot-read these at both pins. Each moved with its text byte-identical, except the one declared content change, at ObjectKanban.tsx:10.
The three in the view.zod.ts map record:
ObjectView.tsx:2300 (case 'map':);
objectql.zod.ts:2388 (ObjectMapConfigSchema);
objectql.zod.ts:1437 (LIST_VIEW_LOCAL_OVERRIDES).
containers.tsx lines 948-954, 1007, 1173-1179 and 1222. The file changed +89/−0.
ObjectGrid.tsx lines 5461, 1815, 6471-6472 and 6488-6489. The 4813-4840 block still hashes to c88443302d40, and useBulkExecutor.ts is byte-identical.
plugin-dashboard/src/index.tsx: the icon input at 299 and the registration start at 262.
ObjectKanban.tsx:
lines 752, 614-615, 1310, 1318-1319, 1568, 1584, 1669 and 1693 moved with their text unchanged;
:10 gains SortConfig. This is the one content change.
plugin-kanban/src/index.tsx lines 488-492, and objectql.ts:4754.
ObjectGantt.tsx gains 1 line below line 314. ObjectTree.tsx gains 2 lines at 135 and 1 at 264. ObjectCalendar.tsx has only a two-line comment edit at line 97.
Re-taken counts match:
keyboardNavigation: 15 hit lines at both pins, by the record's own method;
ElementDataSourceGate: 0, 3, 3, 3 and 4;
quickAdd, onQuickAdd and onCardClick: 2, 2 and 11.
At the head, every asserting-form .objectui-sha citation in packages/spec/src names 9dfaca654, and none is left on the old pin. Records worded as "the .objectui-sha pin X" are the gate's historical form, and they stay as dated reads.
Migration entries and the registry.
git grep -o -F at both objectui pins reproduces every number.
count
at 2e818d0b5
at 9dfaca654
tracked files
7579
7632
objectstack
17227
17313
@objectstack/spec
7134
7186
timeout
1351
1360
useState
2477
2477
TTL
182
182
tenant
1317
1318
Span
505
508
SpanSchema
57
57
RuntimeConfig
276
293
resourceLimits
2
2
window
4175
4193
period
238
238
interval
195
195
metrics
374
401
Every named zero still reads 0. Of the 37 tracing exports, only Span and SpanSchema are non-zero, as before.
The three new Span hits are in types/src/__tests__/object-form-section-field-entry-11615.test.ts.
Both resourceLimits hits are still prose in packages/app-shell.
Each entry moves its old "this pin" numbers, unaltered, into its dated history.
The registry's 44 changed lines match the entries' 44 changed lines word for word and in order, ignoring indentation.
functional-completeness.ts. This is a ledger and citation update, not a behaviour change: with comments stripped, its AST is unchanged.
It re-measures the calendar, gantt, timeline and map docblocks, and its claims hold:
the calendar anchors 294, 1296 and 1303-1304 did not move;
gantt moved 609 → 610 and 2306 → 2307;
the en, zh and de calendar.configRequired strings did not change.
Each change matches the registration source at 9dfaca654.
No required: true is added anywhere in the range.
The view:* aliases are not manifest components, so 11 is the complete set.
The manifest agrees with the spec rows, as claimed. Where a spec row exists, the member is already .optional(): objectName on grid, form, kanban, metric and master-detail; columns on related_list; childObject on line_items. list-view, embeddable-form, object-chart and object-pivot have no spec row.
The record's sha256, 6f921896ffac…, equals the hash of the manifest at the head. It still lists 107 components.
The lockstep file moves only rev, revDate and recordedAgainstPin. revDate is 2026-10-04T18:53:28Z, the pin's commit date. objectui's packages/sdui-parser has no diff over the range.
Test edits. With comments stripped, api-methods-batch-conformance.test.ts, action-outcome-messages.test.ts and component.test.ts have the same AST as at base. No expect was removed or loosened, and no skip or todo was added.
Range and dispositions.
The range 2e818d0b51ec..9dfaca654311 is right:
17 commits and 0 merges;
24 added changesets, with 21 minor and 8 patch package lines and no major;
No snake_case grid key is authored anywhere in examples/, packages/ or apps/.
No code imports @object-ui/types, and PartialSchema appears only in the changeset.
Prose nits, none blocking:
The PR body and the console changeset say the refusal's guidance "names objectui#11610". Only the source comment does (component.zod.ts:6242); the shipped prescription does not.
The PR body says the showcase's forms are wizard, drawer and modal forms. The showcase also has ObjectForm nodes on the default simple type and a simple master-detail form. None of them authors an inline section entry, so the conclusion stands, and the changeset words it correctly.
b403bb36f adds a dated note to 11564-flex-bag-children-list.md, a changeset from before the range, and the PR does not mention it. It adds no new releasing changeset.
Check-runs. At 2026-10-05T02:03Z, 22 of the 33 check-runs are success, Console Pin Gate among them. These are not yet success:
in progress:
Lint & Repo Gates
Temporal Conformance (live PG + MySQL)
Test Core (1/6) through Test Core (6/6)
Type Check · consumer gates
Type Check · workspace
skipped: Packed-tarball smoke (opt-in)
This review does not stand in for any of them. The browser smoke and the dev's local gate runs are read as claims and were not re-checked.
Its line "No key, default, enum member or export moves" holds.
Clause-②: no is correct.
No packages/spec accept set moves, and no key lands on a published payload.
The manifest change is objectui's registration data catching up with spec rows that were already optional. Even read as a widening, it ships in a minor.
Anchors outside the citation gate's population: escalated, non-blocking, no carrier.
Several records are dated reads at 2e818d0b51ec in the historical form, for example component.zod.ts at :3578, :4968, :6306, :7029, :8186 and :8653, and packages/qa/dogfood/test/expression-conformance.ledger.ts at :452 and :479. They are still true as dated statements, but several cite files that changed in the range: MasterDetailForm.tsx, types/src/data-display.ts, containers.tsx and plugin-dashboard/src/index.tsx.
component.test.ts:4146 cites plugin-dashboard/src/index.tsx:204, which is a lone closing brace at both pins. It was already stale before this PR.
Recommend a follow-up card to re-point these anchors or bring them into check:objectui-pin-citations.
The maintainer's order: answered.
The claim records the maintainer's order from the director chat at 2026-10-05T00:48Z: server-side work must not wait on the browser testing in flight. That lifts the card's release-first hold.
The diff honours it. All 22 files are on the claimed surface. None is a version, CHANGELOG or release-workflow file, and nothing of chore: version packages #21352 is touched.
When the version PR is regenerated, it folds in the two changesets. That is the effect the claim names.
ACCEPT — PR #21800 at 4b9519ea23 (Fixes #21772: the Console's objectui pin 2e818d0b51ec → 9dfaca654311)
Director seat, summon #32 · session session_016tKoy8NJa35Yih1FdzrVmn · holder of claim 5986229732 · 2026-10-05T02:07Z · the review of record for the report 5986773912; contract review PASS 5986881331 (at-tier, isolated, on this head). The review is owed on the path leg, because the diff edits packages/spec/src/** non-test source.
Checklist (read on GitHub, not from the report):
Form: draft, base main, first line Fixes #21772, Clause-②: no.
Scope: 22 files, +567 / −193, all on the claimed surface:
.objectui-sha;
two changesets: @objectstack/console minor with the ADR-0087 not-required disposition, and @objectstack/spec patch;
the regenerated SDUI manifest, its record and the lockstep file;
pin-citation re-points and re-measured counts in packages/spec, with view.mdx regenerated.
The browser smoke (record picture from imageField) is a dev claim, recorded with screenshots. The temporary showcase edit was reverted and is not in the diff.
"names objectui#11610" is in the source comment only.
The PR body's list of showcase form types is incomplete.
The dated note b403bb36f adds to an earlier changeset is not mentioned.
Landing: CI on 4b9519ea23 had 7 checks still running at the reading, Console Pin Gate was green, and none was red. The seat flips the PR ready and arms auto-merge, so it enters the queue only once every check is green.
Release: not a release act. Version PR chore: version packages #21352 is regenerated by the release workflow and will fold in this PR's two changesets.
Activity
objectstack-fleet commentedon Oct 5, 2026
Claim: director takeover round 1 (the maintainer's order: the release no longer holds this card)
Session:
session_016tKoy8NJa35Yih1FdzrVmnAccount:
hotlong(the session's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-21772-objectui-pin-bump, cut frommainWorktree:
objectstack-issue-21772Domain:
domain:devxSeat: the director seat, summon #32.
main. ⛔ This PR does not touch chore: version packages #21352, and does no tag, publish or Release.File surface, as chore(objectui): bump the console pin to 2e818d0b51ec (carries objectui#11466, #11574, #11578, #11581 and #11583) #21710 did for chore(objectui): bump the console pin to objectui main (past 973fc20f) before the 17.7 checklist run — carries objectui#11574, #11578, #11581 and the V1 declared-node slot #21696:
.objectui-shamoves to objectuimainat or afterc096f03, throughscripts/bump-objectui.sh.Console Pin Gateare green;imageField(objectui#11383) objectui#11619 changes;reportForm's "Joined blocks" row offers a block'sdatasetas free text with norequired, so Studio saves the block #21702 now refuses #21714, spec(liveness):object.imageFieldflips tolive, and its describe drops "Pending renderer", at the.objectui-shabump that carries objectui#11383 #21765 and spec(ui): theobject-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768) named in the PR body.Container & model:
M,mode:subagent,model: opusClause-②: no
Why no: a pin bump publishes no
packages/specaccept-set change. The spec declarations it unblocks ship on spec(ui):reportForm's "Joined blocks" row offers a block'sdatasetas free text with norequired, so Studio saves the block #21702 now refuses #21714, spec(liveness):object.imageFieldflips tolive, and its describe drops "Pending renderer", at the.objectui-shabump that carries objectui#11383 #21765 and spec(ui): theobject-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768.Thread-read: none
Serial constraints cleared: read 2026-10-05T00:48Z.
.objectui-shaonmainis2e818d0b51ec, set by chore(objectui): bump the console pin to 2e818d0b51ec (carries objectui#11466, #11574, #11578, #11581 and #11583) #21710. No open PR edits.objectui-sha.objectstack-fleet commentedon Oct 5, 2026
os-dev-report
{ "issue": 21772, "status": "done", "branch": "claude/issue-21772-objectui-pin-bump", "pr": "https://github.com/objectstack-ai/objectstack/pull/21800", "session": "session_016tKoy8NJa35Yih1FdzrVmn — the dispatching director seat's id (subagent run; the container's CLAUDE_CODE_REMOTE_SESSION_ID resolves to the same id, and the relay envelope carried it)", "premise_still_valid": true, "head_sha": "4b9519ea23d31a3b7eb688f32bb52a895f8f7533", "new_pin": "9dfaca654311cddd81714153c4f82c241d7cdc54", "summary": "Moved .objectui-sha from 2e818d0b51ec to objectui main 9dfaca654311cddd81714153c4f82c241d7cdc54 (ls-remote read 2026-10-05T00:51:29Z and again before pr_create) through scripts/bump-objectui.sh --no-commit; merge-base --is-ancestor exits 0 for b508ac50d9 (#11611), 2abec3a96c (#11614) and c096f03279 (#11619). The range is 17 commits, 24 releasing changesets, 4 BREAKING-annotated plus one more `!` subject (objectui#8347); the console changeset carries a written ADR-0087 not-required (no-migration-prescription) disposition answering all five, including the honest #11614 interim (the spec refuses snake_case by name and camelCase as undeclared until #21768). Fallout fixed with the repo's own tooling: SDUI manifest regenerated (107 components; 11 inputs lose required:true per objectui#11605/#11613/#11569, now agreeing with the spec rows), lockstep re-recorded (unchanged parity), all 54 asserting pin citations re-measured through git diff -U0 and re-read (3 quoted anchors re-pointed), six migration corpus counts re-taken (method reproduced every old number), registry and view.mdx regenerated, spec patch changeset added. Browser smoke: Field Zoo record header draws the record picture from imageField at this pin (temporary local imageField edit, restored to HEAD and proven clean).", "tests": "All at head 4b9519ea23. dispatch-gates --commands: 127 derived from 22 paths; --ran: '127 derived, 127 run, 0 NOT-MEASURED, 0 UNRUN' (check:skill-examples and check:dual-build-cjs-loads first exited 3 PREREQUISITE NOT MET, then 0 after `turbo run build --filter=!@objectstack/docs`, 71/72 cache hits). check:objectui-pin-citations --verify-anchors: '54 asserting objectui pin citation(s) match .objectui-sha (9dfaca654) … 7 anchor content assertion(s) verified'. check:objectui-bump: '20 assertions across 5 cases'. check-adr-0087-registration --base origin/main: '1 declared-breaking changeset(s), each carrying an ADR-0087 disposition'; check-changeset-no-major: 'no major bump'. spec check:generated: 1 stale (check:docs) → --fix → re-check ✓. Console build (build-console.sh after turbo build --filter=@objectstack/client..., under the verify lock, exit 0, 9m02s shared box): 'Bundle canary import/jobs present', 'Single-zod canary: exactly one zod version literal {major:4,minor:6,patch:5}', 'Console bundle carries THIS tree's @objectstack/spec, and only it'. @objectstack/spec vitest (local+repo): 668 files, 19259 passed, 1 todo; spec typecheck exit 0. sdui-parser: 14 files/225 passed, typecheck 0. Manifest readers: lint 119 files/5627 passed; metadata-protocol protocol.runtime-authoring-gate.test.ts 70 passed; cli --project unit sdui-manifest.test.ts + validate-build-gate-parity.test.ts 79 passed; test/jsx-gate-manifest-notice.e2e.test.ts NOT MEASURED, reason: in neither CLI tier (nightly population), left to CI. eslint --no-inline-config --format json on the 15 changed TS files: 15 files, 0 errors, 0 warnings; population eslint.config.mjs:971, no type-aware linting (:327-328). Browser smoke (showcase, `pnpm dev -- --fresh --ui --no-watch --compile -p 41877`, headless /opt/pw-browsers/chromium): Specimen — Full [data-record-picture]=1, img src /api/v1/storage/files/b1f4e384-…, naturalWidth 64, rounded-md; Specimen — Minimal 0; 0 page errors; only 401 get-session (pre-login) and 404 /favicon.ico; no /usage/storage 404. Screenshots: scratchpad dev-21772/smoke-with-cover.png, smoke-header-closeup.png, smoke-without-cover.png. Temporary edit proof: ablation-replace --restore 'blob == HEAD (4130858b8f8b) and git diff HEAD is empty'; showcase dist restored to sha256 cc1034dd9d23…. No ablation/reverse-verification applies (no behaviour change authored here).", "mcp_calls": "0 — no MCP GitHub tool was called", "api_writes": "2 REST writes, both through scripts/pm as objectstack-fleet[bot]: (1) relay pr_create — POST /repos/objectstack-ai/objectstack/dispatches (204) executed by fleet-write run 37253086350 as POST /repos/objectstack-ai/objectstack/pulls → #21800 draft, read back 21163/21163 bytes identical; (2) this os-dev-report comment — POST /repos/objectstack-ai/objectstack/issues/21772/comments via post-stamped.mjs. git push (not REST) on the branch only. No label, PR assignee, ready or auto-merge write: the dispatch's budget names none (the os-dev default label-write/PR-assignee step was narrowed to zero by 'no labels').", "open_questions": [], "out_of_scope_findings": [ "carrier: #21768 · the spec's snake_case grid-key prescription in packages/spec/src/ui/component.zod.ts ('these come in once the widget reads a camelCase spelling') now describes a condition this pin makes true; #21768 retargets it when it declares the camelCase keys · noted in PR Acceptance notes, not filed", "carrier: #21765 · no showcase object declares imageField, so the reference app cannot show the record picture without an edit (this smoke used a temporary, reverted imageField on showcase_field_zoo); whoever flips imageField to live may want a declaring example · noted, not filed", "carrier: 承接者:无 · anchors in spec records that cite no asserting sha (e.g. ui/component.zod.ts containers.tsx docblock anchors; component.test.ts plugin-dashboard/src/index.tsx:204) sit outside check:objectui-pin-citations' population and were not re-measured; several point into files this bump changed · noted in PR Acceptance notes only" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 5, 2026
Contract review
Served-tier:
CONTRACT_REVIEW_TIERHead-sha:
4b9519ea23d31a3b7eb688f32bb52a895f8f7533Local-runs: none
① Derived judgments
Method. Everything here was read, not run. The sources are the card, PR #21800, PR #21710 and git blobs: objectstack from merge-base
e83c9f615441to the head (8 commits), and objectui at2e818d0b51ecand9dfaca654311. Behaviour was judged two ways: by comparing each changedpackages/spec/srcfile's AST with comments stripped (the TypeScript printer run over the base and head blobs), and bygit grepcounts. Nothing in the repo was built, run or tested.Spec source outside tests: no accept set, key, type, default, optionality, refinement or export moves. No hunk changes behaviour.
ui/component.zod.ts(+262/−91),ui/action.zod.ts,ui/dataset.zod.tsandkernel/functional-completeness.tshave the same AST at base and head once comments are stripped.ui/view.zod.tsdiffers in exactly one AST node: theFormField.span.describe()string, where2e818d0b51ecbecomes9dfaca654311..default('auto')and every other member are untouched.reasonstring changes.id,surface,replacementandacceptanceCriteriaare untouched, and the AST differences are string-literal lines only.The
.describe()change andview.mdx.view.mdxmakes the same one-token edit in bothspanrows (lines 216 and 346), so the docs and the source agree.9dfaca654:plugin-form/src/autoLayout.ts,fields/src/field-type-alias.tsandcomponents/src/renderers/form/form.tsxare byte-identical across the range.WIDE_FIELD_TYPESstill lists textarea, markdown, html, grid and richtext.repeaterstill maps tofield:grid.spanLadderForstill emits one clamped class per multi-column tier.Re-pointed anchors. I spot-read these at both pins. Each moved with its text byte-identical, except the one declared content change, at
ObjectKanban.tsx:10.view.zod.tsmap record:ObjectView.tsx:2300(case 'map':);objectql.zod.ts:2388(ObjectMapConfigSchema);objectql.zod.ts:1437(LIST_VIEW_LOCAL_OVERRIDES).containers.tsxlines 948-954, 1007, 1173-1179 and 1222. The file changed +89/−0.ObjectGrid.tsxlines 5461, 1815, 6471-6472 and 6488-6489. The 4813-4840 block still hashes toc88443302d40, anduseBulkExecutor.tsis byte-identical.plugin-dashboard/src/index.tsx: the icon input at 299 and the registration start at 262.ObjectKanban.tsx::10gainsSortConfig. This is the one content change.plugin-kanban/src/index.tsxlines 488-492, andobjectql.ts:4754.ObjectGantt.tsxgains 1 line below line 314.ObjectTree.tsxgains 2 lines at 135 and 1 at 264.ObjectCalendar.tsxhas only a two-line comment edit at line 97.keyboardNavigation: 15 hit lines at both pins, by the record's own method;ElementDataSourceGate: 0, 3, 3, 3 and 4;quickAdd,onQuickAddandonCardClick: 2, 2 and 11..objectui-shacitation inpackages/spec/srcnames9dfaca654, and none is left on the old pin. Records worded as "the.objectui-shapin X" are the gate's historical form, and they stay as dated reads.Migration entries and the registry.
git grep -o -Fat both objectui pins reproduces every number.2e818d0b59dfaca654Every named zero still reads 0. Of the 37 tracing exports, only Span and SpanSchema are non-zero, as before.
The three new Span hits are in
types/src/__tests__/object-form-section-field-entry-11615.test.ts.Both resourceLimits hits are still prose in
packages/app-shell.Each entry moves its old "this pin" numbers, unaltered, into its dated history.
The registry's 44 changed lines match the entries' 44 changed lines word for word and in order, ignoring indentation.
functional-completeness.ts. This is a ledger and citation update, not a behaviour change: with comments stripped, its AST is unchanged.calendar.configRequiredstrings did not change.The manifest, its record and the lockstep file.
sdui.manifest.jsondrops exactly 11required: true:objectNameinputs, from objectui#11605 (fd060f076): object-grid, list-view, object-form, embeddable-form, object-master-detail-form, object-kanban, object-metric, object-chart and object-pivot;record:related_listcolumns, from feat(spec): PLATFORM_PLUGIN_WIRED_RUNTIMES — provenance roster for plugins[]-wired out-of-repo runtimes #11613;record:line_itemschildObject, from [finding]captureEngine's pass-through lands in a silenced logger, so its documented "unrecognised frames still reach the log" does not hold under a silent kernel #11569.fieldsdescription for feat(cli): i18n coverage + extract gain the flow/screen bucket #11615.9dfaca654.required: trueis added anywhere in the range.view:*aliases are not manifest components, so 11 is the complete set..optional():objectNameon grid, form, kanban, metric and master-detail;columnson related_list;childObjecton line_items. list-view, embeddable-form, object-chart and object-pivot have no spec row.6f921896ffac…, equals the hash of the manifest at the head. It still lists 107 components.rev,revDateandrecordedAgainstPin.revDateis2026-10-04T18:53:28Z, the pin's commit date. objectui'spackages/sdui-parserhas no diff over the range.Test edits. With comments stripped,
api-methods-batch-conformance.test.ts,action-outcome-messages.test.tsandcomponent.test.tshave the same AST as at base. Noexpectwas removed or loosened, and no skip or todo was added.Range and dispositions.
2e818d0b51ec..9dfaca654311is right:validate-translation-referenceshas noflowsleg — an authored key naming a flow, screen node or field that does not exist warns nobody #11608, fix(security): an organization-less permission-set row grants again — #11121 revoked standing access silently #11610 and feat(cli): i18n coverage + extract gain the flow/screen bucket #11615), and four commit subjects carry!(9db9ff3f9,8b14aecbd,2abec3a96andb403bb36f). That makes five declared-breaking changes. The PR body and the console changeset name all five, objectui#8347 included.9dfaca654and not of2e818d0b51ec:b508ac50d9(multi-org: platform/system tables (logs, messaging, config) never carry organization_id — by design, or planned? #11611),2abec3a96c([finding] serve.ts 的organizationsPkg字面量尚未消费 PLATFORM_PLUGIN_WIRED_RUNTIMES 的 key — roster 落地后的一行闭环 #11614) andc096f03279(fix(plugin-auth): declare the settings ordering edge so saved auth settings apply at boot #11619).strictObject. It refuses the eight snake_case keys by name (OBJECT_FORM_GRID_WIDGET_SNAKE_KEYS).minRowsor the other camelCase keys, so they are refused as unrecognized keys until spec(ui): theobject-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768.examples/,packages/orapps/.@object-ui/types, andPartialSchemaappears only in the changeset.component.zod.ts:6242); the shipped prescription does not.ObjectFormnodes on the defaultsimpletype and asimplemaster-detail form. None of them authors an inline section entry, so the conclusion stands, and the changeset words it correctly.b403bb36fadds a dated note to11564-flex-bag-children-list.md, a changeset from before the range, and the PR does not mention it. It adds no new releasing changeset.Check-runs. At 2026-10-05T02:03Z, 22 of the 33 check-runs are
success,Console Pin Gateamong them. These are not yetsuccess:This review does not stand in for any of them. The browser smoke and the dev's local gate runs are read as claims and were not re-checked.
② Semver level
console-9dfaca654311.md:@objectstack/consoleminor.console-2e818d0b51ec.md.not-required (no-migration-prescription), is the category chore(objectui): bump the console pin to 2e818d0b51ec (carries objectui#11466, #11574, #11578, #11581 and #11583) #21710 used, and it answers all five declared-breaking entries.objectui-pin-citations-9dfaca654311.md:@objectstack/specpatch.reasonstrings, plus comments.objectui-pin-citations-2e818d0b51ec.md.Clause-②: nois correct.packages/specaccept set moves, and no key lands on a published payload.③ Boundary flags
object-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768: answered.object-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768 owns it, and this PR unblocks it. The PR and the changeset both disclose the interim.object-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768, it ships the stale prescription. spec(ui): theobject-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768 should land promptly.imageFieldexample in the showcase, which belongs to spec(liveness):object.imageFieldflips tolive, and its describe drops "Pending renderer", at the.objectui-shabump that carries objectui#11383 #21765: answered.git grep imageField examplesfinds 0. The smoke's temporary edit is not in the diff, which touches noexamples/path. spec(liveness):object.imageFieldflips tolive, and its describe drops "Pending renderer", at the.objectui-shabump that carries objectui#11383 #21765 owns adding an example that declares one.2e818d0b51ecin the historical form, for examplecomponent.zod.tsat:3578,:4968,:6306,:7029,:8186and:8653, andpackages/qa/dogfood/test/expression-conformance.ledger.tsat:452and:479. They are still true as dated statements, but several cite files that changed in the range:MasterDetailForm.tsx,types/src/data-display.ts,containers.tsxandplugin-dashboard/src/index.tsx.component.test.ts:4146citesplugin-dashboard/src/index.tsx:204, which is a lone closing brace at both pins. It was already stale before this PR.check:objectui-pin-citations.Implemented-by:
claude/issue-21772-objectui-pin-bumpReviewed-by:
session_016tKoy8NJa35Yih1FdzrVmnVERDICT: PASS
Generated by Claude Code
objectstack-fleet commentedon Oct 5, 2026
ACCEPT — PR #21800 at
4b9519ea23(Fixes #21772: the Console's objectui pin2e818d0b51ec→9dfaca654311)Director seat, summon #32 · session
session_016tKoy8NJa35Yih1FdzrVmn· holder of claim5986229732· 2026-10-05T02:07Z · the review of record for the report5986773912; contract review PASS5986881331(at-tier, isolated, on this head). The review is owed on the path leg, because the diff editspackages/spec/src/**non-test source.Checklist (read on GitHub, not from the report):
main, first lineFixes #21772,Clause-②: no..objectui-sha;@objectstack/consoleminor with the ADR-0087not-requireddisposition, and@objectstack/specpatch;packages/spec, withview.mdxregenerated.5986881331,Served-tier: CONTRACT_REVIEW_TIER,Local-runs: none.What lands, as the record judged it:
2e818d0b51ec..9dfaca654311: 17 commits, 24 changesets, no major.b508ac50d9, [finding] serve.ts 的organizationsPkg字面量尚未消费 PLATFORM_PLUGIN_WIRED_RUNTIMES 的 key — roster 落地后的一行闭环 #116142abec3a96cand fix(plugin-auth): declare the settings ordering edge so saved auth settings apply at boot #11619c096f03279..describe()sha (FormField.span) and six migrationreasonstrings.Clause-②: nois correct.required: trueinputs, faithful to objectui#11605, feat(spec): PLATFORM_PLUGIN_WIRED_RUNTIMES — provenance roster for plugins[]-wired out-of-repo runtimes #11613 and [finding]captureEngine's pass-through lands in a silenced logger, so its documented "unrecognised frames still reach the log" does not hold under a silent kernel #11569. Every one is already.optional()on the spec rows that exist.object-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768.imageField) is a dev claim, recorded with screenshots. The temporary showcase edit was reverted and is not in the diff.Follow-ups:
object-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768 should land promptly after this, because the shipped snake_case prescription now describes a condition that holds. It is unblocked on merge, together with spec(ui):reportForm's "Joined blocks" row offers a block'sdatasetas free text with norequired, so Studio saves the block #21702 now refuses #21714 and spec(liveness):object.imageFieldflips tolive, and its describe drops "Pending renderer", at the.objectui-shabump that carries objectui#11383 #21765. The seat moves all three frompm:blockedtopm:queueafter merge.object.imageFieldflips tolive, and its describe drops "Pending renderer", at the.objectui-shabump that carries objectui#11383 #21765 owns a showcase example that declaresimageField.packages/specrecords outsidecheck:objectui-pin-citations' population are never re-measured on a pin bump, and some now point at moved or wrong lines #21802 (filed now): the anchors outside the citation gate's population that a bump never re-measures, plus one already-wrong anchor incomponent.test.ts.Non-blocking prose nits, as the record noted:
b403bb36fadds to an earlier changeset is not mentioned.Landing: CI on
4b9519ea23had 7 checks still running at the reading,Console Pin Gatewas green, and none was red. The seat flips the PR ready and arms auto-merge, so it enters the queue only once every check is green.Generated by Claude Code
objectstack-fleet commentedon Oct 5, 2026
Landed: PR #21800 →
1354e7bccaonmain(2026-10-05T03:06Z)Director seat, summon #32 · session
session_016tKoy8NJa35Yih1FdzrVmn· holder of claim5986229732.Fixes #21772closed this cardcompleted.pm:dispatchedis removed in the same step.main:.objectui-shais9dfaca654311, which carries feat(app-shell): register the ref:dataset spec-form widget, fed by the report inspector's dataset catalog (objectui#11601) objectui#11611, [finding] serve.ts 的organizationsPkg字面量尚未消费 PLATFORM_PLUGIN_WIRED_RUNTIMES 的 key — roster 落地后的一行闭环 #11614 and fix(plugin-auth): declare the settings ordering edge so saved auth settings apply at boot #11619.pm:blocked→pm:queue): spec(ui):reportForm's "Joined blocks" row offers a block'sdatasetas free text with norequired, so Studio saves the block #21702 now refuses #21714, spec(liveness):object.imageFieldflips tolive, and its describe drops "Pending renderer", at the.objectui-shabump that carries objectui#11383 #21765 and spec(ui): theobject-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768. spec(ui): theobject-formruntime form field declares the grid widget's eight camelCase keys once.objectui-shacarries objectstack-ai/objectui#11614 (#21704 fork 2 follow-up) #21768 is the one to take first: the shipped snake_case grid-key prescription now describes a condition this pin makes true.packages/specrecords outsidecheck:objectui-pin-citations' population are never re-measured on a pin bump, and some now point at moved or wrong lines #21802, the pin anchors outside the citation gate.Generated by Claude Code
chore(objectui): bump the console pin to 9dfaca654311 (carries object…
docs(qa): re-point 25 platform-checklist clauses the 17.7 pre-release…
chore(objectui): bump the console pin to 0abd4f9f8769 (carries object…